通俗解释
上节课我们讲了DAGScheduler划分Stage的原理: DAGScheduler调度时会根据是否需要经过Shuffle过程将Job划分为多个Stage。
Shuffle就这么重要?
正是由于Shuffle的计算几乎需要消耗所有类型的硬件资源,比如CPU、内存、磁盘与网络,在绝大多数的Spark作业中,Shuffle往往是作业执行性能的瓶颈。
Shuffle的本质就是数据重组分发的过程。
Shuffle的过程
有了上图的形状分类的直观对比,我们现在就可以直接给 Shuffle 下一个正式的定义了。
集群范围内跨节点、跨进程的数据分发。
上图中在做形状分类时,集群会需要大量资源进行磁盘和网络的I/O。在DAG的计算链条中,Shuffle环节的执行性能往往是最差的。
原理
我们用Word Count的例子来做说明。在这个示例中,引入Shuffle操作的是reduceByKey算子:
line.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).collect().foreach(println) 更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv60453