基于阿里云实现游戏数据运营(附Demo)

摘要: 原作者:阿里云解决方案架构师,陆宝。通过阅读本文,您可以学会怎样使用阿里云的maxcompute搭建一套数据分析系统。

一、总览

一个游戏/系统的业务数据分析,总体可以分为图示的几个关键步骤:
1、数据采集:通过SDK埋点或者服务端的方式获取业务数据,并通过分布式日志收集系统,将各个服务器中的数据收集起来并送到指定的地方去,比如HDFS等;(注:本文Demo中,使用flume,也可选用logstash、Fluentd等)
2、数据同步:构建数据通道,接受数据采集agent的数据流,并且分发到不同的存储/计算引擎中去;(注:本文Demo中,使用阿里云datahub作为通道,maxcompute作为存储/计算引擎)
3、数据开发:按照日志格式、业务领域,构建数据模型;(注:本文Demo中,在maxcompute中创建对应的project、table)
4、数据计算/分析:按照业务场景的分析要求,编写SQL脚本 或者 使用工具,完成数据的分析及展现;(注:本文Demo中,基于阿里云quickBI,完成多维分析、仪表盘的配置)
接下来按照上述步骤,给大家具体介绍,如何利用相关的平台/工具,实现一个简单的数据分析场景。



二、环境准备

首先,需要准备一台服务器,作为日志采集的agent,此处选用阿里云的ECS(具体ECS选购过程不再赘述),服务器配置信息:
实例规格:4 核 16GB
地域:华东 1(华东 1 可用区 F)
操作系统:CentOS 7.4 64位
网络类型:专有网络
安全组:允许远程ssh
本地远程登录ECS服务器
ssh  {username}@{host}


Step1:安装JDK

Flume运行依赖java环境,因此需要在服务器安装SDK,本文采用先下载到本地,再上传服务器的方式安装。
1、下载并上传SDK (demo选用jdk1.8.0_151,可至oracle官网下载)
scp {本地文件路径}  {username}@{host}:{服务器目录}


2、上传完成,解压并设置相应的环境变量:
1、tar -zxvf  {jdk压缩包名}
2、环境变量设置
# vi /etc/profile
增加:
export JAVA_HOME={jdk目录}
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME JRE_HOME CLASS_PATH PATH
#source /etc/profile

3、检查SDK是否安装完成:
java -version


Step2:安装flume

同样,对于flume,也可采用先下载到本地,再上传服务器的方式安装。

1、下载并上传flume安装文件 (demo选用apache-flume-1.8.0,可至apache官网下载)
scp {本地文件路径}  {username}@{host}:{服务器目录}

2、上传完成,解压并设置相应的环境变量
1、tar -zxvf  {flume压缩包名}

2、环境变量设置
# vi /etc/profile
增加:
export FLUME_HOME=/usr/local/flume
修改:
path= $path :$FLUME_HOME/bin
#source /etc/profile

3、检查flume是否安装完成:
#此处注意,需要写flume安装的全路径
{flume安装路径}/bin/flume-ng version


Step3:安装Datahub Sink插件

因为Demo选用datahub作为数据通道,所以还需要安装flume-datahub的插件,该文件不大,此处可以选择直接在服务器下载安装。
1、下载flume-datahub插件包
wget https://github.com/aliyun/aliyun-odps-flume-plugin/releases/download/1.1.0/flume-datahub-sink-1.1.0.tar.gz


2、解压并部署插件
1、tar zxvf flume-datahub-sink-1.1.0.tar.gz
2、将解压后的插件文件夹移动到Flume安装目录下
# mkdir /usr/local/flume/plugins.d
# mv flume-datahub-sink  /usr/local/flume/plugins.d/
OK,环境准备工作,到此就基本完成了。


三、数据开发

Demo使用阿里云大数据服务maxCompute作为存储计算引擎。


Step1:开通maxcompute服务

阿里云实名认证账号访问https://www.aliyun.com/product/odps ,开通maxcompute,此处选择按量付费进行购买。

Step2:创建项目及业务模型

1、进入数加控制台 https://data.aliyun.com/console ,点击“dataworks->项目列表” ;


2、点击页面“创建项目”按钮,输入project的基本信息,点击确定,会有一个短暂的初始化过程;


3、点击项目列表下对应项目操作栏,进入dataworks的数据开发页面;


4、创建脚本文件:点击顶部菜单栏中的数据开发,点击“新建”处新建脚本,也可直接点击“新建脚本”任务框;


