本課主題

  • Spark Worker 原理
  • Worker 启动 Driver 源码鉴赏
  • Worker 启动 Executor 源码鉴赏
  • Worker 与 Master 的交互关系

[引言部份:你希望读者看完这篇博客后有那些启发、学到什么样的知识点]

更新中......

Spark Worker 原理图

Worker 启动 Driver 源码鉴赏

  1. 因为 Worker 中有消息的循环体,可以用来接收消息,接上一章介绍当 Master 把一个 LaunchDriver 发送到 Worker 的时候,Worker 接收这个 LaunchDriver 然后创建一個新的 DriverRunner 实例,我们这里重点研究 LaunchDriver,当启动 Driver 或者是 Executor 的时候,它必需是满足内存的要求的。当实际上不一定会满足 Core 的要求的,也就是说实际分配的 Core 可能比你期待的 Core 多、也有可能比它少 (为什么呢?) 

    在这里首先创建一个 DriverRunner 的实例对象,然后把实例交给 drivers 数据结构 (HashMap[String, DriverRunner]) 来保存信息,这个数据结构很重要,因为在 Worker 下可能启动很多不同的 Executor,你可以理解 DriverRunner 为Driver 进程本身的一个proxy [代理模式],调用它的start( ) 方法并记录一下 coreUsed 和 memoryUsed 的数据。

    Cluster 中的 Driver 失敗的時候,如果 Supervise 為 true,則启动該 Driver 的Worker 會負責重新启动該 Driver;

  2. 在start( )的方法中会创建一个新的进程;具体代码运行顺序:new Thread( ) --> 创建一个本地目录和下载相关的 Jar包 --> launchDriver( ) --> 判断并收集它的状态 --> 再发送给 Worker 一个状态变化的消息。补充说明:Executor 和 ExecutorBackend 是一对一的关系,一个ExecutorBackend进程里面有一个Executor,而在Executor内部它是通过线程池并发处理的方式来处理我们 Spark 提交过来的 Task。Executor 启动后需要向 Driver 注册,具体是注册给 SparkDeploySchedulerBackend实例。

    在本地创建了的一个工作目录

    从 HDFS 上获取相关的依赖包 Jar 到本地,因为你提交程序的时候是提交给Spark集群的。
  3. Worker 是实现RPC通信的,否则别人无法给你发消息的,可以初步看一下类的说明,你会发现它是继承著 ThreadRpcEndPoint (在这里先不深入探讨 RpcEndPoint 的机制,如果想了解可以看点击这篇博客)
  4. 通过Command PrcoessBuilder


  5. 启动Driver e.g. launchDriver


    DriverRunner 启动進程是通過 ProcessBuilder 中的 process.get.waitFor 來完成的。

当Driver 的状态改变的时候

  1. Worker 接收 DriverStatedChanged 信息



    然后把信息发送给Master

Master 收到 Worker 发送过来的 Driver状态信息

  1. 判断Driver的状态然后把 ERROR、FINISHED、KILLED 和 FAILED 的 driver 删取掉

Worker 启动 Executor 源码鉴赏

  1. Worker 收到 LaunchExecutor 的信息



当Executor 的状态改变的时候

  1. 向 Worker 发送一个 ExecutorStatedChange 的信息

    在Worker 中收到这个信息后调用 handleExecutorStateChanged 方法

Master 收到 Worker 发送过来的 Executor 状态信息

  1. Master 收到 Worker 的发送的 ExecutorStateChanged 信息


Worker 与 Master 的交互关系

[总结部份]

更新中......

参考资料

资料来源来至 DT大数据梦工厂 大数据传奇行动 第32课:Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等

Spark源码图片取自于 Spark 1.6.0版本

