我正在阅读使用合成器的mapreduce教程 http://www.tutorialspoint.com/map_reduce/map_reduce_combiners.htm
reducer从组合器
接收以下输入<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>
我怀疑如果我跳过组合器并允许映射器将输出传递给 减速器不执行任何分组操作(不使用组合器)并允许它通过shuffle和sort阶段。
在映射器阶段结束后以及经过混洗和分类阶段后,reducer会收到什么输入?
我可以查看减速机收到的输入信息吗?
答案 0 :(得分:0)
我想说你从那个教程看的输出可能有点不对劲。由于它将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>
在此示例中,您绝对不能使用联合收割机,最终结果将是相同的。在你有多个映射器和缩减器的情况下,组合器只会对映射器的输出进行一些本地聚合,而reduce会进行最终的聚合。
如果您在没有联合收割机的情况下运行,您仍将在减少阶段获得基于密钥的分组。联合收割机将在地图输出上为您进行一些本地聚合。
reduce的输入只是mapper写的输出,但按键分组。