Spark源码分析之Scheduler模块(TaskScheduler)

本文详细探讨了Spark中的TaskScheduler模块,包括TaskSchedulerImpl的职责,如处理shuffle输出丢失、straggle任务重试及TaskSetManager的管理。还介绍了TaskScheduler与SchedulerBackend的关系,如Local、Spark集群、Yarn-cluster和Yarn-client模式下的不同组合。SchedulerBackend作为可插拔组件,负责与资源调度系统适配,与Worker节点通信。TaskSchedulerImpl启动时会调用SchedulerBackend的start方法,提交任务时通过backend的reviveOffers()方法。资源申请过程涉及executor的加入、Task的分散和调度。Task执行后,statusUpdate跟踪任务状态并处理结果。调度模式的选择在TaskSchedulerImpl初始化时完成,schedulableBuilder提供FIFO和FAIR调度模式。
摘要由CSDN通过智能技术生成
DAGScheduler将任务提交到TaskScheduler之后,接下来由TaskScheduler负责任务的调度。

TaskScheduler是一个trait(接口类),它的实现类是TaskSchedulerImpl。具体内容包括:
1、出现shuffle输出lost要报告fetch failed错误
2、碰到straggle任务需要放到别的节点上重试
3、为每个TaskSet维护一个TaskSetManager
TaskScheduler与其他类之间的关系如下图中所示:


SparkContext初始化的同时会创建TaskScheduler和DAGScheduler。也就是说TaskScheduler为某个特定的SparkContext调度task。

SparkContext创建过程中会调用createTaskScheduler函数来启动TaskScheduler任务调度器:



createTaskScheduler函数中,TaskScheduler会根据部署方式而选择不同的SchedulerBackend来处理。针对不同的部署方式会有不同的TaskScheduler与SchedulerBackend进行组合:
     Local模式:TaskSchedulerImpl+LocalBackend
     Spark集群模式:TaskSchedulerImpl+SparkDepolySchedulerBackend
     Yarn-cluster模式:YarnClusterScheduler+CoarseGrainedSchedulerBackend
     Yarn-Client模式:YarnClientClusterScheduler+YarnClientSchedulerBackend

SchedulerBackend是Spark中一个可插拔组件。按照字面意思,它就是调度器的一个后台服务或者实现,其主要作用就是在物理机器或者说worker就绪后,能够提供其上的资源并将tasks加载到那些机器或者worker上。

以Standalone模式为例,backend根据不同的部署方式实例化,后又作为scheduler对象的一个成员变量对scheduler调用initialize函数:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值