[Spark内核] 第32课:Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等的更多相关文章

  1. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等

    本课主题 Spark Worker 原理 Worker 启动 Driver 源码鉴赏 Worker 启动 Executor 源码鉴赏 Worker 与 Master 的交互关系 Spark Worke ...

  2. [Spark内核] 第40课:CacheManager彻底解密:CacheManager运行原理流程图和源码详解

    本课主题 CacheManager 运行原理图 CacheManager 源码解析 CacheManager 运行原理图 [下图是CacheManager的运行原理图] 首先 RDD 是通过 iter ...

  3. [Spark内核] 第28课:Spark天堂之门解密

    本課主題 什么是 Spark 的天堂之门 Spark 天堂之门到底在那里 Spark 天堂之门源码鉴赏 引言 我说的 Spark 天堂之门就是SparkContext,这篇文章会从 SparkCont ...

  4. [Spark内核] 第29课:Master HA彻底解密

    本课主题 Master HA 解析 Master HA 解析源码分享 [引言部份:你希望读者看完这篇博客后有那些启发.学到什么样的知识点] 更新中...... Master HA 解析 生产环境下一般 ...

  5. [Spark内核] 第30课:Master的注册机制和状态管理解密

    本課主題 Master 接收 Worker, Driver, Application Master 处理 Driver 狀态变换 Master 处理 Executor 狀态变换 [引言部份:你希望读者 ...

  6. [Spark内核] 第31课:Spark资源调度分配内幕天机彻底解密:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结

    本課主題 Master 资源调度的源码鉴赏 [引言部份:你希望读者看完这篇博客后有那些启发.学到什么样的知识点] 更新中...... 资源调度管理 任务调度与资源是通过 DAGScheduler.Ta ...

  7. [Spark内核] 第33课:Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕

    本課主題 Spark Executor 工作原理图 ExecutorBackend 注册源码鉴赏和 Executor 实例化内幕 Executor 具体是如何工作的 [引言部份:你希望读者看完这篇博客 ...

  8. petite-vue源码剖析-ref的工作原理

    ref内部的工作原理十分简单,其实就是将指令ref.:ref或v-bind:ref标识的元素实例存储到当前作用域的$refs对象中,那么我们就可以通过this.$refs获取对应的元素实例.但由于作用 ...

  9. [Spark内核] 第38课:BlockManager架构原理、运行流程图和源码解密

    本课主题 BlockManager 运行實例 BlockManager 原理流程图 BlockManager 源码解析 引言 BlockManager 是管理整个Spark运行时的数据读写的,当然也包 ...

随机推荐

  1. QGIS1.8.0的编译

    很早就关注QGIS了,关于它的编译,也尝试了好几次,但都没有成功.在要放弃的时候,再尝试了一回,完全按照他的intall指导.终于成功. 择其要点而言,就是要按部就班,不能偷工减料.想要成功编译,请按 ...

  2. 二叉树的递归遍历 Tree UVa548

    题意:给一棵点带权的二叉树的中序和后序遍历,找一个叶子使得他到根的路径上的权值的和最小,如果多解,那该叶子本身的权值应该最小 解题思路:1.用getline()输入整行字符,然后用stringstre ...

  3. HDU 4911 Inversion 树状数组求逆序数对

    显然每次交换都能降低1 所以求出逆序数对数,然后-=k就好了.. . _(:зゝ∠)_ #include<stdio.h> #include<string.h> #includ ...

  4. 【打CF,学算法——三星级】Codeforces Round #313 (Div. 2) C. Gerald&#39;s Hexagon

    [CF简单介绍] 提交链接:http://codeforces.com/contest/560/problem/C 题面: C. Gerald's Hexagon time limit per tes ...

  5. Woody的Python学习笔记1

    Python 是一种解释性语言:这意味着开发过程中省去了编译这个环节,类似于PHP\Perl. Python 是交互式语言:这意味着你能够在一个python提示符,直接互动运行写你的程序. Pytho ...

  6. CentOS7给终端配置快捷键【转发】

    1.打开Applications,选择System Tools 2.选择Setting进入如下面界面,选择Keyboard 3.选择Keyboard,进入如下面界面,再点击Shortcuts 4.再点 ...

  7. 【Java入门提高篇】Day11 Java代理——JDK动态代理

    今天来看看Java的另一种代理方式--JDK动态代理 我们之前所介绍的代理方式叫静态代理,也就是静态的生成代理对象,而动态代理则是在运行时创建代理对象.动态代理有更强大的拦截请求功能,因为可以获得类的 ...

  8. 此地址使用了一个通常用于网络浏览以外目的的端口。出于安全原因,Firefox 取消了该请求。

    火狐无法访问本机IIS部署的网站,弹出:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求 的解决办法 关于火狐浏览器访问本机IIS部署的网站弹出"此 ...

  9. linux系统下安装单台Redis

    注意:搭建redis前一定要安装gcc redis安装方式一 1.安装gcc命令:yum install -y gcc #安装gcc [root@localhost src]# yum install ...

  10. MVC+EF 入门教程(三)

    一.前言 上一节,我们将了生成数据库,那么这张我就将操作设计库. 二.在 Aplication 定义服务 在 Application 中添加文件夹(Blog)和 操作类(BlogServer).实例如 ...