天天看點

基于阿裡雲MaxCompute實作遊戲資料營運

基于阿裡雲MaxCompute實作遊戲資料營運

一個遊戲/系統的業務資料分析,總體可以分為圖示的幾個關鍵步驟:

基于阿裡雲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}

基于阿裡雲MaxCompute實作遊戲資料營運

Flume運作依賴java環境,是以需要在伺服器安裝SDK,本文采用先下載下傳到本地,再上傳伺服器的方式安裝。

1、下載下傳并上傳SDK (demo選用jdk1.8.0_151,可至oracle官網下載下傳)

scp {本地檔案路徑}  {username}@{host}:{伺服器目錄}

基于阿裡雲MaxCompute實作遊戲資料營運

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

基于阿裡雲MaxCompute實作遊戲資料營運

同樣,對于flume,也可采用先下載下傳到本地,再上傳伺服器的方式安裝。

1、下載下傳并上傳flume安裝檔案 (demo選用apache-flume-1.8.0,可至apache官網下載下傳)

2、上傳完成,解壓并設定相應的環境變量

1、tar -zxvf  {flume壓縮包名}

export FLUME_HOME=/usr/local/flume

修改:

path= $path :$FLUME_HOME/bin

3、檢查flume是否安裝完成:

#此處注意,需要寫flume安裝的全路徑

{flume安裝路徑}/bin/flume-ng version

基于阿裡雲MaxCompute實作遊戲資料營運

因為Demo選用datahub作為資料通道,是以還需要安裝flume-datahub的插件,該檔案不大,此處可以選擇直接在伺服器下載下傳安裝。

1、下載下傳flume-datahub插件包

基于阿裡雲MaxCompute實作遊戲資料營運

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作為存儲計算引擎。

基于阿裡雲MaxCompute實作遊戲資料營運

1、進入數加控制台 https://data.aliyun.com/console ,點選“dataworks->項目清單” ;

基于阿裡雲MaxCompute實作遊戲資料營運

2、點選頁面“建立項目”按鈕,輸入project的基本資訊,點選确定,會有一個短暫的初始化過程;

基于阿裡雲MaxCompute實作遊戲資料營運

3、點選項目清單下對應項目操作欄,進入dataworks的資料開發頁面;

基于阿裡雲MaxCompute實作遊戲資料營運

4、建立腳本檔案:點選頂部菜單欄中的資料開發,點選“建立”處建立腳本,也可直接點選“建立腳本”任務框;

基于阿裡雲MaxCompute實作遊戲資料營運

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環境編寫、調測腳本:

基于阿裡雲MaxCompute實作遊戲資料營運

OK,資料模組化的工作,到此就基本完成了。

Demo使用阿裡雲datahub作為資料同步的通道。

1、首先,申請開通datahub服務(公測中,連結);

2、進入Datahub的管理控制台-項目管理(連結),建立project;

基于阿裡雲MaxCompute實作遊戲資料營運

3、進入建立好的project,點選“建立topic”;

需要注意,此處的topic内容需要與日志檔案、表的結構一緻,此處可以選擇“導入MaxCompute表結構”的方式,填寫相應資訊,快速完成建立;

基于阿裡雲MaxCompute實作遊戲資料營運

登入安裝了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中同步;

基于阿裡雲MaxCompute實作遊戲資料營運

在datahub的topic頁面,可以看到資料同步的情況:

基于阿裡雲MaxCompute實作遊戲資料營運

可以通過兩種方式來檢查資料:

1、topic的資料抽樣,檢視資料格式是否正常;

基于阿裡雲MaxCompute實作遊戲資料營運

2、因為已經配置了datahub到MaxCompute的資料鍊路,可以在MaxCompute中檢查資料入庫情況;

基于阿裡雲MaxCompute實作遊戲資料營運

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

接下來需要基于日志,做業務分析,那麼這裡我們可以選擇quickBI工具,來快速完成多元分析報表、儀表盤等資料産品的配置;

通過 連結 ,打開quickBI的産品頁面,并開通對應服務。

1、進入資料工作台https://das.base.shuju.aliyun.com/console.htm,點選左側QuickBI;

基于阿裡雲MaxCompute實作遊戲資料營運

2、在引導頁,點選“添加資料源”;

基于阿裡雲MaxCompute實作遊戲資料營運

3、設定資料源的屬性

按demo場景,選擇MaxCompute;

基于阿裡雲MaxCompute實作遊戲資料營運

并設定對應的peoject資訊:

基于阿裡雲MaxCompute實作遊戲資料營運

4、資料源連接配接成功後,可以看到project下的表,選擇需要分析的表,建立資料集;

基于阿裡雲MaxCompute實作遊戲資料營運

5、按照分析場景需求,可以對資料集的邏輯模型做設定;

demo的分析場景,需要 基于事實表(充值資料,recharge_record_log)和維表(商品資訊表,t_item_record)關聯,來完成業務分析,是以可以點選編輯資料集:

