文/曾志浩

围绕王者荣耀大数据运营,依托对局日志和好友关系,开展了王者周报、赛季总结和周年庆活动等项目。这些案例中,遇到了哪些挑战?每一个指标是如何计算的呢?

作者:曾志浩,腾讯微信游戏中心,数据分析工程师,专注于手游数据分析与挖掘,微信游戏中心用户画像、内容推荐等工作。

1. 整体框架

从数据开发的角度,此类运营项目主要会和策划同学、后台同学进行协作。前期工作主要是整理数据源、拆解数据指标,本文主要专注大数据计算过程,最后一步将结果同步给后台。框架如图所示。

181134s5qqu5d5pp3zs9ex.png
关键的执行是 cg.mapValues,还有后面一步的 flatMapValues,运行的日志显示并行度和 other 关系紧密。当A join B 时,对 B 进行合理的 hashPartition,可以提升运行效率。经过测试, join算子性能强劲:不发生数据倾斜的前提,可以快速完成十亿级和十亿级的 RDD 进行关联。补充一点题外话,顺藤摸瓜看一下其他核心算子:distinct -> reduceByKey -> combineByKey。所以 Spark 的 distinct算子不会导致数据倾斜。

181238xssxxwaoo9a7lqox.png
分治法

业务背景:周年庆,计算用户一年内的最高连胜、连败,一年内开黑最多的好友。

将一年的对局日志全部读入内存?考虑到王者的体量,打消了这个想法。分治法也许是突破口:先把每个月的对局日志合并计算,然后对12个月的中间结果再做一次合并。图示如下,每天的日志评估量级是2.5E,月活用户评估量级是1.2E,这个规模可以轻松应对。

180654h0jmz2pdylyfyfjg.png
此次,x._1, x._2 可读性、维护性很糟糕,业务中有一些同学写了大量此类Magic 代码,异常头疼。王者周报超过50个数据项,开发过程中指标变化、增删都是常事,所以将用户的数据指标封装在 UsrSimpleInfo 类。示例如下。

181455u09qrtz02q7xpqyz.png
reduce 的写法如下。

180655helfslxtqrpwefft.png
封装取最大/最小的指标

业务背景:1. 用户最常用英雄的表现,2. 在一段时间里,用户最新的游戏昵称。

用户在指标A 最大时的其他数据项, Hive-SQL 需要先求用户指标A的最大值,然后再join 原始表,实现方式比较笨重。

类似前面的做法,把上述逻辑进行对象封装和函数重载:

180655u5r227plj9pe2bj6.png
避免改变RDD的核心数据结构

业务背景:用户每个对局模式的对局场次,每个英雄的使用场次和表现。

粗暴方法如下。

180655rzhmrmrerymrrgbe.png
两个 map算子 都会对全量对局日志进行 transform,内存开销极大。Key-Value结构的RDD,修改Value是正常的,但是应该避免改变 Key。突破点在于:对局模式和英雄数枚举下来是比较少的,适合HashMap存储;最后reduceByKey 阶段做 Foldleft 合并数据。示例如下。

180655e3n82wzzh33tikht.png
稳健地运行

产品发布之后,我发现“维稳”的压力很大。调试和运行的过程中,遇到了不少挑战。列举几个关键的节点。
 

  • 入库日志校验和依赖。

 

  • 运行监控。

Spark 任务的调度机制、内存分配,需要考虑多个影响因素。从 Spark UI 页面中,可以跟踪很多有价值的信息。任务根据 Action操作,划分到 Jobs,然后再进一步到 Stages。重点关注Stages阶段真实的执行顺序!Executors 显示了driver 节点和 data 节点的运行时信息。

 

 

  • 超时告警和错误告警。

4. 提升效果

运行耗时其实不适合作为评估指标,仅做参考。不考虑分配的内存/CPU资源,还有计算集群负载,都是耍流氓。

下面写的运行耗时,不包含准备数据,强调的是目前计算花费的时间和日志吞吐量,应对产品运营节奏不再是瓶颈。上一节提到的方法,通常会综合应用、随机应变。

 

 

  • 优化:join算子调优;将面向过程的计算封装成对象;避免改变RDD的核心数据结构。 王者周报涉及十亿级别的上报日志(包括5v5、3v3、1v1对局、英雄熟练度等)和庞大的关系链,计算耗时2.5小时-3小时。

 

  • 优化:将面向过程的计算封装成对象。 赛季总结的各项基础指标,只需要3-4小时完成。赛季结束的次日,通常可以体验/发布赛季总结。

 

  • 优化: 分治法。 周年庆: 在王者荣耀用户体量和活跃度下,基于一年的对局日志计算了最大连胜、连败和开黑最多的好友。

 

  • 优化:剪枝原始日志数据。 计算一个赛季的两两开黑情况,耗时50分钟。

5. 从产品角度解析王者数据运营

相比罗列数据指标,不如将数据包装成概念。数据不在于多、不在于奇,而在于“情”。

180656db75y7l2d84572d7.jpg [ 左一成绩单罗列数据,新版包装成每周一字 ]
呈现用户个人的数据仅是初级层次,如何连接好友,需要更多的想象。

王者大数据运营,在资源转化、曝光用户数、游戏用户的渗透,分享量、来着分享的访问,以及最常规的拉新、拉回流分析上,都具有上佳的表现。


via:腾讯大讲堂


锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