我正在用这本书学习hadoop Hadoop in Practice
在阅读第一章的时候,我看到了这个图表:
从hadoop文档:(http://hadoop.apache.org/docs/current2/api/org/apache/hadoop/mapred/reducer.html)
1.洗牌
reducer输入Map器的分组输出。在这个阶段,对于每个reducer,框架通过http获取所有Map器输出的相关分区。
2.排序
在这个阶段,框架按键对输入进行分组(因为不同的Map器可能输出相同的键)。洗牌和排序阶段同时发生,即在提取输出时,它们被合并。
但我明白 shuffle
以及 sorting
同时发生,我不清楚框架如何决定 reducer
收到哪个 mapper
输出。从文件上看,似乎每个 reducer
有办法知道 map
输出收集,但我不明白如何。
所以我的问题是,给定上面的Map器输出,最终的结果对于每个reducer总是相同的?如果是这样的话,有什么步骤来实现这个结果?
感谢您的澄清!
1条答案
按热度按时间xiozqbni1#
分区器决定如何将Map器的输出分配给不同的归约器。
partitioner控制中间Map输出的键的分区。密钥(或密钥的子集)通常通过哈希函数来派生分区。分区总数与作业的reduce任务数相同。因此,这就控制了m个reduce任务中的哪一个将中间键(以及记录)发送到reduce。