tft每日頭條

 > 遊戲

 > 遊戲行業分析表

遊戲行業分析表

遊戲 更新时间:2024-12-15 19:30:13

此文獻給正在大學迷茫或者即将進入大學計算機專業,将來想要從事大數據行業的學弟學妹們。學長給你們的建議在大學期間踏踏實實學習知識,不要好高骛遠;多參加體育鍛煉。做好這兩點便可。切記不要往多領域發展,最終你會發現:仿佛這你也會那你也會,其實啥也不精還容易鬧笑話。

1 遊戲行業數據分析流程以及分析指标1.1 數據來源
  • WEB服務器日志如:Tomcat,Nginx。
  • 遊戲打點記錄。
1.2 數據收集和落地
  • Nginx日志 hdfs或S3。
  • Kafka flume HDFS或S3 進行輸入與輸出。
1.3 離線分析

過濾清洗數據Nginx請求日志,ETL工作:

  • 統計每日請求量。
  • 統計哪一時段為用戶活躍期。
  • 統計響應請求數量和未能響應的數量。

遊戲打點記錄業務邏輯:

  • 統計每日新增,新增留存。
  • 統計每日活躍人數維度如:平台(安卓/IOS),國家,終端(華為/iPhone)。
  • 休閑類遊戲如有關卡,統計關卡通關率。
  • 統計廣告點擊率。
  • 遊戲中價值替代物如鑽石或者金币,統計其産出和消耗。
  • 統計出遊戲中作弊用戶。
  • 統計分析各種活動的利益價值。
  • 統計内購數量。
  • 統計遊戲玩家啟動次數,玩遊戲的時長。
1.4 實時數據分析
  • 實時統計每小時内新增用戶,活躍用戶。
  • 實時統計每小時内購數量。
1.5 用戶肖像

批處理 實時處理統計每個用戶肖像:

  • 基礎信息如:性别,國家,年齡,婚否,是否有車房。
  • 購買能力:根據消費金額和頻率進行評估過。
  • 是否作弊:是否是破解包。
  • 廣告用戶:看廣告頻率多,不進行内購。
  • 玩家分類:頻繁,經常,常常,一般,偶爾。
  • 玩家等級:高,較高,中上,中,較低,低。
2 大數據相關知識點2.1 離線數據統計技能相關要求2.1.1 Hadoop
  • 要求熟練掌握Hadoop讀寫流程;
  • 要求熟練掌握MapReduce作業流程;
  • 要求熟練掌握Job提交流程以及源碼;
  • 要求熟練掌握Map Task和Reduce Task流程;
  • 要求熟練掌握YARN運行原理;
  • 要求掌握小文件優化,小表JOIN大表優化方案;
  • 要求掌握Job串行流程以及TOPN實現方案;
  • 要求熟練掌握ETL;
2.1.2 Hive
  • 要求熟練掌握内部表、外部表、分區表的創建;
  • 要求熟練掌握分區和分桶的區别;
  • 要求熟練掌握數據的導入導出;
  • 要求熟練掌握行轉列和列轉行的使用場景;
  • 要求熟練掌握窗口函數;
  • 要求熟練掌握Rank函數進行排名;
  • 要求熟練掌握自定義UDF和UDTF;
  • 要求熟練掌握文件存儲格式以及區别;
  • 要求熟練掌握調優案例:小表和大表JOIN、大表JOIN大表、MapJoin、合理設置Map數量、小文件合并、合理Reduce數、JVM重用等;
2.1.3 HBase
  • 要求熟練掌握HBase讀寫流程;
  • 要求熟練掌握HBase的Memstore Flush;
  • 要求熟練掌握HBase的文件合并StoreFile Compaction;
  • 要求熟練掌握HBase的Region拆分流程;
  • 要求熟練掌握HBase的API;
  • 要求熟練掌握HBase的優化如:預分區;RowKey設計、内存優化、優化 HStore 文件大小、優化 HBase 客戶端緩存、flush,compact,split 機制等;
2.1.4 Spark Core
  • 要求熟練掌握Spark通信架構;
  • 理解Spark DAG有向無循環圖的設計思想;
  • 要求掌握Spark各個節點啟動流程;
  • 要求掌握Spark的Job提交和Task的拆分;
  • 要求掌握Spark Shuffle過程;
  • 要求掌握Spark三種部署模式的區别;
  • 要求掌握 Transform和Action算子;
  • 要求掌握groupByKey和reduceByKey的區别;
  • 要求熟練編寫wordCount程序;
