Hive数据的Reducers

时间:2015-05-21 08:31:33

标签: mapreduce hive

我是新手。我很想知道如何将Reducer设置为不同的hive数据集。它是基于处理的数据大小?或者是一组默认的减速器?

例如,5GB的数据需要多少减速器?将相同数量的Reducer设置为较小的数据集吗?

提前致谢!!干杯!

3 个答案:

答案 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

请查看以下链接以获得有关减速机的更多说明。

Hadoop MapReduce: Clarification on number of reducers

答案 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