前言
在上一篇文章《Hive 作业产生的map数越多越好还是越少越好?》中介绍了map个数设置多少合适的问题,那么Reduce个数设置多少合适呢?今天就给小伙伴们聊一下Reduce个数设置方法以及设置多少合适的原则!
1. Reduce个数设置方法
方法1
首先我们来看下reduce数的计算公式:
N=min(参数2,总输入数据量/参数1)
上述参数说明:
参数1:每个reduce任务处理的数据量大小,默认值为256M。
可以通过如下参数进行设置:
set hive.exec.reducers.bytes.per.reducer=256000000;
参数2:每个job最大的reduce数,默认1009
可以通过如下参数进行设置:
set hive.exec.reducers.max=1009;
方法2
在Hadoop的mapred-default.xml文件中修改设置每个job的reduce数:
set mapreduce.job.reduces=20;
2. Reduce个数设置原则
在设置reduce个数的时候,需要考虑以下两个原则:
- 单个reduce任务处理数据量大小要合适
- 根据输入数据量选择合适的reduce数
总结
reduce个数并不是越多越好,也不是越少越好!
设置过多:
- 导致过多的启动和初始化操作,消耗时间和资源
- 有多少个reduce,就会产生多少个输出文件,如果生成了很多小文件并且作为下一个job的输入,则会出现小文件过多问题。
设置过少:
- 会导致任务执行效率低下,增加耗时和资源!
我们需要根据原则和方法设置合适的Redece个数!