Spark版本 1.3
Spark源码 Spark.createTaskScheduler TaskScheduler初始化过程 1.// SparkContext中
/**
* Create a task scheduler based on a given master URL.
* Return a 2-tuple of the scheduler backend and the task scheduler.
*/
private def createTaskScheduler(
sc: SparkContext,
master: String): (SchedulerBackend, TaskScheduler) = { // Regular expression used for local[N] and local[*] master formats
// 一些关于模式的变量 这里只列举一个 (local[N] and local[*]);
// 其他的还有 local[N, maxRetries], a Spark cluster of [N, cores, memory] locally,
// Spark deploy clusters, Mesos cluster, Simr cluster
val LOCAL_N_REGEX = """local\[([0-9]+|\*)\]""".r // When running locally, don't try to re-execute tasks on failure.
// 他说本地模式下当任务失败的时候, 不会重试运行任务...
val MAX_LOCAL_TASK_FAILURES = 1 master match {
case "local" =>
... // spark的StandAlone模式
case SPARK_REGEX(sparkUrl) =>
// 创建了一个TaskSchedulerImpl
val scheduler = new TaskSchedulerImpl(sc)
val masterUrls = sparkUrl.split(",").map("spark://" + _)
// 创建了一个SparkDeploySchedulerBackend, 他到底是怎么创建的? 详见下文 1.1
val backend = new SparkDeploySchedulerBackend(scheduler, sc, masterUrls)
// 调用initialize创建调度器 相见下文 1.2
// 下文会查看initialize方法~, 了解TaskScheduler的初始化过程
scheduler.initialize(backend)
(backend, scheduler) case LOCAL_CLUSTER_REGEX(numSlaves, coresPerSlave, memoryPerSlave) =>
...
}
} 1.1 val backend = new SparkDeploySchedulerBackend(scheduler, sc, masterUrls) class SparkDeploySchedulerBackend(
scheduler: TaskSchedulerImpl,
sc: SparkContext,
masters: Array[String])
extends CoarseGrainedSchedulerBackend(scheduler, sc.env.actorSystem) //注意这里传入了一个ActorSystem
with AppClientListener
with Logging {
... override def start() {
// 首先调用父类的start方法来创建DriverActor
// 用于和Executor通信, 将任务发送给Executor
// 详见下文 1.1.1
super.start() // 准备一些参数,以后把这些参数封装到一个对象中,然后将该对象发送给Master
val driverUrl ... // 重要: CoarseGrainedExecutorBackend 这个参数是以后Executor的实现类
// 把任务信息参数封装到 Command
val command = Command("org.apache.spark.executor.CoarseGrainedExecutorBackend",
args, sc.executorEnvs, classPathEntries ++ testingClassPath, libraryPathEntries, javaOpts) // 最终的封装: 把command 和 任务资源信息 封装到ApplicationDescriptionval
val appDesc = new ApplicationDescription(sc.appName, maxCores, sc.executorMemory, command,
appUIAddress, sc.eventLogDir, sc.eventLogCodec) // 创建一个AppClient, 把ApplicationDescription通过主构造器传进去
client = new AppClient(sc.env.actorSystem, masters, appDesc, this, conf) // 然后调用AppClient的start方法,在start方法中创建了一个ClientActor
// 其中像Master和Worker的actor一样需要preStart像Master注册
// 其用于与Master通信, 用来发送任务信息 详见下文 1.1.2
client.start()
...
} 1.1.1 super.start()
// 调用的是 CoarseGrainedSchedulerBackend.start (粗粒度调度程序后端器)
class CoarseGrainedSchedulerBackend(scheduler: TaskSchedulerImpl, val actorSystem: ActorSystem)
extends ExecutorAllocationClient with SchedulerBackend with Logging{
... override def start() {
...
// (prashant) send conf instead of properties
// 通过创建本粗粒度调度程序后端器时传入的ActorSystem, 在Driver端创建DriverActor
// 其用来和Excutor交互, 将任务发送给Executor
driverActor = actorSystem.actorOf(
Props(new DriverActor(properties)), name = CoarseGrainedSchedulerBackend.ACTOR_NAME)
}
...
} // TaskScheduler的初始化过程, 在TaskSchedulerImpl中他的简介是这么写的

Spark-源码-TaskScheduler初始化过程, ClientActor向Master发送注册任务信息过程的更多相关文章

  1. Spark源码剖析(五):Master原理与源码剖析(下)

    一. 状态改变机制源码分析 在剖析Master核心的资源调度算法之前,让我们先来看看Master的状态改变机制. Driver状态改变  可以看出,一旦Driver状态发生改变,基本没有好事情,后果要 ...

  2. Spark源码分析 – SchedulerBackend

    SchedulerBackend, 两个任务, 申请资源和task执行和管理 对于SparkDeploySchedulerBackend, 基于actor模式, 主要就是启动和管理两个actor De ...

  3. spark 源码分析之四 -- TaskScheduler的创建和启动过程

    在 spark 源码分析之二 -- SparkContext 的初始化过程 中,第 14 步 和 16 步分别描述了 TaskScheduler的 初始化 和 启动过程. 话分两头,先说 TaskSc ...

  4. Spark源码分析(一)-Standalone启动过程

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3858065.html 为了更深入的了解spark,现开始对spark源码进行分析,本系列文章以spark ...

  5. Spark 源码解析:TaskScheduler的任务提交和task最佳位置算法

    上篇文章<  Spark 源码解析 : DAGScheduler中的DAG划分与提交 >介绍了DAGScheduler的Stage划分算法. 本文继续分析Stage被封装成TaskSet, ...

  6. spark源码阅读--SparkContext启动过程

    ##SparkContext启动过程 基于spark 2.1.0  scala 2.11.8 spark源码的体系结构实在是很庞大,从使用spark-submit脚本提交任务,到向yarn申请容器,启 ...

  7. Spark源码系列(一)spark-submit提交作业过程

    前言 折腾了很久,终于开始学习Spark的源码了,第一篇我打算讲一下Spark作业的提交过程. 这个是Spark的App运行图,它通过一个Driver来和集群通信,集群负责作业的分配.今天我要讲的是如 ...

  8. Apache Spark源码走读之21 -- WEB UI和Metrics初始化及数据更新过程分析

    欢迎转载,转载请注明出处,徽沪一郎. 概要 WEB UI和Metrics子系统为外部观察监测Spark内部运行情况提供了必要的窗口,本文将简略的过一下其内部代码实现. WEB UI 先上图感受一下sp ...

  9. Spark源码分析(三)-TaskScheduler创建

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3879151.html 在SparkContext创建过程中会调用createTaskScheduler函 ...

随机推荐

  1. Unity Android 真机调试

    官方文档 https://docs.unity3d.com/Manual/AttachingMonoDevelopDebuggerToAnAndroidDevice.html 然而 按照官方文档 很多 ...

  2. (阿里巴巴)数据库连接池——Druid (未完持续更新)

    Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色的性能,也 ...

  3. centos apache 腾讯云ssl证书配置

    首先向证书机构申请https证书,会得到证书和私钥,这里我以腾讯云证书安装为例(非常简单) 分两步走 1.申请 点击腾讯云控制台->产品模块下的ssl证书管理->点击申请证书(免费的,不要 ...

  4. Python中深浅拷贝 垃圾回收与 super继承(六)

    1 python拷贝 深拷贝,浅拷贝 与引用三者的区别 import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy ...

  5. FastDFS 初始

    FastDFS 详细介绍 FastDFS是一个开源的分布式文件系统,她对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为 ...

  6. npm 安装axios和使用增删改查

    1:安装axios(建议安装淘宝镜像) npm install axios 2:项目导入 npm install --save axios vue-axios 3:页面导入 import axios ...

  7. python:类的基本特征------继承、多态与封装

    一.继承 1,什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 cl ...

  8. 清除IE地址栏中的历史网址

    实现效果: 知识运用: RegistryKey类的GetValueNames和DeleteValue方法 实现代码: private void button1_Click(object sender, ...

  9. c#主窗体以及副窗体弹出

    在program.cs中,Form1的位置就是主窗体的位置(主窗体特征:关闭窗体应用程序结束) 弹出副窗口(点击按钮弹出窗口) Close为关闭窗口(关闭对应对象,需要先自己new一个) this.C ...

  10. ES6笔记01

    一.ECMAScript 6 ECMAScript 6.0,简称ES6,第一个版本是在2015年6月进行发布,所以也称之为<ECMAScript 2015 标准>(简称 ES2015). ...