工具环境
- 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任务调度
一个 Spark 应用程序包括 Job、Stage 以及 Task 三个概念:
- Job 是以 Action 方法为界,遇到一个 Action 方法则触发一个 Job;
- Stage 是 Job 的子集,以RDD 宽依赖(即 Shuffle)为界,遇到 Shuffle 做一次划分;
- Task 是 Stage 的子集,以并行度(分区数)来衡量,当前阶段最后一个RDD的分区数是多少,则有多少个 task。
Spark 的任务调度总体来说分两路进行,一路是 Stage 级的调度(由DAGScheduler负责),一路是 Task 级的调度(由TaskScheduler负责)
- Stage级调度- - DAGScheduler
- Task级调度 - - TaskScheduler
- FIFO先来先服务
- FAIR公平调度
- 本地化调度级别
- 失败重试:对于失败的 Task,会记录它失败的次数,如果失败次数还没有超过最大重试次数,那么就把它放回待调度的 T