我正在使用本书Hadoop in Practice
学习Hadoop,在阅读第1章时,我看到了这个图:
来自Hadoop文档:(http://hadoop.apache.org/docs/current2/api/org/apache/hadoop/mapred/Reducer.html)
Reducer输入Mapper的分组输出。在该阶段,每个Reducer的框架都通过HTTP获取所有Mapper输出的相关分区。
框架在此阶段按键分配Reducer输入(因为不同的Mapper可能输出相同的键)。 混洗和排序阶段同时发生,即在提取输出时,它们被合并。
虽然我理解shuffle
和sorting
同时发生,但我不清楚框架如何决定哪个reducer
收到哪个mapper
输出。从文档中,似乎每个reducer
都有办法知道要收集哪个map
输出,但我无法理解。
所以我的问题是,鉴于上面的映射器输出,每个reducer的最终结果总是相同的?如果是,那么实现这一结果的步骤是什么?
感谢您的任何澄清!
答案 0 :(得分:1)
Partitioner决定如何将映射器的输出分配给不同的reducer。
分区程序控制中间地图输出的键的分区。密钥(或密钥的子集)用于通常通过散列函数来导出分区。分区总数与作业的reduce任务数相同。因此,这将控制m减少任务中的哪一个中间密钥(以及记录)被发送以进行减少。