2.1.5 Spark SQL
  • 要求掌握RDD、DataFrames、DataSet三者的關系;
  • 要求掌握自定義UDF函數和自定義聚合函數;
  • 要求掌握數據的輸入與輸出;
  • 要求掌握優化方案;
2.2 實時數據統計技能相關要求2.2.1 KafKa
  • 要求掌握Topic的創建查詢删除命令;
  • 要求掌握Kafka的存儲機制及高效讀寫的原理;
  • 要求掌握Kafka生産者:分區原因及原則、ISR機制、故障處理細節、Exactly Once精準一次性;
  • 要求掌握Kafka消費者:push和pull區别和場景、分區分配策略RoundRobin和Range、offest的維護、重新消費等。
  • 要求了解Producer事務和Consumer事務;
  • 要求掌握Kafka自定義攔截器;
  • 熟練掌握Kafka數據積壓處理方法;
  • 要求了解kafka如何保證順序發送;
  • 要求了解會使用Kafka監控插件Kafka Eagle;
2.2.2 Flume
  • 要求掌握Flume組成架構Source、Channel、Sink;
  • 要求掌握Flume Agent内部原理;
  • 要求熟練編寫攔截器;
  • 要求掌握Flume整合Kafka和Hdfs;
  • 要求了解數據流監控如:Ganglia;
2.2.3 Flink
  • 要求理解Flink特性:時間驅動型、流與批的世界觀、分層Api;
  • 要求掌握Standalone模式和YARN模式;
  • 要求掌握作業管理器(JobManager)、資源管理器(ResourceManager)、任務管理器(TaskManager)、分發器(Dispatcher)它們之間的關系;
  • 要求掌握任務提交流程和任務調度原理;
  • 要求理解TaskManger和Slots之間的關系;
  • 要求掌握Source的類型, 流的合并和側輸出流;
  • 要求掌握Transform算子,常見聚合算子;
  • 要求掌握滾動窗口、滑動窗口、會話窗口;
  • 要求掌握時間語義和Wartermak; Flink底層8個ProcessFunction:ProcessFunction, KeyedProcessFunction ,CoProcessFunction, ProcessJoinFunction ,BroadcastProcessFunction ,KeyedBroadcastProcessFunction ,ProcessWindowFunction, ProcessAllWindowFunction
  • 要求掌握Sink的輸出類型;
  • 要求掌握狀态編程;
  • 要求掌握檢查點checkPoint的原理;
  • 要求掌握Flink Kafka實現端到端的exactly-once;
2.2.4 Spark Streaming
  • 要求掌握Spark Streaming消費Kafka的偏移量是如何維護的;
  • 要求掌握Spark Streaming讀取Kafka數據的兩種方式;
  • 要求掌握Spark Streaming讀取Kafka數據時如何保證數據不丢失問題,至多,至少,精準一次語義;
  • 要求理解updateStateByKey底層是如何實現保存數據原來的狀态;
  • 要求掌握Spark Streaming的窗口函數;
  • 要求熟練編寫WordCount程序;
2.3 其他技能要求2.3.1 Redis
  • 要求掌握String、Hash 、List、Set、 Sorte Set操作;
  • 要求掌握并理解Redis哨兵模式;
  • 要求掌握RDB和AOF的區别;
  • 要求理解并運用Redis實現遊戲周榜、月榜;
  • 要求理解并運用Redis鎖實現高并發;
2.3.2 Mysql
  • 要求理解Mysql存儲引擎InnoDB、MyISAM的區别;
  • 要求熟練掌握索引創建和索引失效的情況;
  • 要求了解Mysql讀寫分離;
  • 要求掌握Mysql存儲機制;
  • 要求理解并運用實現高并發鎖;
2.3.3 MongoDB
  • 要求理解MongoDB存儲結構;
  • 要求熟練掌握集合的創建、删除、導入導出操作;
  • 要求熟練掌握數據的備份與恢複;
  • 要求熟練掌握索引的創建;
2.3.4 ElasticSearch
  • 要求掌握文檔的創建删除查詢聚合操作;
  • 會使用elasticsearch-head;
  • 要求掌握和Kibana聯合使用,繪制條形、折線,餅狀統計圖;
2.3.5 常見排序方法
  • 要求熟練掌握冒泡排序;
  • 要求熟練掌握快排;
  • 要求熟練掌握選擇排序;
  • 要求熟練掌握插入排序;
  • 要求熟練掌握歸并排序;