5、按照需求,设计对应的业务模型,并通过脚本完成模型创建;
#此处按照场景示例,选择创建
1、 事实表:充值记录,与日志文件recharge_record_log对应;
2、 维表:商品信息;
#建表语句示例(同时维表可做数据初始化)
create table if not exists recharge_record_log(
recharge_time string comment '充值时间',
…     
item_id string   comment '商品ID'   
)

注:具体可以参考对应的建表脚本(建表及维表初始化脚本.sql)
可在数据开发的IDE环境编写、调测脚本:


OK,数据建模的工作,到此就基本完成了。


四、数据同步

step1:数据通道设置

Demo使用阿里云datahub作为数据同步的通道。
1、首先,申请开通datahub服务(公测中,链接);
2、进入Datahub的管理控制台-项目管理(链接),创建project;

3、进入创建好的project,点击“创建topic”;
需要注意,此处的topic内容需要与日志文件、表的结构一致,此处可以选择“导入MaxCompute表结构”的方式,填写相应信息,快速完成创建;


step2:数据采集agent配置及启动

登录安装了flume环境的ECS服务器,配置、启动日志采集agent,并对接datahub的数据通道;

1、数据准备:通过手工方式,上传准备好的日志文件(实际应用场景中,应该是通过服务写入);

2、Flume作业配置:
1)在Flume安装目录的conf文件夹下,创建任务的conf文件;
vi  {任务名称}.conf
2)输入任务的配置信息
#示例如下(重点关注{}中的内容)
#a1是要启动的agent的名字
a1.sources = r1   #命名agent的sources为r1
a1.sinks = k1     #命名agent的sinks为k1
a1.channels = c1  #命名agent的channels为c1
# Describe/configure the source
a1.sources.r1.type = exec #指定r1的类型为exec
a1.sources.r1.command =cat {日志文件的位置}   #写入本地文件路径
# Describe the sink
a1.sinks.k1.type = com.aliyun.datahub.flume.sink.DatahubSink #指定k1的类型
a1.sinks.k1.datahub.accessID ={ accessID }
a1.sinks.k1.datahub.accessKey ={ accessKey }
a1.sinks.k1.datahub.endPoint = http://dh-cn-hangzhou.aliyuncs.com
a1.sinks.k1.datahub.project = {datahub_project_name}
a1.sinks.k1.datahub.topic ={datahub_ topic _name}
a1.sinks.k1.batchSize = 100 #一次写入文件条数
a1.sinks.k1.serializer = DELIMITED
a1.sinks.k1.serializer.delimiter = {字段间隔符}
a1.sinks.k1.serializer.fieldnames= {字段 “,” 隔开,注意需要与日志文件的顺序、datahub topic的顺序保持一致}
a1.sinks.k1.serializer.charset = {文字编码格式}
a1.sinks.k1.shard.number =  {分片数,需要与datahub 的topic配置一致}
a1.sinks.k1.shard.maxTimeOut = 60
# Use a channel which buffers events in memory
a1.channels.c1.type = memory  #指定channel的类型为memory
a1.channels.c1.capacity = 1000  #设置channel的最大存储数量为1000
a1.channels.c1.transactionCapacity = 1000 #每次最大可从source中拿到或送到sink中的event数量是1000
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

3、检查无误后,启动flume日志采集agent;
bin/flume-ng agent -n a1 -c conf -f conf/ {任务名称}
.conf -Dflume.root.logger=INFO,console
如果能正常启动,可以看到数据正在按照配置往datahub中同步;



step3:数据检查

在datahub的topic页面,可以看到数据同步的情况:

可以通过两种方式来检查数据:

1、topic的数据抽样,查看数据格式是否正常;


2、因为已经配置了datahub到maxcompute的数据链路,可以在maxcompute中检查数据入库情况;


OK,数据同步的工作,到此就基本完成了。


五、数据分析&报表制作

接下来需要基于日志,做业务分析,那么这里我们可以选择quickBI工具,来快速完成多维分析报表、仪表盘等数据产品的配置;

通过 链接 ,打开quickBI的产品页面,并开通对应服务。

Step1:分析模型设置(数据集)

1、进入数据工作台https://das.base.shuju.aliyun.com/console.htm,点击左侧QuickBI;


2、在引导页,点击“添加数据源”;


3、设置数据源的属性

按demo场景,选择maxcompute;


并设置对应的peoject信息:


4、数据源连接成功后,可以看到project下的表,选择需要分析的表,创建数据集;


5、按照分析场景需求,可以对数据集的逻辑模型做设置;

demo的分析场景,需要 基于事实表(充值数据,recharge_record_log)和维表(商品信息表,t_item_record)关联,来完成业务分析,因此可以点击编辑数据集:


