Scheduler模块详解

本文详细解析了Spark的任务调度机制,包括DAGScheduler和TaskScheduler的职责,SchedulerBackend的角色,以及Stage划分、Task生成和任务调度的具体流程。还介绍了Task运行结果的处理策略,如Executor回传计算结果给Driver的策略。
摘要由CSDN通过智能技术生成

2.1整体架构:

任务调度的两大模块:DAGScheduler(负责划分为不同阶段)和TaskScheduler(将不同阶段的TaskSet提交到集群中的Executor),Executor执行后的结果返回给Driver

2.2Scheduler的实现:

1)org.apache.spark.scheduler.DAGScheduler

2)org.apache.spark.scheduler.SchedulerBackend(trait)

分配当前可用的资源,具体就是向当前等待分配计算资源的Task分配计算资源(Executor),并且在分配的Executor上启动Task,完成计算的调度,org.apache.spark.scheduler.CoarseGrainedSchedulerBackend,YARN,Standalone,Mesos都是基于它并加入了自身的逻辑,

3)org.apache.spark.scheduler.TaskScheduler(trait):调度任务,即从DAGScheduler接收不同Stage的任务,并提交到不同的Executor,“慢任务”处理机制。

 

org.apache.spark.scheduler.SchedulerBackend#reviewOffers调用场景:

1)有新任务提交时

2)有任务执行失败时

3)计算节点(Executor不可用)时

4)某些任务执行过慢而需要为其重新分配资源时

 

SchedulerBackend与应用选择的Deploy Mode有关(部署方式包括local,master,yarn,mesos),SchedulerBackend->TaskScheduler(oneto one)

 

任务调度逻辑图:

Client端:

1)生成Job(Application执行Action算子,封装Job)

2)DAGScheduler划分多个Stage(ShufferMapStage和ResulStage,根据RDD之间的宽依赖(父RDD的partition对应于多个子RDD的partition))

3)DAGScheduler提交Stage

4)DAGScheduler为需要计算的Partition生成TaskSet

5)TaskScheduler提交计算任务

6)调度器SchedulableBuilder调度任务

7)TaskScheduler为任务分配资源

8)SchedulerBackend将任务提交到Executor运行

4.2 DAGScheduler实现详解

DAGScheduler划分的不同Stage的每个Partition上执行的Task逻辑完全相同,并封装成相应的TaskSet

4.2.1 DAGScheduler和TaskScheduler的创建

taskSch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值