2.3.6 常見設計模式
  • 要求熟練掌握單例模式;
  • 要求熟練掌握觀察者模式;
  • 要求熟練掌握工廠模式;
  • 要求熟練掌握代理模式
3 常見典型案例3.1 Hadoop編程

假設下面是一部分nginx請求日志經過數據清洗後的數據。固定格式為:(用戶ID IP 日期 請求URI 請求地址 請求狀态 請求Agent)

e4ec9bb6f2703eb7 180.21.76.203 2020-06-30T09:11:14 00:00 /u3d/v2/appconfig 127.0.0.1:8080 200 "BestHTTP" 1f85152896978527 171.43.190.8 2020-06-30T09:11:14 00:00 /u3d/v2/userAction 127.0.0.1:8080 200 "BestHTTP"

要求:

  1. 統計每天的日活躍人數;
  2. 統計每小時的活躍人數;
  3. 統計每小時請求URL排名前十名;
  4. 統計出國家|省每日活躍數;
  5. 根據User Agent統計每日終端信息;
3.2 Flink編程

假設下面是一部分用戶登錄狀态的日志。固定格式為:(用戶ID IP 請求狀态 時間)

e4ec9bb6f2703eb7 180.21.76.203 success 1558430815 1f85152896978527 171.43.190.8 fail 1558430826

要求:

  1. 使用狀态編程輸出5秒内連續登錄失敗超過3次的用戶;
  2. 使用CEP輸出5秒内連續登錄失敗超過3次的用戶;
3.3 Spark SQL編程

假設有兩張表new_users每天大約6M和play_stages表每天大約10G數據。兩張表都包含以下字段:UserID 用戶ID ,appName遊戲名稱, appVersion 遊戲版本, appPlatform 安卓或IOS

要求: 統計新增用戶留存1-7,15,30,90這10天的留存率;

3.4 Redis編程

假設一個遊戲有2000W用戶,每天DAU大約150W左右,現在要求根據關卡值做一個遊戲排行榜 你會如何設計?

4 大數據企業級架構設計4.1 架構設計

遊戲行業分析表(最全大數據知識點分析和企業級遊戲行業架構設計分享)1

架構設計圖.png

4.2 數據收集

客戶端發送日志到接口,将數據發送到kafka消息中間件, flume将kafka作為source寫入到亞馬遜s3。

4.2.1 創建Kafka的Topic

kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic topic-s3-diamond kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic topic-s3-ads kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic topic-s3-launch kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic topic-s3-stage kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic topic-s3-gift kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic topic-s3-shop kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic topic-s3-prop kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic topic-s3-ball kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic topic-s3-airdrop

4.2.2 配置Flume腳本(自定義攔截器将Kafka數據存儲到S3)

a1.sources=r1 a1.channels=c1 a1.sinks=k1 a1.sources.r1.interceptors = i1 a1.sources.r1.interceptors.i1.type = com.pusidun.applogs.flume.interceptor.S3CollInterceptor$Builder a1.sources.r1.type = org.apache.flume.source.kafka.KafkaSource a1.sources.r1.batchSize = 5000 a1.sources.r1.batchDurationMillis = 2000 a1.sources.r1.kafka.bootstrap.servers = localhost:9092 a1.sources.r1.kafka.zookeeperConnect = localhost:2181 a1.sources.r1.kafka.topics.regex = ^topic-s3-.*$ a1.channels.c1.type=memory a1.channels.c1.capacity=100000 a1.channels.c1.transactionCapacity=10000 a1.sinks.k1.type = hdfs a1.sinks.k1.hdfs.path = s3a://bricks-playable/logs/%{logType}/%Y%m/%d a1.sinks.k1.hdfs.filePrefix = events- a1.sinks.k1.hdfs.rollInterval = 600 a1.sinks.k1.hdfs.rollSize = 0 a1.sinks.k1.hdfs.rollCount = 0 a1.sinks.k1.hdfs.fileType = DataStream a1.sources.r1.channels = c1 a1.sinks.k1.channel= c1

4.2.3 啟動Flume

nohup bin/flume-ng agent \ -c conf \ -n a1 \ -f conf/s3.conf & \ -Dflume.root.logger=DEBUG,console &

4.2.4 S3存儲數據分類效果概覽

遊戲行業分析表(最全大數據知識點分析和企業級遊戲行業架構設計分享)2

s3.png

4.2.5 150w日活每天産生數據大小