完成:

1)构建关联模型




2)可以对时间维度做拆分,会自动生成多个level


Step2:多维分析报表配置

1、分析模型设置好之后,接下来就可以开始分析了,点击“表格分析”:


2、进入多维分析报表的IDE工作台:


3、可以看到,左侧的字段属性区,会自动加载物理表的对应字段(默认加载comment描述):


4、具体分析操作,比较简单,按需双击、拖拽需要分析的字段,点击查询即可看到报表,比如:

1)按商品(维度),看充值(计量)的整体情况


2)增加角色等级(维度),做交叉表


3)同时也支持各种查询条件的设置

按时间


多层嵌套的高级查询


Step3:仪表盘、数据产品配置


灵活性较强的数据探查类场景,可以通过多维报表支撑,对于展现形式要求较高的,可以通过仪表盘来灵活实现;

1、数据集List页面,点击“新建仪表盘”:


2、进入仪表盘的IDE工作台,页面分为左、中、右三栏:


3、同样,可以通过拖拽的方式,快速完成仪表盘页面的配置:

1)拖拽/双击 选择需要作图的字段:


2)点击更新,刷新图表,同时可以自由设置图表的样式


3)拖拽设置页面布局


比如,可以做一个专门的充值分析页面,效果示例:


数据产品是类似于分析专题、报表门户,具体配置就不再赘述:



六、架构总结

一、Demo涉及的产品 以及 数据流


如图所示:



二、如何实现生产场景下的动态数据采集及常见问题处理

和Demo不同的是,在生产场景下,我们的日志文件是动态的,因此需要实现如下逻辑:

1、 监控日志目录下的文件变化;

2、 根据配置的频率,采集日志;

1、flume1.7及以上版本

包含TaildirSource组件,可以实现监控目录,并且使用正则表达式匹配该目录中的文件名进行实时收集。

Flume作业配置:

1)在Flume安装目录的conf文件夹下,创建任务的conf文件;

vi  {任务名称}.conf

2)输入任务的配置信息(注意,此处差异较大)

#示例如下(重点关注{}中的内容)

#a1是要启动的agent的名字

 a1.sources = r1   #命名agent的sources为r1

a1.sinks = k1     #命名agent的sinks为k1

a1.channels = c1  #命名agent的channels为c1

# TaildirSource配置

a1.sources.r1.type = org.apache.flume.source.taildir.TaildirSource

a1.sources.r1.channels = memory_channel

a1.sources.r1.positionFile = /tmp/taildir_position.json

a1.sources.r1.filegroups = f1

