考虑 MapReduce 程序的 WordCount 问题。
让我们考虑 Mapper 输出如下: Hello 1 World 1 Hello 1 Hadoop 1 Hello 1 Hadoop 1
它进入分区器(我们将 2 指定为没有减速器,)现在 mapoutput 将分区分为 2 部分 part1:
Hello 1
Hello 1
Hello 1
第 2 部分:世界 1 Hadoop 1 Hadoop 1
由于在 reducer:我们得到的输入是 Hello [1,1,1]
世界 [1]
Hadoop [1,1]
当这种价值合并发生时,请澄清我的理解。对于 MapReduce:K1, V1 ->(Mapper o/p) K2, V2 -> (Sort and Shuffle) K3, [V3] -> (reducer o/p) K4, v4
我的查询是在执行合并器之前或执行合并器之后(在排序和洗牌期间)发生这种值合并的时间。或值的合并发生在减速器级别向减速器提供输入之前。
因为根据我的理解:当映射器输出超过 mapreduce.task.io.sort.mb 的阈值时,它首先进入内存,它被溢出到本地磁盘,但在溢出数据之前按分区排序,并且在每个分区内它是在调用排序组合器以减小大小后按键排序。在 Mapper 完成后,溢出文件被合并并根据 min.num.spills.for.combine 值调用组合器。
因为,在字数问题中,reducer 对每个特定键的所有可迭代值进行累加,并写入输出键和值的总和。
由于Combiner是mini reducer,我们为combiner指定同一个reducer类 Job.setCombinerClass(Reduce.class);
然后在排序和洗牌期间在合并之前调用组合器是有价值的,否则我的理解不正确。请澄清我