节点管理器是否在每个 DataNode 内部执行 Map 和 Reduce 阶段?

Does execution of Map and Reduce phase happen inside each DataNode by Node Manager?

我了解到资源管理器将 MapReduce 程序发送到每个节点管理器,以便在每个节点中执行 MapReduce。

但是看到这张图片后,我对 Map & Reduce jobs 实际执行的位置以及数据节点之间发生的洗牌感到困惑?

排序和 suffle/send 跨数据节点的数据执行 Reduce Job 是不是需要时间?请解释一下。

也让我知道这张图中的Map NodeReduce Node是什么。 图片来源:http://gppd-wiki.inf.ufrgs.br/index.php/MapReduce

输入拆分是存储在 hdfs 上的文件的逻辑块,默认情况下,输入拆分表示文件块可能存储在其中的文件块集群中的许多数据节点。

一个容器是资源管理器分配给任意数据节点的任务执行模板,用于执行Map/Reduce任务。

首先,Map 任务由数据节点上的容器执行,资源管理器通过遵守 机架意识策略(Local/Rack Local/DC本地)。

Reduce 任务将由任何数据节点上的任何随机容器执行,reducers 通过 Shuffle/Sort 进程从每个映射器复制其相关数据。

映射器以这样的方式准备结果:结果在内部分区,在每个分区内,记录按键排序,分区器确定哪个缩减器应该获取分区数据。

通过Shuffle和Sort,Reducers从每个映射器通过http输出复制它们的相关分区,最终每个reducer合并和排序复制的分区并在reduce之前准备最终的单个排序文件() 方法被调用。

下图可能会给出更多说明。 [图片来源:http://www.ibm.com/developerworks/cloud/library/cl-openstack-deployhadoop/]