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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liyaohhh/article/details/50738038

                    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的创建相关的代码,下篇进行价绍。

展开阅读全文

没有更多推荐了,返回首页