优化的根本思想:
- 尽早尽量过滤数据,减少每个阶段的数据量
- 减少job数
- 解决数据倾斜问题
尽早尽量过滤数据,减少每个阶段的数据量
1.列裁剪:
例如某表有
a,b,c,d,e五个字段,但是我们只需要a和b,那么请用select a,b from table 而不是select * from table
2.分区裁剪:
在查询的过程中减少不必要的分区,即尽量指定分区
3.利用hive的优化机制减少job数:
不论是外关联outer join还是内关联inner join,如果join的key相同,不管有多少表,都会合并为一个MapReduce任务:
4.善用multi-insert:
5.善用union all:
不同表的union all相当于multi inputs,同一表的union all相当于map一次输出多条
6.避免笛卡尔积:关联的时候一定要写关联条件
7.join前过滤掉不需要的数据
8.小表放前大表放后