1

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

4

2 回答 2

5

AMapper并不真正知道将数据发送到哪里,它专注于两件事:

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

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

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

在此处输入图像描述

于 2013-06-01T07:39:58.263 回答
1

映射器不会将数据发送到减速器,而是减速器从成功的映射任务运行的任务跟踪器中提取数据。

Job Tracker 在将 reducer 任务分配给 task tracker 时,知道成功的 map 任务在哪里运行,并且可以编译一个 task tracker 列表和要 pull 的 map 尝试任务结果。

于 2013-06-01T07:39:16.677 回答