2017-04-04 21 views
5

我想了解一个MapReduce程序。在这样做的时候,我注意到在任务完成后,减少任务几乎立即开始执行。现在,这是令人惊讶的,因为那里的减少任务使用按键分组的数据,这意味着在其间进行了混洗/排序步骤。这种可能发生的唯一方式是如果洗牌是与地图平行进行的。其次,如果洗牌确实是与映射并行完成的,那么Apache Spark中的洗牌是什么?可以通过按键和/或排序进行映射和分组吗?MapReduce程序中的洗牌步骤是否与Mapping并行运行?

+0

非常简短的回答(过短,正常的回答):你可以看到洗牌的新阶段Spark的DAG。新阶段=新洗牌,可能除了少数例外 –

+0

为mapReduce部分的问题,你可能会发现这个帖子有帮助:http://stackoverflow.com/questions/22141631/what-is-the-purpose-of-shuffling-和排序相位内式减速器中-MAP-减少/ 22169760#22169760 – vefthym

回答

5

Hadoop的MapReduce的不只是映射和降低阶段有像组合的额外步骤(地图侧减少),并合并,如下图所示(从http://www.bodhtree.com/blog/2012/10/18/ever-wondered-what-happens-between-map-and-reduce/截取) source: http://www.bodhtree.com/blog/2012/10/18/ever-wondered-what-happens-between-map-and-reduce/ 虽然地图仍在运行和作为它们发射键这些键可以被路由和合并,并且通过时间映射完成一些减少桶所需的所有信息可能已经被处理并准备减少。

Spark构建一个处理阶段所需阶段的DAG(直接非循环图),并将它们分组为需要在节点之间进行数据混洗的阶段。与在映射过程中推送数据的Hadoop不同,火花减速器只能在开始运行时执行数据(另一方面,Spark试图在内存中运行更多(与磁盘相比)并使用DAG来处理迭代处理更好)

阿列克谢Grishchenko有星火洗牌here的一个很好的解释(注意,如星火的2只排序洗牌存在)