•reducer个数的设定极大影响执行效率
•不指定reducer个数的情况下,Hive分配reducer个数基于以下:
参数1:hive.exec.reducers.bytes.per.reducer(默认为1G) ---------------------- 每个reduce任务处理的数据量
参数2:hive.exec.reducers.max(默认为999) ---------------------- 每个任务最大的reduce数目
•计算reducer数的公式
•N=min(参数2,总输入数据量/参数1) set mapred.reduce.tasks=13;
•reduce个数并不是越多越好
同map一样,启动和初始化reduce也会消耗时间和资源;有多少个reduce,就会有多少个输出文件。(当有reduce,文件个数同reduce数一样;没有reduce,文件个数同map数一样)
Reducer过多:生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题。
Reducer过少:影响执行效率。
•什么情况下只有一个reduce
很多时候你会发现任务中不管数据量多大,不管你有没有设置调整reduce个数的参数,任务中一直都只有一个reduce任务;
1、 除了数据量小于hive.exec.reducers.bytes.per.reducer参数值的情况外
2、没有group by的汇总
3、用了Order by。
如何设置合理的Reduce的个数
最新推荐文章于 2023-10-17 20:15:00 发布