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

时间:2013-06-01 07:07:12

标签: hadoop mapreduce mapper reducers

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

2 个答案:

答案 0 :(得分:5)

Mapper并不真正知道将数据发送到何处,它主要关注两件事:

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

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

如果仍然不清楚,我会建议查看the reference book on Hadoop,其中有一整章描述了这一部分,这里有一个从中提取的模式,可以帮助您看到在随机播放步骤中发生的事情:

enter image description here

答案 1 :(得分:1)

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

作业跟踪器在将减速器任务分配给任务跟踪器时,知道成功的地图任务的运行位置,并可以编制任务跟踪器列表和地图尝试任务结果以进行拉取。