目录
前言
以前,Spark 有3种不同类型的 shuffle 实现。每种实现方式都有他们自己的优缺点。在我们理解 Spark shuffle 之前,需要先熟悉 Spark 的 execution model 和一些基础概念,如:MapReduce、逻辑计划、物理计划、RDD、Partitions、Narrow dependency、wide dependency、Stage、tasks、ShuffleMapStage 和 ResultStage。
1、什么是 Spark shuffle?
要理解 shuffle 是在拿个过程发生的,我们需要回顾一下 Spark 集群是如何进行工作调度的:一般而言, shuffle 会发生在每两个 stage 之间。当 DAGSchduler 依据我们的逻辑计划(RDD Objects,即客户端编写的代码,在Spark Driver 端生成逻辑计划)去生成物理执行计划时,它会将所有通过宽窄依赖链接的 RDD 合并到一个 Stage中。