MapReduce程序中的shuffle步骤是否与Mapping并行运行?

pyt*_*nic 5 java hadoop scala mapreduce apache-spark

我试图了解MapReduce程序.在这样做时,我注意到在完成所有地图任务后,reduce任务几乎立即开始执行.现在,这是令人惊讶的,因为那里的reduce任务使用按键分组的数据,这意味着在它们之间进行了shuffle/sort步骤.这种情况发生的唯一方法是如果改组是与映射并行完成的.

其次,如果洗牌确实与映射并行完成,那么它与Apache Spark中的相同之处是什么呢?可以通过键和/或排序进行映射和分组并行吗?

Arn*_*-Oz 5

Hadoop的MapReduce不仅仅是map和reduce阶段,还有其他步骤,如合并器(map-side reduce)和合并,如下图所示(摘自http://www.bodhtree.com/blog/2012/10/18/ever-wondered -什么-发生-MAP间-和-减少/) 来源:http://www.bodhtree.com/blog/2012/10/18/ever-wondered-what-happens-between-map-and-reduce/ 虽然映射仍在运行,并且当它们发出密钥时,这些密钥可以被路由和合并,并且通过时间映射完成,一些减少桶所需的所有信息可能已经被处理并准备好减少.

Spark构建了处理所需阶段的DAG(直接非循环图),并将它们分组到需要在节点之间进行混洗的阶段.与在地图期间推送数据的Hadoop不同,火花减少器会拉动数据,因此只有在它们开始运行时才会执行此操作(另一方面,Spark尝试在内存中运行更多(与磁盘相比)并使用DAG处理迭代处理更好)

Alexey Grishchenko 在这里对Spark Shuffle有一个很好的解释(请注意,从Spark 2开始,只存在一个排序洗牌)