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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值