个人微信营销,搜索引擎优化工作原理的先后顺序,北京考试学院网站首页,淘宝seo优化摘要#xff1a; 原作者#xff1a;阿里云解决方案架构师#xff0c;陆宝。通过阅读本文#xff0c;您可以学会怎样使用阿里云的maxcompute搭建一套数据分析系统。一、总览一个游戏/系统的业务数据分析#xff0c;总体可以分为图示的几个关键步骤#xff1a;1、数据采集 原作者阿里云解决方案架构师陆宝。通过阅读本文您可以学会怎样使用阿里云的maxcompute搭建一套数据分析系统。
一、总览一个游戏/系统的业务数据分析总体可以分为图示的几个关键步骤1、数据采集通过SDK埋点或者服务端的方式获取业务数据并通过分布式日志收集系统将各个服务器中的数据收集起来并送到指定的地方去比如HDFS等注本文Demo中使用flume也可选用logstash、Fluentd等2、数据同步构建数据通道接受数据采集agent的数据流并且分发到不同的存储/计算引擎中去注本文Demo中使用阿里云datahub作为通道maxcompute作为存储/计算引擎3、数据开发按照日志格式、业务领域构建数据模型注本文Demo中在maxcompute中创建对应的project、table4、数据计算/分析按照业务场景的分析要求编写SQL脚本 或者 使用工具完成数据的分析及展现注本文Demo中基于阿里云quickBI完成多维分析、仪表盘的配置接下来按照上述步骤给大家具体介绍如何利用相关的平台/工具实现一个简单的数据分析场景。二、环境准备首先需要准备一台服务器作为日志采集的agent此处选用阿里云的ECS具体ECS选购过程不再赘述服务器配置信息实例规格4 核 16GB地域华东 1华东 1 可用区 F操作系统CentOS 7.4 64位网络类型专有网络安全组允许远程ssh本地远程登录ECS服务器ssh {username}{host}Step1安装JDKFlume运行依赖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.jarexport PATH$JAVA_HOME/bin:$PATHexport JAVA_HOME JRE_HOME CLASS_PATH PATH#source /etc/profile3、检查SDK是否安装完成java -versionStep2安装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/profile3、检查flume是否安装完成#此处注意需要写flume安装的全路径{flume安装路径}/bin/flume-ng versionStep3安装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.gz2、解压并部署插件1、tar zxvf flume-datahub-sink-1.1.0.tar.gz2、将解压后的插件文件夹移动到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的管理控制台-项目管理链接创建project3、进入创建好的project点击“创建topic”需要注意此处的topic内容需要与日志文件、表的结构一致此处可以选择“导入MaxCompute表结构”的方式填写相应信息快速完成创建step2数据采集agent配置及启动登录安装了flume环境的ECS服务器配置、启动日志采集agent并对接datahub的数据通道1、数据准备通过手工方式上传准备好的日志文件实际应用场景中应该是通过服务写入2、Flume作业配置1在Flume安装目录的conf文件夹下创建任务的conf文件vi {任务名称}.conf2输入任务的配置信息#示例如下重点关注{}中的内容#a1是要启动的agent的名字a1.sources r1 #命名agent的sources为r1a1.sinks k1 #命名agent的sinks为k1a1.channels c1 #命名agent的channels为c1# Describe/configure the sourcea1.sources.r1.type exec #指定r1的类型为execa1.sources.r1.command cat {日志文件的位置} #写入本地文件路径# Describe the sinka1.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.coma1.sinks.k1.datahub.project {datahub_project_name}a1.sinks.k1.datahub.topic {datahub_ topic _name}a1.sinks.k1.batchSize 100 #一次写入文件条数a1.sinks.k1.serializer DELIMITEDa1.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 memorya1.channels.c1.type memory #指定channel的类型为memorya1.channels.c1.capacity 1000 #设置channel的最大存储数量为1000a1.channels.c1.transactionCapacity 1000 #每次最大可从source中拿到或送到sink中的event数量是1000# Bind the source and sink to the channela1.sources.r1.channels c1a1.sinks.k1.channel c13、检查无误后启动flume日志采集agentbin/flume-ng agent -n a1 -c conf -f conf/ {任务名称}.conf -Dflume.root.loggerINFO,console如果能正常启动可以看到数据正在按照配置往datahub中同步step3数据检查在datahub的topic页面可以看到数据同步的情况可以通过两种方式来检查数据1、topic的数据抽样查看数据格式是否正常2、因为已经配置了datahub到maxcompute的数据链路可以在maxcompute中检查数据入库情况OK数据同步的工作到此就基本完成了。五、数据分析报表制作接下来需要基于日志做业务分析那么这里我们可以选择quickBI工具来快速完成多维分析报表、仪表盘等数据产品的配置通过 链接 打开quickBI的产品页面并开通对应服务。Step1分析模型设置数据集1、进入数据工作台https://das.base.shuju.aliyun.com/console.htm点击左侧QuickBI2、在引导页点击“添加数据源”3、设置数据源的属性按demo场景选择maxcompute并设置对应的peoject信息4、数据源连接成功后可以看到project下的表选择需要分析的表创建数据集5、按照分析场景需求可以对数据集的逻辑模型做设置demo的分析场景需要 基于事实表充值数据recharge_record_log和维表商品信息表t_item_record关联来完成业务分析因此可以点击编辑数据集完成1构建关联模型2可以对时间维度做拆分会自动生成多个levelStep2多维分析报表配置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 {任务名称}.conf2输入任务的配置信息注意此处差异较大#示例如下重点关注{}中的内容#a1是要启动的agent的名字 a1.sources r1 #命名agent的sources为r1a1.sinks k1 #命名agent的sinks为k1a1.channels c1 #命名agent的channels为c1# TaildirSource配置a1.sources.r1.type org.apache.flume.source.taildir.TaildirSourcea1.sources.r1.channels memory_channela1.sources.r1.positionFile /tmp/taildir_position.jsona1.sources.r1.filegroups f1a1.sources.r1.filegroups.f1 {/usr/logfile/s51/mylog/*}a1.sources.r1.batchSize 100a1.sources.r1.backoffSleepIncrement 1000a1.sources.r1.maxBackoffSleep 5000a1.sources.r1.recursiveDirectorySearch true# Describe/configure the sourcea1.sources.r1.type exec #指定r1的类型为execa1.sources.r1.command cat {日志文件的位置} #写入本地文件路径# Describe the sinka1.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.coma1.sinks.k1.datahub.project {datahub_project_name}a1.sinks.k1.datahub.topic {datahub_ topic _name}a1.sinks.k1.batchSize 100 #一次写入文件条数a1.sinks.k1.serializer DELIMITEDa1.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 memorya1.channels.c1.type memory #指定channel的类型为memorya1.channels.c1.capacity 1000 #设置channel的最大存储数量为1000a1.channels.c1.transactionCapacity 1000 #每次最大可从source中拿到或送到sink中的event数量是1000# Bind the source and sink to the channela1.sources.r1.channels c1a1.sinks.k1.channel c13、检查无误后启动flume日志采集agentbin/flume-ng agent -n a1 -c conf -f conf/ {任务名称}.conf -Dflume.root.loggerINFO,console2、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.json2 删除描述文件重启任务可正常加载数据三、扩展场景的产品架构数据流作者阿里云云栖社区原文地址https://zhuanlan.zhihu.com/p/33777705干货好文请关注扫描以下二维码