在没有合并阶段的情况下,减少器的输入将是什么



我正在阅读使用组合器的mapreduce教程http://www.tutorialspoint.com/map_reduce/map_reduce_combiners.htm

减速器接收来自组合器的以下输入

<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>

我的疑问是,如果我跳过组合器并允许mapper将输出传递给减少器不执行任何分组操作(不使用组合器),并允许其通过混洗和排序阶段。

在映射器阶段结束并且经过混洗和排序阶段之后,reducer将接收什么输入?

我可以检查减速器收到了什么输入吗?

我想说,您在该教程中看到的输出可能有点错误。由于它将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>

在本例中,您可以绝对不使用组合,最终结果将是相同的。在有多个映射器和reducer的场景中,组合只会对映射器的输出进行一些本地聚合,reduce会进行最终聚合。

如果您在没有合并的情况下运行,那么在reduce阶段仍然会得到基于关键字的分组。联合收割机只是在地图输出上为您进行一些局部聚合。

reduce的输入将只是映射器编写的输出,但按键分组。

相关内容

  • 没有找到相关文章

最新更新