开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:Spark 原理_运行过程_Job 和 Stage 的关系】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/689/detail/12026
Spark 原理_运行过程_Job 和 Stage 的关系
内容简介
一、Job 的切分
二、Stage 的执行顺序
接下来我们继续学习概念上的内容,上节已经学习了 job 是什么,有什么,在本节主要学习 job 和 stage 的关系,一个 job 中可以有多个 stage。
一、Job 的切分
Job 是一个最大的调度单位,也就是说 DAGscheduler 会首先创建一个 job 的相关信息,后去调度 job,但是没办法直接调度 job,比如说现在要做一盘手撕包菜,不可能直接去炒一整颗包材,要切好撕碎,再去炒。
1.为什么 job 需要切分?
Job 太大,要把 job 拆开,拆成多个 stage,一个 job 中可以有多个 stage。
2.如何切分?
创建一个 stage,从后向前回溯 RDD,遇到 shuffle 依赖就结束 stage,后创建新的 stage 继续回溯。
二、执行顺序
有两个 stage,这两个 stage 的运行关系间是串行,stage1 计算完毕,才能计算 stage0,中间有 shuffle 操作,所以只有前面 stage 产生结果后,再去获取结果,所以后面阶段的 rdd,需要依赖前面阶段的计算 ,所以两个 stage 不可能同时执行,然而两者间要先执行 stage1,上节的4040网站的 stage 划分不同,是因为事先将第一个 stage 放到集群中执行的,再去调度第二个 stage,所以名字会出现混乱
在图中,stage0 的计算需要依赖 stage1 的数据,因为 reduceRDD 中一个分区可能需要多个 tupleRDD 的分区的数据,所以 tupleRDD 必须先计算完,所以,应该在逻辑图中自左向右执行 stage,不能同时执行
总结 Job 和 stage 的关系:
1.一个 job 中可以有多个 stage
2.Stage 之间是串行的
3.左侧的接近起始的 stage 最先执行,从左到右执行