此文献给正在大学迷茫或者即将进入大学计算机专业,将来想要从事大数据行业的学弟学妹们。学长给你们的建议在大学期间踏踏实实学习知识,不要好高骛远;多参加体育锻炼。做好这两点便可。切记不要往多领域发展,最终你会发现:仿佛这你也会那你也会,其实啥也不精还容易闹笑话。

1 游戏行业数据分析流程以及分析指标1.1 数据来源1.2 数据收集和落地1.3 离线分析

过滤清洗数据Nginx请求日志,ETL工作:

游戏打点记录业务逻辑:

1.4 实时数据分析1.5 用户肖像

批处理 实时处理统计每个用户肖像:

2 大数据相关知识点2.1 离线数据统计技能相关要求2.1.1 Hadoop2.1.2 Hive2.1.3 HBase2.1.4 Spark Core2.1.5 Spark SQL2.2 实时数据统计技能相关要求2.2.1 KafKa2.2.2 Flume2.2.3 Flink2.2.4 Spark Streaming2.3 其他技能要求2.3.1 Redis2.3.2 Mysql2.3.3 MongoDB2.3.4 ElasticSearch2.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

,