hive优化点
1)map join(默认是开启的)
MapJoin是hive的一种优化操作,其适用于小表join大表的场景,由于表的操作是在Map端且在内存进行的,所以其不需要启动reduce任务也就不需要经过shuffle阶段,从而能在一定程度上节省资源提高Join效率。
2)分区,分桶
3)合理设置map个数,合理设置reduce个数
4)优化小文件(合并小文件)
在Map执行前合并小文件,减少Map数:CombineHiveInputFormat具有对小文件进行合并的功能
Map输入合并小文件
对应参数:
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; #执行Map前进行小文件合并
set mapred.max.split.size=256000000; #每个Map最大输入大小
set mapred.min.split.size.per.node=100000000; #一个节点上split的至少的大小
set mapred.min.split.size.per.rack=100000000; #一个交换机下split的至少的大小
5)常用参数
输出合并小文件
set hive.merge.mapfiles = true 默认true,在map-only任务结束时合并小文件
set hive.merge.mapredfiles = true 默认false,在map-reduce任务结束时合并小文件
set hive.merge.size.per.task = 256*1000*1000 #合并文件的大小
set hive.merge.smallfiles.avgsize=16000000当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge
7)行列过滤
8)并行执行
9)严格模式
10)JVM重用
11)推测执行
【注】数据量大的使用mr引擎,数据量小,要求计算快的使用tez引擎,基于内存的计算。