Hadoop-是否有减少任务节点分配的位置感知检查

Hadoop-是否有减少任务节点分配的位置感知检查,hadoop,mapreduce,Hadoop,Mapreduce,到目前为止,我读过的所有书籍和博客都没有提供多少关于减少任务分配的信息。将任务分配减少到可用插槽似乎是随机的 这是没有意义的,因为在不考虑数据(地图)位置的情况下在网络上移动数据违背了hadoop的设计原则 同一文件中的块很有可能(不是绝对可能)放置在同一机架或附近机架中。因此,这些拆分/块的映射任务也将位于这些机架中(大多数情况下) 如果这是一种可能的情况,为什么不尝试将reduce任务分配给与map任务相同机架中的插槽 这不会提高1000多节点集群的性能吗?尤其是当输入是序列或映射文件时 有

到目前为止,我读过的所有书籍和博客都没有提供多少关于减少任务分配的信息。将任务分配减少到可用插槽似乎是随机的

这是没有意义的,因为在不考虑数据(地图)位置的情况下在网络上移动数据违背了hadoop的设计原则

同一文件中的块很有可能(不是绝对可能)放置在同一机架或附近机架中。因此,这些拆分/块的映射任务也将位于这些机架中(大多数情况下)

如果这是一种可能的情况,为什么不尝试将reduce任务分配给与map任务相同机架中的插槽

这不会提高1000多节点集群的性能吗?尤其是当输入是序列或映射文件时

有人能确认随机放置的减速器是正确的吗(权威版的书上这么说)?如果是,为何作出该决定?如果我错了?然后是如何分配减速机的逻辑…链接到一些文档,解释这种逻辑也很好

先谢谢你


Arun

无法为reduce任务指定“数据位置”每个reducer从每个映射器获取数据(而不是像您所说的那样从文件或块)。这是因为每个映射程序都可能编写一个键,该键将指向任意数量的还原程序(有关更多信息,请查看分区程序)。因此,对于1000个节点,您所能做的最好的事情是平均将1/1000的数据放在本地,因此随机分配reduce任务是您所能做的最好的事情


在洗牌步骤中,映射器和还原器之间传输多少数据的问题无疑是一个重要的考虑因素。这就是为什么您希望在前期尽可能多地进行过滤,并对数据类型使用适当的编码,以最大限度地减少通过的数据量。

我认为在map和reduce之间有一个组合器步骤,这是您如何尝试最大化局部性,作为reduce的一个组成部分(至少在概念上),因为它具有一些“局部性”在将数据传递到最终减速器之前进行处理。正如Donald提到的,reduce不可能保持本地状态。

我不是说reducer从文件或块中获取数据。让我们考虑一个具有顺序键的文件。当该文件存储在HDFS中时,一组复制块很可能存储在同一机架中。然后,地图也很可能被分配到同一机架上的插槽。在这种情况下,与随机将这些减速器分配到不同的机架相比,将x个减速器分配到同一机架将提高性能。但是,在另一个机架上运行的映射器呢?这些人必须将数据传送过来。我从来没有见过一个机架有大部分的任务。我总是看到它均匀分布。