离线数仓优化简述
本文分享自天翼云开发者社区《离线数仓优化简述》,作者:徐****东
1、业务层面
计算量太大是不是必须的,是否可以减少参与计算的用户量或者时间跨度;
计算逻辑是否过于复杂,是否可以简化。
2、模型层面
是否有现成的数据可以使用或者基于现成的数据进行加工;
是否可以将整个计算逻辑进行合理拆分,降低每个子任务的复杂度,同时提高复用的可能性;
维度退化,空间和时间的权衡。
3、系统层面(遵循一些计算引擎建议的使用规则和参数设置)
使用 Spark3 引擎,自动合并小文件;
输入文件的存储格式、压缩格式、大小;
输出文件的大小;
启用压缩;
分区、分桶;
拉链表;
yarn 队列的设置;
合适的计算引擎;
task 的内存设置;
task 处理的数据量;
task 的数量;
并行度优化;
调整参数减少 Map 数量;
调整参数减少 reduce 数量。
4、sql、代码层面
列裁剪,避免 select *;
分区裁剪,使用分区字段过滤;
条件限制;
谓词下推;
map 端预聚合;
大 key 的过滤;
打散倾斜 key;
合适的 join 方式;
用 Distribute By Rand 控制分区中数据量;
group by 优化;
中间结果的缓存和复用;
小文件优化。
5、任务层面
减少任务依赖,尽可能缩短链路;
业务链路/逻辑重构/改写;
任务分级,任务数评估,错峰调度;
任务依赖降级,周级别的任务依赖天级别,天级别依赖小时级别,小时级别依赖分钟级别;
避免频繁创建任务;
核心任务优先保证产出,双链路机制开启;
耗时长的任务拆分成子任务。任务批次提交;
资源动态扩容;
资源腾挪调整;
无用任务下线。
评论