基于阿裡雲MaxCompute實作遊戲資料營運

完成:

1)建構關聯模型

基于阿裡雲MaxCompute實作遊戲資料營運
基于阿裡雲MaxCompute實作遊戲資料營運
基于阿裡雲MaxCompute實作遊戲資料營運

2)可以對時間次元做拆分,會自動生成多個level

基于阿裡雲MaxCompute實作遊戲資料營運

Step2:多元分析報表配置

1、分析模型設定好之後,接下來就可以開始分析了,點選“表格分析”:

基于阿裡雲MaxCompute實作遊戲資料營運

2、進入多元分析報表的IDE工作台:

基于阿裡雲MaxCompute實作遊戲資料營運

3、可以看到,左側的字段屬性區,會自動加載實體表的對應字段(預設加載comment描述):

基于阿裡雲MaxCompute實作遊戲資料營運

4、具體分析操作,比較簡單,按需輕按兩下、拖拽需要分析的字段,點選查詢即可看到報表,比如:

1)按商品(次元),看充值(計量)的整體情況

基于阿裡雲MaxCompute實作遊戲資料營運

2)增加角色等級(次元),做交叉表

基于阿裡雲MaxCompute實作遊戲資料營運

3)同時也支援各種查詢條件的設定

按時間

基于阿裡雲MaxCompute實作遊戲資料營運

多層嵌套的進階查詢

基于阿裡雲MaxCompute實作遊戲資料營運

靈活性較強的資料探查類場景,可以通過多元報表支撐,對于展現形式要求較高的,可以通過儀表盤來靈活實作;

1、資料集List頁面,點選“建立儀表盤”:

基于阿裡雲MaxCompute實作遊戲資料營運

2、進入儀表盤的IDE工作台,頁面分為左、中、右三欄:

基于阿裡雲MaxCompute實作遊戲資料營運

3、同樣,可以通過拖拽的方式,快速完成儀表盤頁面的配置:

1)拖拽/輕按兩下 選擇需要作圖的字段:

基于阿裡雲MaxCompute實作遊戲資料營運

2)點選更新,重新整理圖表,同時可以自由設定圖表的樣式

基于阿裡雲MaxCompute實作遊戲資料營運

3)拖拽設定頁面布局

基于阿裡雲MaxCompute實作遊戲資料營運

比如,可以做一個專門的充值分析頁面,效果示例:

基于阿裡雲MaxCompute實作遊戲資料營運

資料産品是類似于分析專題、報表門戶,具體配置就不再贅述:

基于阿裡雲MaxCompute實作遊戲資料營運

如圖所示:

基于阿裡雲MaxCompute實作遊戲資料營運

和Demo不同的是,在生産場景下,我們的日志檔案是動态的,是以需要實作如下邏輯:

1、 監控日志目錄下的檔案變化;

2、 根據配置的頻率,采集日志;

1、flume1.7及以上版本

包含TaildirSource元件,可以實作監控目錄,并且使用正規表達式比對該目錄中的檔案名進行實時收集。

Flume作業配置:

2)輸入任務的配置資訊(注意,此處差異較大)

# 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

2、flume 1.6 

原生不支援TaildirSource,需要自行下載下傳內建:

下載下傳位址:http://7xipth.com1.z0.glb.clouddn.com/flume-taildirfile-source.zip

将源碼單獨編譯,打成jar包,上傳到$FLUME_HOME/lib/目錄下,之後配置方法可以參考上文;

3、常見問題:

1、日志檔案解析錯誤

異常資訊截圖:

基于阿裡雲MaxCompute實作遊戲資料營運

原因分析及解決方法

出現圖示異常的原因,一般是因為解析日志檔案得到的屬性數量和配置檔案不一緻所緻,此時需要重點排查:

1) 配置檔案的間隔符、屬性是否正确

2) 日志檔案格式是否符合預期、是否包含特殊字元

2、檔案适配符模式下,找不到檔案

基于阿裡雲MaxCompute實作遊戲資料營運
基于阿裡雲MaxCompute實作遊戲資料營運

出現圖示異常的原因,一般是因為按照通配符設定,未找到檔案導緻異常退出,此時需要重點檢查配置檔案中的日志路徑設定:

3、 修改配置檔案後,重新啟動,無異常資訊但是不加載資料

基于阿裡雲MaxCompute實作遊戲資料營運

該問題比較隐秘,任務可以啟動,沒有明顯的異常日志,但是到sink環節後不再加載資料,一般是因為修改了配置檔案設定,但是沒有删除對應的描述檔案,需要:

1) 找到配置的描述檔案路徑

2) 删除描述檔案,重新開機任務

基于阿裡雲MaxCompute實作遊戲資料營運

可正常加載資料;

基于阿裡雲MaxCompute實作遊戲資料營運

歡迎加入“數加·MaxCompute購買咨詢”釘釘群(群号: 11782920)進行咨詢,群二維碼如下:

基于阿裡雲MaxCompute實作遊戲資料營運