Spark任务调度
在Spark的任务中,由Driver进行调度,这个工作包含:逻辑DAG产生、分区DAG产生、Task划分、将Task分配给Executor并监控其工作
- Driver被构建出来
- 构建执行环境入口对象SparkContext
- 基于DAG调度器(DAG Scheduler)构建逻辑Task分配
- 基于Task调度器(Task Scheduler)将逻辑Task分配到各个Executor上干活,并监控它们
- Worder(Executor)被Task Scheduler管理监控,听从它们的指令干活,并定期汇报进度
其中1,2,3,4都是Driver的工作,5是Worker的工作
Driver内的两个组件
DAG调度器:将逻辑的DAG图进行处理,最终得到逻辑上的Task划分
Task调度器:基于DAG Scheduler的产生,来规划这些逻辑的Task,应该在哪些物理的Executor上运行,以及监控管理它们的运行。
Spark中任务运行的层级关系梳理
- 一个Spark环境可以运行多个Application
- 一个代码运行起来,会成为一个Application
- Application内部可以有多个Job
- 每个Job由一个Action产生,并且每个Job有自己的DAG执行图
- 一个Job的DAG图,会基于宽窄依赖划分不同的阶段
- 不同阶段内基于分区数量,形成多个并行的内存迭代管道
- 每一个内存迭代管道形成一个Task(DAG调度器划分将Job内划分出具体的task任务,一个Job被划分出来的task在逻辑上称之为这个Job的taskset)