组合器实施和内部工作

时间:2015-10-29 05:29:24

标签: hadoop mapreduce combiners

我想在我的MR代码中使用合成器说WordCount。

我该如何实施?

从组合器传递给reducer的是什么类型的数据?

如果你们中的任何人都能为我提供Combiner和Reducer的代码,那就太棒了。

如果你能解释合成器的工作方式会更好

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

提前致谢:)

3 个答案:

答案 0 :(得分:2)

组合器正在做与减速器相同的工作,它可以实现减速器接口并超越它的减少方法。如果使用组合器,较小的网络带宽足以将中间(o / p的映射器)传输到减速器。

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

即使您为MR(map reduce)应用程序编写了组合器,也没有规则来执行组合器。执行组合器以确保泄漏数量至少为3。

表示我的mapper输出是,,,,,< 34>。 对于组合器,我对减速器的输入是。 使用合并器,我可以将输入传递给reducer就像,。

答案 1 :(得分:1)

在mapper和reducer之间使用

Combiner来减少map和reduce阶段之间的数据传输量。

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

在我们的驱动程序中,我们可以提到我们的reducer类作为组合器

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

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

答案 2 :(得分:0)

Combiner ,也称为半减速器。

Combiner 的主要功能是使用相同的键汇总地图输出记录。

Combiner 类用于Map类和Reduce类之间,以减少 Map Reduce <之间的数据传输量/ p>

示例代码说明。

MAP输入:

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

MAP输出

<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&amp;减速机到同类,这是理想的。

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

查看java @tutorialspoint

中的工作example