spark源码学习(二):sparkContext的初始化分析(二)

来源:互联网 发布:如何让安卓手机连入mac 编辑:程序博客网 时间:2024/06/10 00:22

                    spark源码学习:sparkContext的初始化分析(二)

    

       spark的sparkContext初始化中的sparkEnv相关的概念以及重要的组成部分在上一部分简单的介绍 ,这篇简单的介绍一下和DAGScheduler,taskSetManager,SchedulerBackend,taskScheduler等等一些和sparkContext初始化相关的概念,这里讨论的是重中之重,下面就来大体的来看看。首先看一下最重要最核心的一个片段:



        在上面的一片代码中我们可以看到,首先是SparkContext.createTaskScheduler来创建SchedulerBackend以及TaskScheduler。理解清楚这两个概念极为重要。首先来看看SchedulerBackend,从源码的注释上可以知道Scheduler-Backend仅仅是后台调度系统的一个抽象接口,目前在1.5.2接口有四个实现类。TaskScheduler主要是底层人物调度接口,仅仅是有一个实现类TaskSchedulerImpl。TaskSchedulerImpl就是通过schedulerBackend来在不同的cluster上调度任务,例如可以设置变量isLocal为true来使用lLocalBackend。

       createTaskScheduler方法的两个参数一个sc一个master,master主要就是用来匹配对应的运行模型,例如:


        上面的这个model代表的是standalone模式,SparkDeploySchedulerBackend就是standalone的运行模式。接下来进入initlalize方法看看:


        上面的这个初始化方法就是在taskSchedulerImpl下初始化的,会发现在任务的调度模式中选择了两种调度方式,先进先出和公平调度方法。

        继而开始了taskscheduler的start方法,进入taskSchedluer的run方法,是一个抽象接口,抽象接口的实现task-SchedluerImpl的run方法来看看。backend就是schedulerBackend后台,那么这个start方法是有4个实现的start方法。


        那么就加入loacl模式下的LocalBackend代码:

private[spark] class LocalBackend(    conf: SparkConf,    scheduler: TaskSchedulerImpl,    val totalCores: Int)  extends SchedulerBackend with ExecutorBackend with Logging {  private val appId = "local-" + System.currentTimeMillis  var localEndpoint: RpcEndpointRef = null  override def start()   override def stop()   override def reviveOffers()   override def defaultParallelism()  override def killTask(taskId: Long, executorId: String, interruptThread: Boolean)   override def statusUpdate(taskId: Long, state: TaskState, serializedData: ByteBuffer)   override def applicationId(): String = appId

      这里还有一部分中最关键的DAGScheduler的创建相关的代码,下篇进行价绍。

0 0
原创粉丝点击