配置调优
map join配置
对于两个表的join操作,将小表写在join的左边,大表写在join的右边,小表驱动大表来进行查询,可以使用mapjoin使得小表进入内存,将小表文件加载到DistributeCache中,再扫描大表,根据DistributeCache中的数据与大表进行关联对应
1 | -- 设置自动选择mapjoin(默认是true) |
group by 配置
默认情况下,Map阶段同一个key的数据分发给一个reduce,如果一个key数据过大就会导致数据倾斜,可以在Map阶段进行聚合操作
1 | -- 配置是否在Map阶段进行聚合,默认true |
小文件合并
当小文件过多时会导致map的数量增多,可以进行小文件的合并来减少map数
1 | -- CombineHiveInputFormat可以合并小文件(默认CombineHiveInputFormat) |
Reduce数量配置
reduce的数量要适量的设置,启动和初始化reduce也是相当耗时的,而且reduce过多会导致输出过多的小文件
1 | -- 每个reduce处理的数据量默认为256M |
并发执行
hive会将一个查询sql转换为一个或多个阶段,包含MapReduce阶段、抽样阶段、合并阶段、limit阶段等。默认情况下,hive一次只会执行一个阶段,但是这些阶段可能并不是相互依赖的,可以并发执行
1 | -- 打开并发执行(默认false) |
注意:在集群中,如果job的并发很多,会导致集群利用率增加
严格模式
为了防止一些不合法的sql无法执行,可以配置严格模式
1 | -- 分区表如果不使用分区字段来过滤则不允许执行(默认false) |