首先发生合并,或​​者首先在MapReduce中发生合并器

时间:2016-06-08 17:00:40

标签: hadoop mapreduce combiners

考虑MapReduce程序的WordCount问题。

让我们考虑一下Mapper输出如下: 你好1 世界1 你好1 Hadoop 1 你好1 Hadoop 1

它去分区器(我们指定为2作为减速器没有,) 现在mapoutput分区分为两部分 第1部分:
你好1
你好1
你好1

2部分: 世界1 Hadoop 1 Hadoop 1

因为在reducer: 我们得到输入 你好[1,1,1]

世界[1]

Hadoop [1,1]

当这种价值合并发生时,请澄清我的理解。 对于MapReduce: K1,V1 - >(Mapper o / p)K2,V2 - > (排序和随机播放)K3,[V3] - > (reducer o / p)K4,v4

我的查询是在合并值之前,在执行Combiner之前或执行Combiner之后(在排序和随机播放期间)。或者在以减速器级别向Reducer提供输入之前发生值的合并。

根据我的理解: 当mapper输出超过mapreduce.task.io.sort.mb的阈值时,它首先进入内存,但它溢出到本地磁盘,但是在溢出数据之前按分区排序,并且在每个分区内它按排序后的键排序组合器被调用以减小尺寸。 Mapper完成后,溢出文件将被合并,并根据min.num.spills.for.combine值调用合并器。

因为在字数统计问题中,reducer会为每个特定键累积所有iterable值,并写出输出键和值的总和。

由于Combiner是迷你减速器,我们为组合器指定相同的减速器类 Job.setCombinerClass(Reduce.class);
然后在排序和洗牌期间合并之前调用Combiner,或者我的理解不合适。 请澄清我

1 个答案:

答案 0 :(得分:1)

Mapper开始将输出存储在缓冲区中,当缓冲区已满时,在数据溢出到磁盘之前,组合器会执行​​以减少数据量。

组合器可以执行0次(如果映射器输出数据量小于缓冲区大小)或1-N次,具体取决于数据量。

您的过程不应取决于组合器,组合器只是一个可选的优化,可以减少网络从映射器传输到Reducer的数据量。

先前组合器调用的结果可以再次与最后数据组合。您需要保证组合器的输入和输出兼容。并且组合器的输出应该与减速器的输入兼容。

组合器就像一个局部缩减器,在数据被混洗并传输到reducer之前,它只组合一个Mapper的数据。