目录
创建SchedulerBackend的TaskScheduler方法
在【Spark内核源码】SparkContext中的组件和初始化 已经介绍了Spark初始化时是如何执行的,都创建了哪些组件。这些组件具体技术细节后面会慢慢的说,而针对SparkContext,里面还有一些方法,值得大家品一品。
创建SchedulerBackend的TaskScheduler方法
在SparkContext初始化中有这么一段代码执行了SparkContext.createTaskScheduler方法,用于创建SchedulerBackend和TaskScheduler。TaskScheduler是Spark的重要组成部分,其进行两级调度,第一级调度是负责向集群管理器发送请求给应用程序分配并运行Executor,第二级调度是给具体任务分配Executor并执行相关任务。
createTaskScheduler方法有点长,需要慢慢分析。
首先createTaskScheduler方法需要传入三个参数,SparkContext,master和deployMode,从调用createTaskScheduler方法时可以看出,SparkContext就是使用的本身,"sc = this",master是配置文件中key=“spark.master”所对应的值,deployMode是配置文件中key=“spark.submit.deployMode”所对应的值。返回值类型是Tuple,第一个元素是SchedulerBackend,第二个元素是TaskScheduler。
接着就是对master进行模式匹配
如果master与local匹配:
分别创建TaskSchedulerImpl和LocalSchedulerBack