Hive

Spark

Flink

语法优化

1. 列裁剪(只选择需要的列)

2. 行裁剪(只选取需要的行)

3. group by

set hive.map.aggr = true

set hive.groupby.mapaggr.checkinterval = 10000

set hive.groupby.skewindata = true

生成两个MR查询计划,部分聚合 -> 全局聚合

4. 多重模式:一次读取,多次插入

5. 谓词下推:优先执行 where 逻辑,保证后续数据减少

6. MapJoin: 小表被分发到 Map进程,通过 Hash 过滤来避免 shuffle

7. 大表join大表:空key过滤,空key转换

8. count(distinct):使用 group by 优先优化数据,在 count(1)

9. 避免笛卡尔积:笛卡尔积只能使用一个1reducer来完成

10. 动态分区:将数据插入到相应的分区

11. 合理的 Map 数

12. 执行前合并小文件

13. 合理的 reduce数

14. 并行执行:非相互的依赖task,可以并行执行

15. 严格模式:防止用户执行那些可能意向不到的不好的影响的查询

16. 推测执行:开启备份任务,计算相同的数据

17. JVM重用:JVM实例在同一个job中重新使用N次,防止JVM频繁启动

18. explain 执行计划

合适的文件压缩(LZO,Snappy)

合适的文件格式(列存储,行存储)

建表优化

1. 分区表(基于目录)

2. 分桶表(基于文件,hash)

本地模式:对于小数据集,直接单机执行

Fetch抓取: 不需要执行 MR,获取数据

expalin 执行计划

资源调优

1. 资源配置(内存,CPU)

2. RDD持久化

3. 并行度

SQL语法优化

1. 谓词下推

2. 列裁剪

3. 常量替换

4. 开启CBO

5. 广播join

Job优化

1. Map端聚合

2. 读取小文件优化

3. 增大Map输出buffer

4. 合理设置Map数

5. 输出产生小文件优化

6. 增大reduce缓冲区,减少拉取次数

7. 调节reduce拉取重试次数

8. 调节reduce拉取数据的等待时间

9. 合理使用 shffle

10. 调节数据本地等待时长

11. 使用对外内存

12. 调节连接等待时长

资源调优

1. 资源配置(内存,CPU)

2. 并行度

checkpoint调优

1. checkpoint的设置和选择

2. 开启State访问性能监控

3. 开启增量检查点和本地恢复

4. 调整预定义选项

5. 增大block缓存

6. 增大buffer大小和数量和level阈值

7. 增大后台线程数和write buffer合并

8. 开启分区索引

反压处理

1. webUI 定位

2. Metrics 定位

3. 使用火焰图

4. 分析GC

5. 外部组件交互

6. 查看数据倾斜

数据倾斜

Job优化

1. 算子指定UUID

2. 链路延迟测量

3. 开启对象重用

4. 细粒度滑动窗口优化

SQL 调优

1. 设置空闲状态保留时间

2. 开始MiniBatch

3. 开启 LocalGlobal

4. 开启 Split distinct

5. 设置参数