到目前为止,我所阅读的所有书籍和博客都没有提供有关减少任务分配的大量信息。看起来可用插槽的reduce任务分配是随机。
这没有意义,因为在不考虑数据(地图)地点违背hadoop设计原则的情况下跨网络改组数据。
同一文件中的块很可能(不是确定的可能)放在同一个机架或附近的机架中。因此,这些拆分/块的映射任务也将在这些机架中(大多数时候)。
如果这是一种可能的情况,为什么不尝试将reduce任务分配给与map任务相同的rack / s中的插槽?
这不会改善1000+节点集群的性能吗?特别是当输入是序列或映射文件时。
任何人都可以确认随机放置的减速器是否正确(最终版本书如此说明)?如果是的话,为什么做出这个决定?如果我错了?然后是如何分配减速器的逻辑......链接到一些文档解释逻辑也会很好。
提前多多感谢。
阿伦
答案 0 :(得分:2)
无法提供减少任务“数据位置”。 每个reducer都会从每个映射器中获取数据(而不是像您所说的文件或块)。这是因为每个映射器都可能写入一个密钥,该密钥将转到任意数量的reducer(有关更多信息,请查看Partitioner)。因此,对于1000个节点,您可以做的最好的事情是平均将1/1000的数据放在本地,因此随机分配reduce任务是您可以做的最好的。
关于在随机播放步骤中映射器和缩减器之间的数据量的关注绝对是一个重要的考虑因素。这就是为什么你想要尽可能地预先过滤并对数据类型使用适当的编码来最小化通过的数据量。
答案 1 :(得分:1)
我认为在map和reduce之间有一个组合器步骤,你是如何尝试最大化局部性作为reduce的一个组成部分(至少在概念上),因为它在将数据传递到最终的reducer之前进行了一些“局部”处理。正如唐纳德所说,减少是不可能留在当地的。