遊戲行業分析表(最全大數據知識點分析和企業級遊戲行業架構設計分享)3

data.png

4.3 離線數據分析

Hive On Spark進行離線數據分析。

4.3.1 Hive表的創建

# 創建Hive外部表 # s3_stage | s3_launch | s3_ads | s3_diamond | s3_diamondShop | s3_gift | s3_airdrop | s3_prop | s3_ball|s3_shopWindow CREATE EXTERNAL TABLE 表名( uid STRING, appVersion STRING, appName STRING, appPlatform STRING, ip STRING, countryCode STRING, systimestamp BIGINT, currentTime BIGINT, clientTimeStamp STRING, groupId STRING, kindType STRING, params Map<STRING,STRING> )PARTITIONED BY (ym string, day string) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS TEXTFILE;

4.3.2 自定義UDF函數天周月起始時間

#添加編寫的jar ADD JAR /opt/apache/hive-3.1.2/lib/app-logs-hive-udf.jar #注冊UDF自定義函數 天周月起始時間 CREATE FUNCTION getdaybegin AS 'com.pusidun.applogs.udf.hive.DayBeginUDF'; CREATE FUNCTION getweekbegin AS 'com.pusidun.applogs.udf.hive.WeekBeginUDF'; CREATE FUNCTION getmonthbegin AS 'com.pusidun.applogs.udf.hive.MonthBeginUDF'; CREATE FUNCTION formattime AS 'com.pusidun.applogs.udf.hive.FormatTimeUDF';

4.3.3 Hive加載分區腳本

vim .exportData.sql ALTER TABLE s3_stage ADD PARTITION(ym='${ym}',day='${day}') LOCATION 's3a://bricks-playable/logs/stage/${ym}/${day}/'; ALTER TABLE s3_launch ADD PARTITION(ym='${ym}',day='${day}') LOCATION 's3a://bricks-playable/logs/launch/${ym}/${day}/'; ALTER TABLE s3_ads ADD PARTITION(ym='${ym}',day='${day}') LOCATION 's3a://bricks-playable/logs/ads/${ym}/${day}/'; ALTER TABLE s3_diamond ADD PARTITION(ym='${ym}',day='${day}') LOCATION 's3a://bricks-playable/logs/diamond/${ym}/${day}/'; ALTER TABLE s3_gift ADD PARTITION(ym='${ym}',day='${day}') LOCATION 's3a://bricks-playable/logs/gift/${ym}/${day}/'; ALTER TABLE s3_airdrop ADD PARTITION(ym='${ym}',day='${day}') LOCATION 's3a://bricks-playable/logs/airdrop/${ym}/${day}/'; ALTER TABLE s3_prop ADD PARTITION(ym='${ym}',day='${day}') LOCATION 's3a://bricks-playable/logs/prop/${ym}/${day}/'; ALTER TABLE s3_ball ADD PARTITION(ym='${ym}',day='${day}') LOCATION 's3a://bricks-playable/logs/ball/${ym}/${day}/';

4.3.4 Hive定時任務腳本

vim hive-exec.sh #!/bin/bash systime=`date -d "1 day ago" %Y%m-%d` ym=`echo ${systime} | awk -F '-' '{print $1}'` day=`echo ${systime} | awk -F '-' '{print $2}'` cp /opt/s3/.exportData.sql /opt/s3/exportData.sql sed -i 's/${ym}/'${ym}'/g' /opt/s3/exportData.sql sed -i 's/${day}/'${day}'/g' /opt/s3/exportData.sql

4.3.5 Zeppelin整合Spark和Hive

遊戲行業分析表(最全大數據知識點分析和企業級遊戲行業架構設計分享)4

zeppelin.png

4.3.6 Spark作業日志

遊戲行業分析表(最全大數據知識點分析和企業級遊戲行業架構設計分享)5

spark-history-jobs.png

4.4 實時數據分析

Fink消費kafka數據統計每1小時内購總額并寫入ES、每小時url請求Top10、每小時日活人數。

4.4.1 Flink的WebUI

遊戲行業分析表(最全大數據知識點分析和企業級遊戲行業架構設計分享)6

flink-job.png

4.4.2 Flink統計每小時内購總數并寫到ES

遊戲行業分析表(最全大數據知識點分析和企業級遊戲行業架構設計分享)7

es.png

4.5 大數據集群監測

遊戲行業分析表(最全大數據知識點分析和企業級遊戲行業架構設計分享)8

cloudera-manager.png

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关遊戲资讯推荐

热门遊戲资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved