我理解资源管理器将MapReduce程序发送到每个节点管理器,以便在每个节点中执行MapReduce。
但是看到这张图片后,我对实际执行Map & Reduce jobs
的位置以及数据节点之间的混乱情况感到困惑?
是否需要花时间对差异数据节点进行排序和填充/发送数据以执行Reduce Job
?请解释一下。
另请告诉我此图中Map Node
和Reduce Node
的内容。
Image Src:http://gppd-wiki.inf.ufrgs.br/index.php/MapReduce
答案 0 :(得分:2)
输入拆分是存储在hdfs上的文件的逻辑块,默认情况下,输入拆分表示文件的块,其中文件的块可能存储在许多数据节点上。群集。
容器是资源管理器在任何数据节点上分配的任务执行模板,以便执行Map / Reduce任务。
首先, Map 任务由数据节点上的容器执行,资源管理器将容器分配到尽可能接近输入拆分的位置,方法是遵守机架感知策略(本地/机架本地/ DC本地)。
Reduce 任务将由任何数据节点上的任何随机容器执行,并且reducers通过Shuffle / Sort过程从每个映射器复制其相关数据。
映射器以结果在内部分区的方式准备结果,并且在每个分区内,记录按键排序,分区程序确定哪个reducer应该获取分区数据。
通过 Shuffle and Sort ,Reducers通过http从每个映射器输出复制其相关分区,最终每个reducer合并并对复制的分区进行排序,并在reduce()方法之前准备最后一个Sorted文件调用
下面的图片可能会给出更多的澄清。 [Imagesrc:http://www.ibm.com/developerworks/cloud/library/cl-openstack-deployhadoop/]