关于地图中的混洗的查询减少

S K*_* Kr 1 hadoop mapreduce reducers mapper

运行映射器的节点处理如何知道它必须将一些键值输出发送到节点A(运行reducer),一些键值输出到节点B(运行另一个reducer)?是否存在由JobTracker维护的reducer节点列表?如果是,它如何选择节点来运行减速器?

Cha*_*guy 5

A Mapper并不真正知道在哪里发送数据,它主要关注两件事:

  • 将数据写入磁盘.最初,映射输出缓冲在内存中,一旦达到某个阈值,它就会刷新到磁盘.但是在转到磁盘之前,数据通过获取输出密钥的哈希来进行分区,输出密钥对应于Reducer它将被发送到的输出密钥.
  • 完成地图任务后,它将通知父任务跟踪器说明已完成,然后将通知作业跟踪器本身.因此,作业跟踪器具有地图输出和任务跟踪器之间的完整映射.

从那里Reducer开始,它将继续向作业跟踪器询问与其分区相对应的地图输出,直到它全部检索到它们为止.每当地图输出可用时,reduce任务将开始复制它,并在复制时逐渐合并.

如果仍然不清楚,我会建议查看有关Hadoop的参考书,其中有一章描述了这一部分,这里是从中提取的一个模式,它可以帮助你想象在shuffle步骤中发生的事情:

在此输入图像描述