介绍Spark中的调度系统
整体介绍
如图所示,调度系统主要由DAGScheduler
和TaskScheduler
构成。
- Spark调度系统对用户提交的Job,根据RDD之间的依赖关系构建DAG
DAGScheduler
负责接收由RDD构成的DAG,将一系列RDD划分到不同的Stage。根据Stage的类型ResultStage
和ShuffleMapStage
,给Stage中未完成的Partition创建不同类型的TaskResultTask
和ShuffleMapTask
。DAGScheduler
将每个Stage中的task以TaskSet
的形式提交给TaskScheduler
继续处理TaskScheduler
负责从DAGScheduler
接收TaskSet
,创建TaskSetManager
对TaskSet
进行管理,并将此TaskSetManager
添加到调度池中,最后将对Task的调度交给SchedulerBackend
处理。SchedulerBackend
首先申请TaskScheduler
,按照Task调度算法对调度池中的所有TaskSetManager
进行排序,然后对TaskSet
按照最大本地性原则分配资源,最后在各个分配的节点上运行TaskSet
中的Task。使用集群管理器分配资源与任务调度,对于失败的任务还会有一定的重试与容错机制- 执行任务,并将任务中间结果和最终结果存入存储体系
REFERENCE
- Spark内核设计的艺术:架构设计与实现
文档信息
- 本文作者:wzx
- 本文链接:https://masterwangzx.com/2020/09/14/schedule-overview/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)