离线任务运行耗时长的问题
问题说明
初步方案运行时存在两大问题:
1. 任务处理延迟显著,单个任务运行 3-8 小时。
2. 任务处理无法运行成功频繁 OOM。
任务执行慢
任务频繁 OOM
解决方案
※ 方案优化
任务执行慢主要是有长尾用户打满 10w 长序列,出现数据倾斜问题甚至 oom。
通过对链路优化,先将原始 10w 长序列做预处理,由于回溯一般按照一个月跑数据,可以利用 pv 表先统计有哪些有效用户,对有效用户按照 【月初 ts+1w, 月末 ts】截取原始序列,获取相对较短的预处理队列。
任务倾斜
原始序列预处理
※ ODPS 任务性能调优
a. 按照 CPU : MEM = 1 : 4 调整计算和存储的比例,可以最大化利用资源,因为我们申请的资源池都是按照这个固定比例来的。
资源没有最大化使用
b. 在固化计算 / 存储比例参数后,可以通过 xxx.split.size 和 xxx.num 共同调优。xxx.split.size 可以实现输入分片大小,减少 oom 机会。xxx.num 可以实现扩大并发数,加快任务的执行(xxx 代表 mapper、reducer、joiner 几个阶段)。
分批次完成阶段处理
c. 减少自定义 UDF 使用。在离线任务中有部分逻辑比较复杂,可能需要数据平铺、聚合、再内置函数等。最好的使用原则是内置函数 >“数据平铺 + 内置函数”> 自定义 UDF。由于自定义 UDF 运行在 Java 沙箱环境中,需通过多层抽象层 (序列化 / 反序列化、类型转换),测试发现大数据量处理过程性能相对最差。
一致性验证归因难的问题
问题说明
在线 / 离线全链路数据的一致性验证过程中,由于按照天级全量 dump 序列,需要验证 15 个序列,每个序列 diff 量在 10w~50w 不等,这种多序列大规模的 diff 问题人工核验效率太慢。
解决方案
※ 整体 diff 率分析
通过统计全序列 diff 率并聚类分析高 diff 样本,定位共性根因,实现以点带面的高效问题修复。
※ diff 归因工具
通过建立数据 diff 的归因分类体系(如排序不稳定、特征穿越等),并标注标准化归因码,实现对 diff 问题的快速定位与根因分析,显著提升排查效率。
归因码分类
※ 重复度统计工具
由于在线受当时环境的影响,离线回溯无法 100% 复现原始序列,一致性差异在所难免。我们通过聚焦主要特征并统计其重复度,结合「diff 率 + 重复度」双维度评估方案,为算法决策提供量化依据,有效减少无效迭代。
重复度统计