工具环境
- Intellij Idea 2018.03
- spark3.0.0
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
概述
RDD 任务切分中间分为:Application、Job、Stage 和 Task
- Application(应用程序):初始化一个 SparkContext 即生成一个Application;整个程序即为一个Application,代码中setAppName是为主程序起名字
- Job(作业):一个Action(行动算子) 算子就会生成一个Job;
- Stage:Stage 等于宽依赖(ShuffleDependency)的个数加 1;
- Task:一个 Stage 阶段中,最后一个RDD 的分区个数就是Task 的个数。
注意:Application->Job->Stage->Task 每一层都是 1 对 n 的关系。
- 一个应用程序Application中包含多个行动算子,即包含多个作业Job
- 一个作业中包含多个shuffle依赖,即包含多个阶段Stage
- 一个阶段的最后一个RDD会有多个分区,即包含多个Task
RDD阶段划分
核心代码
private[scheduler] def getShuffleDependencies(
rdd: RDD[_]): HashSet[ShuffleDependency[_, _, _]] = {
val parents = new HashSet[ShuffleDependency[_, _, _]]
val visited = new HashSet