Spark ----driver executor运行图:

Spark Task 级调度

图 1-1 driver-----executor 运行图

-----TaskSetManager结构图:

Spark Task 级调度

图 1-2 TaskSetManager 结构

 

Spark Task的调度是由TaskScheudler来完成的,DAGScheduler将stage打包到taskSet并交给TaskScheduler,TaskScheduler会将TaskSet分装为TaskManager,加入到调度队列中。

TaskSetManager负责监控同一个stage中的tasks,TaskScheduler是以TaskManager为单元进行调度的。

TaskScheduler初始化之后,SchedulerBackend启动,SchedulerBackend会定时询问TaskScheduler有没有需要执行的task任务,TaskScheduler在SchedulerBackend询问它的时候会从调度队列中按照指定的调度策略选择TaskSetManager去调度运行。

 

 

----大致的方法调用流程如下图:

Spark Task 级调度

 

DAGScheduler划分stage之后将stages分发到TaskScheduler中,此时启动taskScheduler.submitTasks方法。

TaskScheduler中执行流程:

taskScheduler.submitTasks方法被调用提交taskSet,

根据taskSet的数量创建相应的TaskSetManager,

调用schedulableBuilder对象将创建的TaskManager放到TaskSetPool中。

然后就是调用schedulerBackend对象的reviveOffers方法,

此方法内部再调用makeOfficers方法,schedulerBackend查看可用的executor数量,

此时taskScheduler开始调用resourceOffers方法,记录用来执行每个task相应的executor容器,

最后rootPool对象调用getSortedTaskSetQueue方法来找到TaskSetPool中对应的task放到对应的executor中开始执行。

相关文章: