分享

Spark源码分析(三):TaskScheduler创建

本帖最后由 pig2 于 2014-10-4 23:47 编辑
阅读导读:
1.TaskScheduler的工作原理是什么?
2.TaskScheduler与SchedulerBackend组合方式有哪些?
3.SparkDepolySchedulerBackend、TaskSchedulerImpl这些类的作用是什么?


4.gif

在SparkContext创建过程中会调用createTaskScheduler函数来启动TaskScheduler任务调度器,本文就详细分析TaskScheduler的工作原理:
TaskScheduler会根据部署方式而选择不同的SchedulerBackend来处理
ts1.jpg

下图展示了TaskScheduler、TaskSchedulerImpl、SchedulerBackend等任务调度相关类之间的关系
针对不同部署方式会有不同的TaskScheduler与SchedulerBackend进行组合:
 Local模式:TaskSchedulerImpl + LocalBackend
   Spark集群模式:TaskSchedulerImpl + SparkDepolySchedulerBackend
   Yarn-Cluster模式:YarnClusterScheduler + CoarseGrainedSchedulerBackend
   Yarn-Client模式:YarnClientClusterScheduler + YarnClientSchedulerBackend
   TaskScheduler类负责任务调度资源的分配,SchedulerBackend负责与Master、Worker通信收集Worker上分配给该应用使用的资源情况。
ts2.png

   下面以Spark集群模式为例,分析在TaskSchedulerImpl与SparkDepolySchedulerBackend类中的具体操作
   一个典型的任务调度模块主要功能就是获取集群资源信息,然后根据调度策略为任务分配资源,TaskSchedulermpl也是这个工作原理,分为资源收集与资源分配:
1、资源信息收集
 SparkDepolySchedulerBackend类就是专门负责收集为Application分配的Worker的资源信息的,在它的父类CoarseGrainedSchedulerBackend中的DriverActor就是与Worker通信的Actor。根据Spark源码分析(一)-Standalone启动过程文中介绍的Worker启动后会向Driver发送RegisterExecutor消息,此消息中就包含了Executor为Application分配的计算资源信息,而接收该消息的Actor也正是DriverActor。
ts3.png

2、资源分配
TaskSchedulerImpl类就是负责为Task分配资源的。在CoarseGrainedSchedulerBackend获取到可用资源后就会通过makeOffers方法通知TaskSchedulerImpl对资源进行分配,TaskSchedulerImpl的resourceOffers方法就是负责为Task分配计算资源的,在为Task分配好资源后又会通过lauchTasks方法发送LaunchTask消息通知Worker上的Executor执行Task
ts4.png

 最后,总结一下TaskScheduler相关知识。
TaskScheduler是在Application执行过程中,为它进行任务调度的,是属于Driver侧的。对应于一个Application就会
有一个TaskScheduler,TaskScheduler和Application是一一对应的。TaskScheduler对资源的控制也比较鲁棒(所以会取名CoarseGrainedSchedulerBackend),一个Application申请Worker的计算资源,只要Application不结束就会一直被占有。

相关源码:


Spark源码分析(二):SparkContext创建

Spark源码分析(一)-Standalone启动过程


没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条