Combiner 实现和内部工作

Combiner Implementation and internal working

我想在我的 MR 代码中使用组合器,比如 WordCount。

我该如何实施?

什么类型的数据从组合器传递到减速器?

如果有谁能提供Combiner和Reducer的代码就更好了

如果能解释一下combiner的工作原理就更好了

我是 mapreduce 的新手,正处于学习阶段。

提前致谢:)

Combiner用于mapper和reducer之间,减少map和reduce阶段之间的数据传输量。

Combiner 实现类似于reducer 实现。它应该实现 reduce 接口的 reduce 方法。输入输出键值对应该和reducer类似。

在我们的驱动程序中,我们可以只提到我们的减速器 class 作为组合器

job.setCombinerClass(MyReducer.class)

Combiners 只能用于可交换和结合的函数。

For example maximum of numbers

Map 1 output - (23,27, 31) -> Combiner -> 31
Map 2 output - (22,36,33,45) -> Combiner -> 45
Map 3 output - (41,33,15,16) -> Combiner -> 41

Combiner acts on each of the mapper's output.

Combiner output - (31,45,41) ->Reducer -> 45

数据传输量现在减少了,这从示例中可以明显看出。

A Combiner,也称为半减速器

一个Combiner的主要作用是将具有相同key的map输出记录进行汇总。

Combinerclass用于Mapclass和Reduceclass之间,减少class之间的数据传输量=40=]地图和减少

带有示例代码的解释。

地图输入:

What do you mean by Object
What do you know about Java
What is Java Virtual Machine
How Java enabled High Performance

地图输出

<What,1> <do,1> <you,1> <mean,1> <by,1> <Object,1>
<What,1> <do,1> <you,1> <know,1> <about,1> <Java,1>
<What,1> <is,1> <Java,1> <Virtual,1> <Machine,1>
<How,1> <Java,1> <enabled,1> <High,1> <Performance,1>

此 MAP 输出将作为输入传递给 Combiner。

合成器输出

   <What,1,1,1> <do,1,1> <you,1,1> <mean,1> <by,1> <Object,1>
   <know,1> <about,1> <Java,1,1,1>
   <is,1> <Virtual,1> <Machine,1>
   <How,1> <enabled,1> <High,1> <Performance,1>

此组合器输出作为输入传递给 Reducer。

减速器输出

   <What,3> <do,2> <you,2> <mean,1> <by,1> <Object,1>
   <know,1> <about,1> <Java,3>
   <is,1> <Virtual,1> <Machine,1>
   How,1> <enabled,1> <High,1> <Performance,1> 

如果您使用 java,下面的代码会将 Combiner 和 Reducer 设置为相同的 class,这是理想的。

  job.setJarByClass(WordCount.class);
  job.setMapperClass(TokenizerMapper.class);
  job.setCombinerClass(IntSumReducer.class);
  job.setReducerClass(IntSumReducer.class);

看看 example 在 java @tutorialspoint

中的工作

combiner 与 reducer 做同样的工作,它可以实现 reducer 接口并覆盖它的 reduce method.if 你使用 combiner,较小的网络带宽足以传输中间(o/p 映射器)到减速器。

如果您在 reducer 中使用的应用程序同时遵守 Commutative 和 Associative,您可以在 combiner reduce 方法中使用相同的 reduce 方法(属于您自己的 reducer)代码。

即使您为 MR(map reduce) 编写了组合器,也没有执行组合器的规则application.to 执行组合器确保溢出数至少应为 3。

例如,我的映射器输出是 ,<34>。 没有组合器,我对减速器的输入是。 使用组合器,我可以将输入传递给 reducer 就像 ,.