码迷,mamicode.com
首页 > 其他好文 > 详细

Spark源码剖析——SparkContext的初始化(五)_创建任务调度器TaskScheduler

时间:2018-07-15 23:21:25      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:属性   create   根据   getter   def   算法   创建   任务调度   schedule   

5. 创建任务调度器TaskScheduler

TaskScheduler也是SparkContext的重要组成部分,负责任务的提交,并且请求集群管理器对任务调度。TaskScheduler也可以看作任务调度的客户端。创建TaskScheduler的代码如下:

技术分享图片

 createTaskScheduler方法会根据master的配置匹配部署模式,创建TaskSchedulerImpl,并生成不同的SchedulerBackend。为了使读者更容易理解Spark的初始化流程,故以local模式为例,master匹配local模式的代码如下:

技术分享图片

5.1 创建TaskSchedulerImpl

TaskSchedulerImpl的构造过程如下:

1) 从SparkConf中读取配置信息,包括每个任务分配的CPU数、调度模式(调度模式由FAIR和FIFO两种,默认为FIFO,可以修改属性spark.scheduler.mode来改变)等。

2) 创建TaskResultGetter,它的作用是通过线程池(Executors.newFixedThreadPool创建的,默认为4个线程,线程名字以task-result-getter开头,线程工厂默认是Executors.defaultThreadFactory)对Worker上的Executor发送的Task的执行结果进行处理。

TaskSchedulerImpl的实现见代码:

技术分享图片

TaskSchedulerImpl的调度模式有FAIR和FIFO两种。任务的最终调度实际都是落实到接口SchedulerBackend的具体实现上的。为方便分析,我们先来看看local模式中SchedulerBackend的实现LocalSchedulerBackend。LocalSchedulerBackend依赖于localEndpoint与RpcEnv进行消息通信。

5.2 TaskSchedulerImpl的初始化

创建完TaskSchedulerImpl和LocalSchedulerBackend后,对TaskSchedulerImpl调用方法initialize进行初始化。以默认的FIFO调度为例,TaskScheduler的初始化过程如下:

1) 使TaskSchedulerImpl持有LocalSchedulerBaskend的引用。

2) 在TaskSchedulerImpl的initialize方法里创建Pool,Pool中缓存了调度队列、调度算法及TaskSetManager集合等信息。

3) 创建FIFOSchedulableBuilder或FairSchedulableBuilder,用来操作Pool中的调度队列。

initialize方法的实现如下:

技术分享图片

Spark源码剖析——SparkContext的初始化(五)_创建任务调度器TaskScheduler

标签:属性   create   根据   getter   def   算法   创建   任务调度   schedule   

原文地址:https://www.cnblogs.com/swordfall/p/9314949.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!