hadoop-是否有针对reduce任务节点分配的位置感知检查

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

到目前为止,我读过的所有书籍和博客都没有提供多少关于减少任务分配的信息。将任务分配减少到可用插槽似乎是随机的。
这是没有意义的,因为不考虑数据(map)的局部性而在网络上洗牌数据违背了hadoop的设计原则。
同一个文件中的块很有可能(不是确定的可能性)放在同一个机架或附近的机架中。因此,这些分割/块的Map任务也将在这些机架中(大多数情况下)。
如果这是一种可能的情况,为什么不尝试将reduce任务分配给与map任务相同机架中的插槽?
这难道不能提高1000多个节点集群的性能吗?尤其是当输入是序列或Map文件时。
有没有人能确认一下随机放置的异径管是正确的?如果是的话,为什么做出这个决定?如果我错了?然后是如何分配减速机的逻辑…链接到一些文档,解释这个逻辑也很好。
提前多谢了。
阿伦

hmtdttj4

hmtdttj41#

没有办法赋予reduce任务“数据局部性”。每个reducer从每个Map器获取数据(而不是像您所说的那样从文件或块)。这是因为每个Map器都可能编写一个键,该键将指向任意数量的缩减器(有关更多信息,请查看分区器)。因此,对于1000个节点,最好的方法是平均将1/1000的数据放在本地,所以随机分配reduce任务是最好的方法。
在shuffle步骤中,Map器和还原器之间传输的数据量的问题无疑是一个重要的考虑因素。这就是为什么您希望尽可能多地预先筛选数据,并对数据类型使用适当的编码,以最大限度地减少通过的数据量。

niwlg2el

niwlg2el2#

我认为在map和reduce之间有一个combiner步骤,这就是如何将局部性最大化作为reduce的一个组成部分(至少在概念上),因为它在将数据传递到最终的reducer之前会进行一些“局部”处理。正如唐纳德所提到的,reduce不可能停留在本地。

相关问题