我正在阅读使用组合器的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的输入将只是映射器编写的输出,但按键分组。