到目前为止,我读过的所有书籍和博客都没有提供有关 reduce task 分配的太多信息。 reduce task 到可用插槽的分配似乎是 random 。
这是没有意义的,因为在不考虑数据( map )局部性的情况下跨网络改组数据违反了Hadoop设计原则。
同一文件中的数据块很有可能(不确定可能性)被放置在同一机架或附近机架中。因此,这些拆分/块的 map task 也将在这些机架中(大多数情况下)。
如果有可能,为什么不尝试将归约任务分配给与 map task 位于同一机架的插槽?
这不能提高1000个以上节点群集中的性能吗?特别是当输入是序列或图文件时。
任何人都可以确认 reducer 随机放置是正确的吗(权威版是这样说的)?如果是,为什么要做出这个决定?如果我错了?然后分配 reducer 的逻辑...链接到一些说明该逻辑也很好的文档。
非常感谢。
阿伦
最佳答案
没有办法给化简任务“数据局部性”。 每个reducer从每个映射器(而不是从您所说的文件或块)中获取数据。这是因为每个映射器都可能编写一个密钥,该密钥将传递给任意数量的reducer(有关更多信息,请查找Partitioner)。因此,对于1000个节点,您可以做的最好的事情是平均将本地数据的1/1000设为本地,因此,随机分发化简任务是您可以做的最好的事情。
在改组步骤中,对映射器和缩减器之间要传输多少数据的关注绝对是一个重要的考虑因素。这就是为什么您要预先过滤尽可能多的数据,并对数据类型使用正确的编码,以最大程度地减少通过的数据量。
关于hadoop - Hadoop-是否进行本地化意识检查以 reduce task 节点分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22076606/