本課主題

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

 

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

更新中......

 

 

Spark Worker 原理图

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

 

Worker 启动 Driver 源码鉴赏

  1. 因为 Worker 中有消息的循环体,可以用来接收消息,接上一章介绍当 Master 把一个 LaunchDriver 发送到 Worker 的时候,Worker 接收这个 LaunchDriver 然后创建一個新的 DriverRunner 实例,我们这里重点研究 LaunchDriver,当启动 Driver 或者是 Executor 的时候,它必需是满足内存的要求的。当实际上不一定会满足 Core 的要求的,也就是说实际分配的 Core 可能比你期待的 Core 多、也有可能比它少 (为什么呢?)
  2. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_数据结构_02

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

  5. Cluster 中的 Driver 失敗的時候,如果 Supervise 為 true,則启动該 Driver 的Worker 會負責重新启动該 Driver;
  6. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_spark_04


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

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

  10. 在本地创建了的一个工作目录
  11. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_spark_07

  12. 从 HDFS 上获取相关的依赖包 Jar 到本地,因为你提交程序的时候是提交给Spark集群的。
  13. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_数据结构_08

  14. Worker 是实现RPC通信的,否则别人无法给你发消息的,可以初步看一下类的说明,你会发现它是继承著 ThreadRpcEndPoint (在这里先不深入探讨 RpcEndPoint 的机制,如果想了解可以看点击这篇博客)
  15. 通过Command PrcoessBuilder
  16. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_sed_09


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


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

  19. 启动Drivere.g. launchDriver
  20. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_spark_12


  21. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_数据结构_13

  22. DriverRunner 启动進程是通過 ProcessBuilder 中的 process.get.waitFor 來完成的。
  23. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_sed_14

当Driver 的状态改变的时候

  1. Worker 接收 DriverStatedChanged 信息
  2. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_数据结构_15


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


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

  5. 然后把信息发送给Master
  6. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_sed_18

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

  1. 判断Driver的状态然后把 ERROR、FINISHED、KILLED 和 FAILED 的 driver 删取掉
  2. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_数据结构_19


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

 

Worker 启动 Executor 源码鉴赏

  1. Worker 收到 LaunchExecutor 的信息
  2. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_数据结构_21

    Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_数据结构_22


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


  4. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_数据结构_24


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

 

当Executor 的状态改变的时候

  1. 向 Worker 发送一个 ExecutorStatedChange 的信息
  2. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_spark_26

  3. 在Worker 中收到这个信息后调用 handleExecutorStateChanged 方法
  4. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_数据结构_27


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

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

  1. Master 收到 Worker 的发送的 ExecutorStateChanged 信息
  2. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_sed_29


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


  4. Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等_数据结构_31