a1.sources.r1.filegroups.f1 = {/usr/logfile/s51/mylog/*}

a1.sources.r1.batchSize = 100

a1.sources.r1.backoffSleepIncrement  = 1000

a1.sources.r1.maxBackoffSleep  = 5000

a1.sources.r1.recursiveDirectorySearch = true

# Describe/configure the source

a1.sources.r1.type = exec #指定r1的类型为exec

a1.sources.r1.command =cat {日志文件的位置}   #写入本地文件路径

# Describe the sink

a1.sinks.k1.type = com.aliyun.datahub.flume.sink.DatahubSink #指定k1的类型

a1.sinks.k1.datahub.accessID ={ accessID }

a1.sinks.k1.datahub.accessKey ={ accessKey }

a1.sinks.k1.datahub.endPoint = http://dh-cn-hangzhou.aliyuncs.com

a1.sinks.k1.datahub.project = {datahub_project_name}

a1.sinks.k1.datahub.topic ={datahub_ topic _name}

a1.sinks.k1.batchSize = 100 #一次写入文件条数

a1.sinks.k1.serializer = DELIMITED

a1.sinks.k1.serializer.delimiter = {字段间隔符}

a1.sinks.k1.serializer.fieldnames= {字段 “,” 隔开,注意需要与日志文件的顺序、datahub topic的顺序保持一致}

a1.sinks.k1.serializer.charset = {文字编码格式}

a1.sinks.k1.shard.number =  {分片数,需要与datahub 的topic配置一致}

a1.sinks.k1.shard.maxTimeOut = 60

# Use a channel which buffers events in memory

a1.channels.c1.type = memory  #指定channel的类型为memory

a1.channels.c1.capacity = 1000  #设置channel的最大存储数量为1000

a1.channels.c1.transactionCapacity = 1000 #每次最大可从source中拿到或送到sink中的event数量是1000

# Bind the source and sink to the channel

a1.sources.r1.channels = c1

a1.sinks.k1.channel = c1


3、检查无误后,启动flume日志采集agent;

bin/flume-ng agent -n a1 -c conf -f conf/ {任务名称}

.conf -Dflume.root.logger=INFO,console


2、flume 1.6 

原生不支持TaildirSource,需要自行下载集成:

下载地址:http://7xipth.com1.z0.glb.clouddn.com/flume-taildirfile-source.zip

将源码单独编译,打成jar包,上传到$FLUME_HOME/lib/目录下,之后配置方法可以参考上文;


3、常见问题:

1、日志文件解析错误

异常信息截图:


原因分析及解决方法

出现图示异常的原因,一般是因为解析日志文件得到的属性数量和配置文件不一致所致,此时需要重点排查:

1) 配置文件的间隔符、属性是否正确

a1.sinks.k1.serializer.delimiter = {字段间隔符}

a1.sinks.k1.serializer.fieldnames= {字段 “,” 隔开,注意需要与日志文件的顺序、datahub topic的顺序保持一致}

a1.sinks.k1.serializer.charset = {文字编码格式}

2) 日志文件格式是否符合预期、是否包含特殊字符


2、文件适配符模式下,找不到文件

异常信息截图:



原因分析及解决方法

出现图示异常的原因,一般是因为按照通配符设置,未找到文件导致异常退出,此时需要重点检查配置文件中的日志路径设置:

a1.sources.r1.filegroups.f1 = {/usr/logfile/s51/mylog/*}


3、 修改配置文件后,重新启动,无异常信息但是不加载数据

异常信息截图:


原因分析及解决方法

该问题比较隐秘,任务可以启动,没有明显的异常日志,但是到sink环节后不再加载数据,一般是因为修改了配置文件设置,但是没有删除对应的描述文件,需要:

1) 找到配置的描述文件路径

a1.sources.r1.positionFile = /tmp/taildir_position.json

2) 删除描述文件,重启任务


可正常加载数据;

三、扩展场景的产品架构&数据流



作者:阿里云云栖社区


原文地址:https://zhuanlan.zhihu.com/p/33777705

干货好文,请关注扫描以下二维码:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正式发布!鸿蒙,来了!

戳蓝字“CSDN云计算”关注我们哦!作者 | 胡巍巍 发自东莞篮球中心出品 | CSDN(ID:CSDNnews)鸿蒙真的来了!余承东宣布,鸿蒙的英文名叫HarmonyOS!对于华为来讲,8月9日是华为开发者大会…

手机屏坏了怎么把里面存东西取出来_手机又卡了,到底是运行不够还是存储容量不足?1分钟搞懂...

现在的主流旗舰机个个都是6128GB起步了,如果手机卡了,是运行内存不够?还是存储容量不足?事实上,很多人都没搞清楚,机身内存和运行内存,其实是两码事。运行内存和机身内存有什么区别?…

在 React 工程中利用 Mota 编写面向对象的业务模型

摘要: ## 简述 React 是一个「视图层」的 UI 框架,以常见的 MVC 来讲 React 仅是 View,而我们在编写应用时,通常还需要关注更加重要的 model,对于 React 来讲,我们常常需要一个「状态管理」库。然而&#x…

惊呆了!颜值爆表的20+位阿里技术女神同一时间向你发出共事邀请!

摘要: 女神节快到了,云栖社区为此推出“三七”女神节特别分享,20位颜值爆表的阿里女神们同一时间向你发出了共事邀请,快来赴约吧! 点此查看原文:http://click.aliyun.com/m/43263/ 女神节快要到了&#xff…

做了中台就不会死吗?每年至少40%开发资源是被浪费的!

戳蓝字“CSDN云计算”关注我们哦!文/黄哲铿编辑/Emma上周受邀去一家互联网公司做分享,有学员提到一个问题:“技术中台,如何应对那么多小前台的需求?先做哪个,后做哪个?” 这是个比较普遍问题&am…

bucket sort sample sort 并行_IBM布局AI硬件大杀器:硬软件并行开发、开源模拟AI工具包...

原标题:IBM布局AI硬件大杀器:硬软件并行开发、开源模拟AI工具包智东西(公众号:zhidxcom)编 | 子佩智东西11月4日消息,为了解决AI对数据、能源和内存资源的巨大需求,IBM一直致力于开发节能的AI硬件加速器,希…

如何实现32.5万笔/秒的交易峰值?阿里交易系统TMF2.0技术揭秘

摘要: 交易平台遇到的挑战 2017双11,交易峰值达到了32.5万笔/秒,这给整个交易系统带来了非常大的挑战。 一方面,系统需要支撑全集团几十个事业部的所有交易类需求:要考虑如何能更快响应需求、加快发布周期;…

js统计html页面访问的次数6,JS综合篇--[总结]Web前端常用代码片段整理

IE条件注释条件注释简介IE中的条件注释(Conditional comments)对IE的版本和IE非IE有优秀的区分能力,是WEB设计中常用的hack方法。条件注释只能用于IE5以上,IE10以上不支持。如果你安装了多个IE,条件注释将会以最高版本的IE为标准。条件注释的…

使用TensorFlow,GPU和Docker容器进行深度学习

摘要: 数据科学家使用GPU来提高TensorFlow的计算速度,但GPU价格昂贵,也需要对其所占用的资源进行认真的管理。本文将带你来一起解决这一问题。在过去的几个月中,我和多个企业的数据科学团队进行了多次合作,也看到越来越…

一键部署 Spring Boot 到远程 Docker 容器

首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署。 文章目录一、前提条件1. SpringBoot项目2. Docker插件3. Dockerfile文件4. 服务器Docker环境5. Maven环境二、技术选型三、新建SpringBoot项目1. pom2. DockerCon…

Docker,一个傲娇的男人

戳蓝字“CSDN云计算”关注我们哦!引言大概几个月前,我曾经写过一篇文章叫《微服务为什么一定要用docker》。当时,写完这篇以后,有些粉丝表示想看看基本入门教程,希望我写一篇。然后呢,大家也知道&#xff0…

英特尔核芯显卡控制面板没有了_只认性能你就输了!英特尔第十代酷睿处理器最全解析...

前不久,英特尔公布了第十代酷睿处理器“Ice Lake”的命名规则,AnandTech网站也曝光了“次旗舰”级别酷睿i7-1065G7处理器的实测性能(详见《10nm新架构Iris Plus核显 第十代酷睿到底有多强?》)。从结果来看,i7-1065G7的CPU性能提升…

阿里敏捷教练何勉:论精益思想及精益产品开发实践体系

摘要: 精益求精是工匠精神实现的最佳方法,通过引入实践精益思想的原则和方法进行精益产品开发,打造对客户最好的产品进行交付,其次通过精益思想的理念降低企业的运营成本,提高企业的运营效率。阿里资深解决方案架构师、…

html页面内分栏显示不全,怎么消除Word文档分栏后栏间不平衡现象

IE10浏览器打开网页鼠标不能滚动查看是怎么回事?IE10浏览器黑屏,但是滚动鼠标就好了,不到一分钟...在控制面板的电源设置中,将显示器的关闭时间调到你希望的时刻就可以了。word文档分栏后左右对不齐怎么办word文档分栏后左右对不齐…

开发经验分享_06_前端开发技巧

接上一篇:(企业内部)开发经验分享_05_葫芦画瓢 https://gblfy.blog.csdn.net/article/details/103414567 文章目录一、JS调试技巧1. 推荐使用consde.log2. 推荐理由3. Network正确的使用姿势①Headers一、JS调试技巧 1. 推荐使用consde.log 推荐使用consde.log(内…

Spring精华问答 | 为什么要学习Spring?

戳蓝字“CSDN云计算”关注我们哦!Spring是为解决企业应用程序开发复杂性而创建的一个Java开源框架,应用非常广泛。业内非常流行的SSH架构中的其中一个"S"指的就是Spring。今天我们就一起来看看关于Spring的精华问答!1Q:…

相关系数excel_如何用Excel计算投资组合的有效前沿?

假设一个投资组合由美债和美股构成,美债为跟踪美国投资级债券市场走势的交易所交易基金AGG,美股为跟踪美国标准普尔500指数走势的交易所交易基金SPY。注:在计算有效前沿曲线时投资回报率一般应采用预期回报率,但本文只是为了演示投…

拼的html页面乱,页面分页html拼接

success:function(data){if(data.status "success"){var page data.p;var html;for(var i 0; ihtml html ;htmlhtml;htmlhtmlpage.result[i].infoTitle;htmlhtmlpage.result[i].infoDepict ;htmlhtml;}// 添加分页选项:下一页html html "" "&q…

LoRaWAN开放式实验平台

摘要: 本文介绍了基于loraserver和uDC的LoRaWAN开发平台,基于该平台用户无需投入硬件即可在设备端和服务端进行,极大的降低了入门和开发门槛。 点此查看原文:http://click.aliyun.com/m/43348/ 本文旨在介绍AliOS Things的LoRaWA…

华为开发者大会上,鸿蒙问世、方舟编译器开源、还有 EMUI 10;壕置100万美元,苹果推出漏洞攻击报告赏金计划……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 鸿蒙OS正式对外发布&#xf…