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
3. mapjoin,缓存小表数据在map端
set hive.auto.convert.join=false;
set hive.ignore.mapjoin.hint=false;
set hive.optimize.bucketmapjoin.sortedmerge=false;
select /*+ mapjoin(b)*/
a.key,
a.first_name,
b.last_name
from more_record_table a
join less_record_table b
on a.key = b.key;