大数据系统调优:从DAG到单机
目标:优化T10的时效性
全局DAG调度层优化:提前任务开始时间:
1. 优化慢结点:T10依赖了T4,T7,T8, 其中T8为瓶颈,如果T8能提前点完成,T10可以早点开始,就能早点完成
2. 快结点做更多预计算:T10中依赖T4,T7的计算部分独立出一个任务T47,在T8完成前,先计算好T47,然后T10只需要在T47和T18的基础上做运算即可
控制任务粒度:平衡I/O与计算时间和复用
1.大任务分裂:如T7中是否存过于复杂的计算,可否拆成两个任务
2.小任务合并:T5,T8任务能否合并,减少中间落地I/O,提前完成时间
3.提取多个任务中的重复计算部分
单任务执行DAG优化:
提前过滤:
1. T4中可能存在大量数据,但是T10中有过滤(如去重,filter)将过滤功能提前到T4,或者T4后接个过滤任务
2. join后unique 改为join前对每个表进行unique再join
shuffle(join,unique,groupby)优化提高资源利用率:提高CPU,内存利用率,降低磁盘,网络I/O
1. 磁盘:使用bcast, pseek,流式去重等,避免使用磁盘 流式join避免了sort,攒数据等待
2. 网络:预先分桶,避免shuffle网络开销。 过滤放在shuffle前,提前降低数据量。
3. A join B再join C,能否优化为A join (B,C), 同时joinB,C,一次出结果,前提是join key得一样
单机性能:
1. 火焰图分析性能瓶颈,优化UDF,UDTF,UDAF等
2.执行框架优化:push/pull, 火山模型。向量计算,单条转小批(batch)处理
长尾优化:
1. 文件动态分发
2. 单文件split
3. shuffle key 尽量随机,避免数据倾斜