通俗解释

上节课我们讲了DAGScheduler划分Stage的原理: DAGScheduler调度时会根据​​是否需要经过Shuffle过程将Job划分为多个Stage​​。

Shuffle就这么重要?

正是由于Shuffle的计算几乎需要消耗所有类型的硬件资源,比如CPU、内存、磁盘与网络,在绝大多数的Spark作业中,Shuffle往往是作业执行性能的瓶颈。


Shuffle的本质就是数据重组分发的过程。


【Spark重点难点】你以为的Shuffle和真正的Shuffle_python Shuffle的过程

有了上图的形状分类的直观对比,我们现在就可以直接给 Shuffle 下一个正式的定义了。


集群范围内跨节点、跨进程的数据分发。


上图中在做形状分类时,集群会需要大量资源进行磁盘和网络的I/O。在DAG的计算链条中,Shuffle环节的执行性能往往是最差的。

原理

我们用Word Count的例子来做说明。在这个示例中,引入Shuffle操作的是reduceByKey算子:

line.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).collect().foreach(println)

更多文章请关注《万象专栏》