关于map reduce中洗牌的查询

mzmfm0qo  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(306)

运行mapper的节点处理程序如何知道它必须将一些键值输出发送到节点a(运行reducer)和节点b(运行另一个reducer)?jobtracker是否维护了reducer节点列表?如果是,它如何选择一个节点来运行reducer?

gg0vcinb

gg0vcinb1#

Mapper 实际上不知道将数据发送到何处,它主要关注两件事:
将数据写入磁盘。最初,map输出被缓冲在内存中,一旦达到某个阈值,它就会被刷新到磁盘。但就在进入磁盘之前,数据是通过获取输出键的散列来分区的,输出键对应于 Reducer 它将被发送到。
Map任务完成后,它会通知父任务跟踪器说它完成了,然后通知作业跟踪器本身。因此,作业跟踪器具有Map输出和任务跟踪器之间的完整Map。
从那里,当一个 Reducer 开始时,它将不断向作业跟踪器请求与分区对应的Map输出,直到它检索到所有这些输出为止。每当Map输出可用时,reduce任务将开始复制它,并在复制时逐渐合并。
如果还不清楚的话,我建议看一看hadoop的参考书,它有一整章描述这一部分,这里是一个从中提取的模式,可以帮助您形象化在洗牌步骤中发生的事情:

k97glaaz

k97glaaz2#

Map器不会将数据发送到还原器,而是还原器从成功运行Map任务的任务跟踪器中提取数据。
作业跟踪器在将reducer任务分配给任务跟踪器时,知道成功Map任务的运行位置,并可以编译任务跟踪器列表和Map尝试任务结果。

相关问题