zoukankan      html  css  js  c++  java
  • Spark学习笔记(3)--SparkContext部分源码分析

    SparkContext源码分析

    在任何Spark程序中,必须要创建一个SparkContext,在SparkContext中,最主要的就是创建了TaskScheduler和DAGScheduler,以及SparkUI

    ...
    // Create and start the scheduler
    val (sched, ts) = SparkContext.createTaskScheduler(this, master, deployMode) // 创建taskScheduler
    _schedulerBackend = sched
    _taskScheduler = ts
    _dagScheduler = new DAGScheduler(this) // 创建DAGScheduler
    ...
    
    // 在创建SparkContext的时候,会执行val (sched, ts) = SparkContext.createTaskScheduler(this, master, deployMode)
    private def createTaskScheduler(
          sc: SparkContext,
          master: String,
          deployMode: String): (SchedulerBackend, TaskScheduler) = {
        import SparkMasterRegex._
    
        // When running locally, don't try to re-execute tasks on failure.
        val MAX_LOCAL_TASK_FAILURES = 1
    
        master match { // 匹配master,我们这里主要以Standlone为主,所以,就只看SPARK_REGEX
          ...
    
          case SPARK_REGEX(sparkUrl) => // Standlone模式
            val scheduler = new TaskSchedulerImpl(sc) // 创建TaskScheduler
            val masterUrls = sparkUrl.split(",").map("spark://" + _)
            // 创建StandaloneSchedulerBackend
            val backend = new StandaloneSchedulerBackend(scheduler, sc, masterUrls) 
            scheduler.initialize(backend) // 初始化taskScheduler, 主要是赋值backend以及根据调度方法创建调度池
            (backend, scheduler)
    
          ...
        }
      }
    

    图解如下(其中的SparkDeploySchedulerBackend是1.0的名字,2.0就是StandaloneSchedulerBackend):

  • 相关阅读:
    ASP.NET常见命名空间及其功能描述
    C#中的里氏替换原则
    Java中的split函数的用法
    shader之旅-7-平面阴影(planar shadow)
    OpenGL三角形的双面不同颜色的绘制
    MATLAB squeeze 函数
    matlab 常用函数汇总
    第一个OpenGL程序
    Github 留言系统
    Paging 简单自由的分页生成器
  • 原文地址:https://www.cnblogs.com/yangtong/p/7119650.html
Copyright © 2011-2022 走看看