4.3 Spark Task 级别调度

Spark Task 的调度是由TaskScheduler来完成,由前文可知,DAGSchedulerStage打包到TaskSet交给TaskSchedulerTaskScheduler会将TaskSet封装为TaskSetManager加入到调度队列中,

TaskSetManager结构如下图所示。

`TaskSetManager`负责监控管理同一个`Stage`中的`Tasks`,`TaskScheduler`就是以`TaskSetManager`为单元来调度任务。

前面也提到,TaskScheduler初始化后会启动SchedulerBackend,它负责跟外界打交道,接收Executor的注册信息,并维护Executor的状态,所以说SchedulerBackend是管“粮食”的,同时它在启动后会定期地去“询问”TaskScheduler有没有任务要运行,也就是说,它会定期地“问”TaskScheduler“我有这么余量,你要不要啊”,TaskSchedulerSchedulerBackend“问”它的时候,会从调度队列中按照指定的调度策略选择TaskSetManager去调度运行,大致方法调用流程如下图所示:

TaskSetManager加入rootPool调度池中之后,调用SchedulerBackendriviveOffers方法给driverEndpoint发送ReviveOffer消息;driverEndpoint收到ReviveOffer消息后调用makeOffers方法,过滤出活跃状态的Executor(这些Executor都是任务启动时反向注册到DriverExecutor),然后将Executor封装成WorkerOffer对象;准备好计算资源(WorkerOffer)后,taskScheduler基于这些资源调用resourceOfferExecutor上分配task

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-06-11 12:34:39

results matching ""

    No results matching ""