Hive sql优化方法参数一些整理,方便快速查找使用
1. map数量与reduce数量的控制
输入文件大小指实际文件大小,与文件格式textfile, ORC等无关,压缩的文件格式会小很多设置参数要适当调整
--map数量控制
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set mapred.max.split.size=5000000; -- 每个map处理最大文件大小
set mapred.min.split.size.per.node=5000000; -- 每个节点处理最小文件大小
set mapred.min.split.size.per.rack=5000000; -- 每个机架处理最小文件大小
--reduce数量控制
set hive.exec.reducers.bytes.per.reducer=1073741824; -- 默认1G
set hive.exec.reducers.max=16; -- 设置最大的reduce数目
set mapred.reduce.tasks=6; -- 设置reduce数为6
2. 数据发生倾斜
a. 增加reduce的个数,减少reduce数据量
b. join时裁剪过滤无效的key值:不参与join的key值, 为null值、空值等无效的值
c. 转换key->new_key,数据对new_key的分区更加均匀
d. 对数据分布量很大的有限个key 进行单独处理
e. 若出现小表情况,可以考虑使用mapjoin