基于阿里云MaxCompute实现游戏数据运营
摘要:?一、總覽 一個游戲/系統(tǒng)的業(yè)務(wù)數(shù)據(jù)分析,總體可以分為圖示的幾個關(guān)鍵步驟: ? 1、數(shù)據(jù)采集:通過SDK埋點或者服務(wù)端的方式獲取業(yè)務(wù)數(shù)據(jù),并通過分布式日志收集系統(tǒng),將各個服務(wù)器中的數(shù)據(jù)收集起來并送到指定的地方去,比如HDFS等;(注:本文Demo中,使用flume,也可選用logstash、Flue.
點此查看原文:http://click.aliyun.com/m/42633/
一、總覽
一個游戲/系統(tǒng)的業(yè)務(wù)數(shù)據(jù)分析,總體可以分為圖示的幾個關(guān)鍵步驟:
1、數(shù)據(jù)采集:通過SDK埋點或者服務(wù)端的方式獲取業(yè)務(wù)數(shù)據(jù),并通過分布式日志收集系統(tǒng),將各個服務(wù)器中的數(shù)據(jù)收集起來并送到指定的地方去,比如HDFS等;(注:本文Demo中,使用flume,也可選用logstash、Fluentd等)2、數(shù)據(jù)同步:構(gòu)建數(shù)據(jù)通道,接受數(shù)據(jù)采集agent的數(shù)據(jù)流,并且分發(fā)到不同的存儲/計算引擎中去;(注:本文Demo中,使用阿里云datahub作為通道,MaxCompute作為存儲/計算引擎)3、數(shù)據(jù)開發(fā):按照日志格式、業(yè)務(wù)領(lǐng)域,構(gòu)建數(shù)據(jù)模型;(注:本文Demo中,在MaxCompute中創(chuàng)建對應(yīng)的project、table)4、數(shù)據(jù)計算/分析:按照業(yè)務(wù)場景的分析要求,編寫SQL腳本 或者 使用工具,完成數(shù)據(jù)的分析及展現(xiàn);(注:本文Demo中,基于阿里云quickBI,完成多維分析、儀表盤的配置)接下來按照上述步驟,給大家具體介紹,如何利用相關(guān)的平臺/工具,實現(xiàn)一個簡單的數(shù)據(jù)分析場景。
二、環(huán)境準(zhǔn)備
首先,需要準(zhǔn)備一臺服務(wù)器,作為日志采集的agent,此處選用阿里云的ECS(具體ECS選購過程不再贅述),服務(wù)器配置信息:實例規(guī)格:4 核 16GB地域:華東 1(華東 1 可用區(qū) F)操作系統(tǒng):CentOS 7.4 64位網(wǎng)絡(luò)類型:專有網(wǎng)絡(luò)安全組:允許遠(yuǎn)程ssh本地遠(yuǎn)程登錄ECS服務(wù)器ssh ?{username}@{host}Step1:安裝JDK
Flume運行依賴java環(huán)境,因此需要在服務(wù)器安裝SDK,本文采用先下載到本地,再上傳服務(wù)器的方式安裝。1、下載并上傳SDK (demo選用jdk1.8.0_151,可至oracle官網(wǎng)下載)scp {本地文件路徑} ?{username}@{host}:{服務(wù)器目錄}2、上傳完成,解壓并設(shè)置相應(yīng)的環(huán)境變量:1、tar -zxvf ?{jdk壓縮包名}2、環(huán)境變量設(shè)置# 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 -version
Step2:安裝flume
同樣,對于flume,也可采用先下載到本地,再上傳服務(wù)器的方式安裝。1、下載并上傳flume安裝文件 (demo選用apache-flume-1.8.0,可至apache官網(wǎng)下載)scp {本地文件路徑} ?{username}@{host}:{服務(wù)器目錄}2、上傳完成,解壓并設(shè)置相應(yīng)的環(huán)境變量1、tar -zxvf ?{flume壓縮包名}2、環(huán)境變量設(shè)置# 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作為數(shù)據(jù)通道,所以還需要安裝flume-datahub的插件,該文件不大,此處可以選擇直接在服務(wù)器下載安裝。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,環(huán)境準(zhǔn)備工作,到此就基本完成了。
三、數(shù)據(jù)開發(fā)
Demo使用阿里云大數(shù)據(jù)服務(wù)MaxCompute作為存儲計算引擎。Step1:開通MaxCompute服務(wù)
阿里云實名認(rèn)證賬號訪問https://www.aliyun.com/product/odps?,開通MaxCompute,此處選擇按量付費進行購買。Step2:創(chuàng)建項目及業(yè)務(wù)模型
1、進入數(shù)加控制臺 https://data.aliyun.com/console ,點擊“dataworks->項目列表” ;2、點擊頁面“創(chuàng)建項目”按鈕,輸入project的基本信息,點擊確定,會有一個短暫的初始化過程;
3、點擊項目列表下對應(yīng)項目操作欄,進入dataworks的數(shù)據(jù)開發(fā)頁面;
4、創(chuàng)建腳本文件:點擊頂部菜單欄中的數(shù)據(jù)開發(fā),點擊“新建”處新建腳本,也可直接點擊“新建腳本”任務(wù)框;
5、按照需求,設(shè)計對應(yīng)的業(yè)務(wù)模型,并通過腳本完成模型創(chuàng)建;#此處按照場景示例,選擇創(chuàng)建1、 事實表:充值記錄,與日志文件recharge_record_log對應(yīng);2、 維表:商品信息;#建表語句示例(同時維表可做數(shù)據(jù)初始化)create table if not exists recharge_record_log(recharge_time string comment '充值時間',… ? ??item_id string ? comment '商品ID' ??)注:具體可以參考對應(yīng)的建表腳本(建表及維表初始化腳本.sql)可在數(shù)據(jù)開發(fā)的IDE環(huán)境編寫、調(diào)測腳本:
OK,數(shù)據(jù)建模的工作,到此就基本完成了。
四、數(shù)據(jù)同步
step1:數(shù)據(jù)通道設(shè)置
Demo使用阿里云datahub作為數(shù)據(jù)同步的通道。1、首先,申請開通datahub服務(wù)(公測中,鏈接);2、進入Datahub的管理控制臺-項目管理(鏈接),創(chuàng)建project;3、進入創(chuàng)建好的project,點擊“創(chuàng)建topic”;需要注意,此處的topic內(nèi)容需要與日志文件、表的結(jié)構(gòu)一致,此處可以選擇“導(dǎo)入MaxCompute表結(jié)構(gòu)”的方式,填寫相應(yīng)信息,快速完成創(chuàng)建;
step2:數(shù)據(jù)采集agent配置及啟動
登錄安裝了flume環(huán)境的ECS服務(wù)器,配置、啟動日志采集agent,并對接datahub的數(shù)據(jù)通道;1、數(shù)據(jù)準(zhǔn)備:通過手工方式,上傳準(zhǔn)備好的日志文件(實際應(yīng)用場景中,應(yīng)該是通過服務(wù)寫入);2、Flume作業(yè)配置:1)在Flume安裝目錄的conf文件夾下,創(chuàng)建任務(wù)的conf文件;vi ?{任務(wù)名稱}.conf2)輸入任務(wù)的配置信息#示例如下(重點關(guān)注{}中的內(nèi)容)#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 #一次寫入文件條數(shù)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 = ?{分片數(shù),需要與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 ?#設(shè)置channel的最大存儲數(shù)量為1000a1.channels.c1.transactionCapacity = 1000 #每次最大可從source中拿到或送到sink中的event數(shù)量是1000# Bind the source and sink to the channela1.sources.r1.channels = c1a1.sinks.k1.channel = c13、檢查無誤后,啟動flume日志采集agent;bin/flume-ng agent -n a1 -c conf -f conf/ {任務(wù)名稱}.conf -Dflume.root.logger=INFO,console如果能正常啟動,可以看到數(shù)據(jù)正在按照配置往datahub中同步;step3:數(shù)據(jù)檢查
在datahub的topic頁面,可以看到數(shù)據(jù)同步的情況:可以通過兩種方式來檢查數(shù)據(jù):
1、topic的數(shù)據(jù)抽樣,查看數(shù)據(jù)格式是否正常;
2、因為已經(jīng)配置了datahub到MaxCompute的數(shù)據(jù)鏈路,可以在MaxCompute中檢查數(shù)據(jù)入庫情況;
OK,數(shù)據(jù)同步的工作,到此就基本完成了。
五、數(shù)據(jù)分析&報表制作
接下來需要基于日志,做業(yè)務(wù)分析,那么這里我們可以選擇quickBI工具,來快速完成多維分析報表、儀表盤等數(shù)據(jù)產(chǎn)品的配置;
通過 鏈接 ,打開quickBI的產(chǎn)品頁面,并開通對應(yīng)服務(wù)。
Step1:分析模型設(shè)置(數(shù)據(jù)集)
1、進入數(shù)據(jù)工作臺https://das.base.shuju.aliyun.com/console.htm,點擊左側(cè)QuickBI;
2、在引導(dǎo)頁,點擊“添加數(shù)據(jù)源”;
3、設(shè)置數(shù)據(jù)源的屬性
按demo場景,選擇MaxCompute;
并設(shè)置對應(yīng)的peoject信息:
4、數(shù)據(jù)源連接成功后,可以看到project下的表,選擇需要分析的表,創(chuàng)建數(shù)據(jù)集;
5、按照分析場景需求,可以對數(shù)據(jù)集的邏輯模型做設(shè)置;
demo的分析場景,需要 基于事實表(充值數(shù)據(jù),recharge_record_log)和維表(商品信息表,t_item_record)關(guān)聯(lián),來完成業(yè)務(wù)分析,因此可以點擊編輯數(shù)據(jù)集:
完成:
1)構(gòu)建關(guān)聯(lián)模型
2)可以對時間維度做拆分,會自動生成多個level
Step2:多維分析報表配置
1、分析模型設(shè)置好之后,接下來就可以開始分析了,點擊“表格分析”:
2、進入多維分析報表的IDE工作臺:
3、可以看到,左側(cè)的字段屬性區(qū),會自動加載物理表的對應(yīng)字段(默認(rèn)加載comment描述):
4、具體分析操作,比較簡單,按需雙擊、拖拽需要分析的字段,點擊查詢即可看到報表,比如:
1)按商品(維度),看充值(計量)的整體情況
2)增加角色等級(維度),做交叉表
3)同時也支持各種查詢條件的設(shè)置
按時間
多層嵌套的高級查詢
Step3:儀表盤、數(shù)據(jù)產(chǎn)品配置
靈活性較強的數(shù)據(jù)探查類場景,可以通過多維報表支撐,對于展現(xiàn)形式要求較高的,可以通過儀表盤來靈活實現(xiàn);
1、數(shù)據(jù)集List頁面,點擊“新建儀表盤”:
2、進入儀表盤的IDE工作臺,頁面分為左、中、右三欄:
3、同樣,可以通過拖拽的方式,快速完成儀表盤頁面的配置:
1)拖拽/雙擊 選擇需要作圖的字段:
2)點擊更新,刷新圖表,同時可以自由設(shè)置圖表的樣式
3)拖拽設(shè)置頁面布局
比如,可以做一個專門的充值分析頁面,效果示例:
數(shù)據(jù)產(chǎn)品是類似于分析專題、報表門戶,具體配置就不再贅述:
六、架構(gòu)總結(jié)
一、Demo涉及的產(chǎn)品 以及 數(shù)據(jù)流
如圖所示:
二、如何實現(xiàn)生產(chǎn)場景下的動態(tài)數(shù)據(jù)采集及常見問題處理
和Demo不同的是,在生產(chǎn)場景下,我們的日志文件是動態(tài)的,因此需要實現(xiàn)如下邏輯:
1、 監(jiān)控日志目錄下的文件變化;
2、 根據(jù)配置的頻率,采集日志;
1、flume1.7及以上版本
包含TaildirSource組件,可以實現(xiàn)監(jiān)控目錄,并且使用正則表達(dá)式匹配該目錄中的文件名進行實時收集。
Flume作業(yè)配置:
1)在Flume安裝目錄的conf文件夾下,創(chuàng)建任務(wù)的conf文件;
vi ?{任務(wù)名稱}.conf
2)輸入任務(wù)的配置信息(注意,此處差異較大)
#示例如下(重點關(guān)注{}中的內(nèi)容)
#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 #一次寫入文件條數(shù)
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 = ?{分片數(shù),需要與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 ?#設(shè)置channel的最大存儲數(shù)量為1000
a1.channels.c1.transactionCapacity = 1000 #每次最大可從source中拿到或送到sink中的event數(shù)量是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/ {任務(wù)名稱}
.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、日志文件解析錯誤
異常信息截圖:
原因分析及解決方法
出現(xiàn)圖示異常的原因,一般是因為解析日志文件得到的屬性數(shù)量和配置文件不一致所致,此時需要重點排查:
1) 配置文件的間隔符、屬性是否正確
a1.sinks.k1.serializer.delimiter = {字段間隔符}
a1.sinks.k1.serializer.fieldnames= {字段 “,” 隔開,注意需要與日志文件的順序、datahub topic的順序保持一致}
a1.sinks.k1.serializer.charset = {文字編碼格式}
2) 日志文件格式是否符合預(yù)期、是否包含特殊字符
2、文件適配符模式下,找不到文件
異常信息截圖:
原因分析及解決方法
出現(xiàn)圖示異常的原因,一般是因為按照通配符設(shè)置,未找到文件導(dǎo)致異常退出,此時需要重點檢查配置文件中的日志路徑設(shè)置:
a1.sources.r1.filegroups.f1 = {/usr/logfile/s51/mylog/*}
3、 修改配置文件后,重新啟動,無異常信息但是不加載數(shù)據(jù)
異常信息截圖:
原因分析及解決方法
該問題比較隱秘,任務(wù)可以啟動,沒有明顯的異常日志,但是到sink環(huán)節(jié)后不再加載數(shù)據(jù),一般是因為修改了配置文件設(shè)置,但是沒有刪除對應(yīng)的描述文件,需要:
1) 找到配置的描述文件路徑
a1.sources.r1.positionFile = /tmp/taildir_position.json
2) 刪除描述文件,重啟任務(wù)
可正常加載數(shù)據(jù);
三、擴展場景的產(chǎn)品架構(gòu)&數(shù)據(jù)流
掃碼獲取更多資訊:
總結(jié)
以上是生活随笔為你收集整理的基于阿里云MaxCompute实现游戏数据运营的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 19个AI热门应用领域,你确定不了解一下
- 下一篇: iOS Mach异常和signal信号