我想在我的mr代码中使用一个组合器,比如wordcount。我应该如何实现它?什么样的数据从合路器传递到减速器?这将是伟大的,如果你们中的任何人都可以提供我的代码合路器以及减速机。如果你能解释一下合路器的工作原理就更好了我是mapreduce的新手,正处于学习阶段。提前感谢:)
ao218c7q1#
合路器的工作原理与reducer相同,它可以实现reducer接口,克服reduce的reduce方法,如果使用合路器,较小的网络带宽足以将中间层(Map器的o/p)传输到reducer。如果在reducer中使用的应用程序同时遵循交换和关联,则可以在combiner reduce方法中使用相同的reduce方法(属于您自己的reducer)代码。即使为mr(map reduce)应用程序编写合并器,也没有执行合并器的规则。要执行合并器,请确保溢出数至少为3。例如,我的Map器输出是,,,,<34>。如果没有合并器,我对reducer的输入是。使用组合器,我可以将输入传递到减速机,就像,。
tct7dpnv2#
Combiner 在Map器和reducer之间使用,以减少Map和reduce阶段之间的数据传输量。 Combiner 实现类似于reducer实现。它应该实现reduce接口的reduce方法。输入和输出键值对应与reducer的键值对相似。在我们的驱动程序中,我们可以将我们的reducer类称为combiner
Combiner
job.setCombinerClass(MyReducer.class) ``` `Combiners` 只能用于交换和结合的函数。
For example maximum of numbers
Map 1 output - (23,27, 31) -> Combiner -> 31Map 2 output - (22,36,33,45) -> Combiner -> 45Map 3 output - (41,33,15,16) -> Combiner -> 41
Combiner acts on each of the mapper's output.
Combiner output - (31,45,41) ->Reducer -> 45
数据传输量现在减少了,这在示例中很明显。
yi0zb3m43#
合路器,也称为半减速器。合并器的主要功能是汇总具有相同键的Map输出记录。在map类和reduce类之间使用combiner类来减少map和reduce之间的数据传输量示例代码说明。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输出将作为输入传递给组合器。合路器输出
<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>
该合路器输出作为输入传递给减速机。减速器输出
<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设置为同一个类,这是理想的。
job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class);
看看java@tutorialspoint中的工作示例
3条答案
按热度按时间ao218c7q1#
合路器的工作原理与reducer相同,它可以实现reducer接口,克服reduce的reduce方法,如果使用合路器,较小的网络带宽足以将中间层(Map器的o/p)传输到reducer。
如果在reducer中使用的应用程序同时遵循交换和关联,则可以在combiner reduce方法中使用相同的reduce方法(属于您自己的reducer)代码。
即使为mr(map reduce)应用程序编写合并器,也没有执行合并器的规则。要执行合并器,请确保溢出数至少为3。
例如,我的Map器输出是,,,,<34>。如果没有合并器,我对reducer的输入是。使用组合器,我可以将输入传递到减速机,就像,。
tct7dpnv2#
Combiner
在Map器和reducer之间使用,以减少Map和reduce阶段之间的数据传输量。Combiner
实现类似于reducer实现。它应该实现reduce接口的reduce方法。输入和输出键值对应与reducer的键值对相似。在我们的驱动程序中,我们可以将我们的reducer类称为combiner
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
yi0zb3m43#
合路器,也称为半减速器。
合并器的主要功能是汇总具有相同键的Map输出记录。
在map类和reduce类之间使用combiner类来减少map和reduce之间的数据传输量
示例代码说明。
Map输入:
Map输出
此Map输出将作为输入传递给组合器。
合路器输出
该合路器输出作为输入传递给减速机。
减速器输出
如果您使用的是java,下面的代码将combiner和reducer设置为同一个类,这是理想的。
看看java@tutorialspoint中的工作示例