我是新手。我很想知道如何将Reducer设置为不同的hive数据集。它是基于处理的数据大小?或者是一组默认的减速器?
例如,5GB的数据需要多少减速器?将相同数量的Reducer设置为较小的数据集吗?
提前致谢!!干杯!
答案 0 :(得分:3)
在开源蜂巢(可能是EMR)
# reducers = (# bytes of input to mappers)
/ (hive.exec.reducers.bytes.per.reducer)
默认hive.exec.reducers.bytes.per.reducer是1G。
减速器数量还取决于输入文件的大小 你可以通过设置属性hive.exec.reducers.bytes.per.reducer来改变它:
通过更改hive-site.xml
hive.exec.reducers.bytes.per.reducer 1000000
或使用set
hive -e"设置hive.exec.reducers.bytes.per.reducer = 100000
答案 1 :(得分:1)
在MapReduce程序中,reducer是根据reducer输入中的key分配的。为分组输入中的每一对调用reduce方法。它不依赖于数据大小。
假设你要进行一个简单的单词计数程序,文件大小为1 MB但是映射器输出包含5个密钥,它将减速器用于减少,那么就有机会获得5个reducer来执行该任务。
但是假设你有5GB数据并且mapper输出只包含一个键,那么只会分配一个reducer来将数据处理成reducer阶段。
配置单元中的减速器数量也由以下配置控制:
mapred.reduce.tasks
Default Value: -1
每个作业的默认减少任务数。通常设置为接近可用主机数的素数。当mapred.job.tracker是" local"时忽略。 Hadoop默认将此值设置为1,而hive使用-1作为其默认值。通过将此属性设置为-1,Hive将自动确定减少器的数量。
hive.exec.reducers.bytes.per.reducer
Default Value: 1000000000
默认值为1G,即如果输入大小为10G,则将使用10个减速器。
hive.exec.reducers.max
Default Value: 999
将使用最大数量的减速器。如果配置参数mapred.reduce.tasks中指定的值为负数,则hive将在自动确定reducer数量时将此值用作reducers的最大数量。
减少了多少?
正确的缩减次数似乎是0.95 or 1.75
乘以(<no. of nodes> * mapred.tasktracker.reduce.tasks.maximum).
使用0.95
,所有缩减都可以立即启动,并在地图完成时开始传输地图输出。使用1.75
,更快的节点将完成第一轮减少并启动第二轮减少,从而更好地实现负载平衡。
增加减少的数量会增加框架开销,但会增加负载平衡并降低故障成本。上面的缩放因子略小于整数,以便在框架中为推测任务和失败任务保留一些减少时隙
来源:http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html
请查看以下链接以获得有关减速机的更多说明。
答案 2 :(得分:1)
hive.exec.reducers.bytes.per.reducer
Default Value: 1,000,000,000 prior to Hive 0.14.0; 256 MB (256,000,000) in Hive 0.14.0 and later
来源:https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties