一、Hadoop
1.1 Map 端
- 增大环形缓冲区大小
- 增大环形缓冲区的溢写比例
- 使用 Combiner 预聚合
1.2 Reduce 端
-
合理设置 Map 和 Reduce 的个数
太多:会导致任务间竞争资源,造成任务等待超时。
太少:会造成 Task 等待。
-
设置 Map、Reduce 共存
-
规避使用 Reduce
-
增加每个 Reduce去 Map中拿数的并行度
-
增大 Reduce 的资源
-
使用压缩,减少 IO(LZO、Snappy)
1.3 数据倾斜
- Map 端进行预聚合
- 二次 MR(局部聚合+全局聚合)
- 增大 Reduce 的并行度
- 自定义分区器
二、Hive
2.1 Map 端
- 合并小文件
- 合理设置Map 数据
- 开启 JVM 重用
- 调节Map Task 的内存和 CU资源大小
2.2 Reduce
- 合理设置Reduce 数(生产文件数据大小)
- 调节Reduce Task 的内存和 CU资源大小
2.3 Join
- 大小表(Map Join)
- 大表大表(Sort Merge Bucket (SMB) Join)
2.4 数据倾斜优化
-
count(distinct xxx) 改为 group by+count
-
开启 skew 参数(partition 打散-预聚合 + 全局聚合)
-
Reduce 倾斜
- 过滤多余的数据 -- 不应影响业务数据
- key 打散,二次 MR
-
Join
-
大小表:Map Join
-
大表大表
- 单 Key:拆分 + union all
- 多 Key:打散+膨胀+局部+全局聚合
-
2.5 CBO 优化
- 谓词下推
评论区