上篇文章我们剖析了Master的原理和源码,知道了当Master使用资源分配算法将资源分配完成后,就会给对应的Worker发送启动Driver或者Executor的消息,那么Worker收到这些消息后,具体是怎么启动Driver或者Executor的呢?这篇文章就让我们深入剖析一下Worker的原理和源码。

一、启动Driver

  1. Worker接收到了Master发送过来的启动Driver的信息,LaunchDriver函数首先启动一个DriverRunner线程。

worker.actor ! LaunchDriver(driver.id, driver.desc)

 
  
val driver = new DriverRunner(……)

  1. 接着调用DriverRunner的start方法,首先在DriverRunner线程中首先创建Driver的工作目录,下载相关的jar包,封装启动Driver的命令,然后用java的ProcessBuilder启动Driver进程,并在之后对Driver进程进行管理。

driver.start()

 
  
launchDriver(builder, driverDir, driverDesc.supervise)

 
  
runCommandWithRetry(ProcessBuilderLike(builder), initialize, supervise)

 
  
worker ! DriverStateChanged(driverId, state, finalException)

 
  
如果还记得Master状态改变处理机制,那么这里就串起来了

 
  
这里可以看出Drive失败后并没有重启策略

由此可知每一个Driver进程在Worker上都对应了一个DriverRunner线程,该线程负责对Driver的管理

二、启动Executor

  1. Worker接收到了Master发送过来的启动Executor的信息,LaunchExecutor函数首先启动一个ExecutorRunner线程。

worker.actor ! LaunchExecutor(……)

  1. 在ExecutorRunner线程中首先创建Executor的工作目录,下载相关的jar包,封装启动Executor的命令,然后用java的ProcessBuilder启动Executor进程,并在之后对Executor进程进行管理。

manager.start()

 
  
fetchAndRunExecutor()

 
  
worker ! ExecutorStateChanged(appId, execId, state, Some(message), Some(exitCode))

 
  
master ! ExecutorStateChanged(appId, execId, state, message, exitStatus)

 
  
这里可以看出Executor失败后有重启策略,每个Application最大重启次数为10

由此可知每一个Executor进程在Worker上都对应了一个ExecutorRunner线程,该线程负责对Executor的管理

三、总结

千言万语不如一张图!

Spark源码剖析(六):Worker原理与源码剖析的更多相关文章

  1. [Spark内核] 第32课:Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等

    本課主題 Spark Worker 原理 Worker 启动 Driver 源码鉴赏 Worker 启动 Executor 源码鉴赏 Worker 与 Master 的交互关系 [引言部份:你希望读者 ...

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

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

  3. 2,MapReduce原理及源码解读

    MapReduce原理及源码解读 目录 MapReduce原理及源码解读 一.分片 灵魂拷问:为什么要分片? 1.1 对谁分片 1.2 长度是否为0 1.3 是否可以分片 1.4 分片的大小 1.5 ...

  4. Spark源码剖析(七):Job触发流程原理与源码剖析

    引言 我们知道在application中每存在一个action操作就会触发一个job,那么spark底层是怎样触发job的呢?接下来我们用一个wordcount程序来剖析一下job的触发机制. 解析w ...

  5. Spark源码剖析(九):TaskScheduler原理与源码剖析

    接着上期内核源码(六)的最后,DAGSchedule会将每个Job划分一系列stage,然后为每个stage创建一批task(数量与partition数量相同),并计算其运行的最佳位置,最后针对这一批 ...

  6. Dubbo源码剖析六之SPI扩展点的实现之Adaptive功能实现原理

    接Dubbo源码剖析六之SPI扩展点的实现之getExtensionLoader - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)继续分析Adaptive功能实现原理.Adaptive的主 ...

  7. Spark源码剖析(八):stage划分原理与源码剖析

    引言 对于Spark开发人员来说,了解stage的划分算法可以让你知道自己编写的spark application被划分为几个job,每个job被划分为几个stage,每个stage包括了你的哪些代码 ...

  8. spark 源码分析之六--Spark RPC剖析之Dispatcher和Inbox、Outbox剖析

    在上篇 spark 源码分析之五 -- Spark内置RPC机制剖析之一创建NettyRPCEnv 中,涉及到了Diapatcher 内容,未做过多的剖析.本篇来剖析一下它的工作原理. Dispatc ...

  9. spark 源码分析之十--Spark RPC剖析之TransportResponseHandler、TransportRequestHandler和TransportChannelHandler剖析

    spark 源码分析之十--Spark RPC剖析之TransportResponseHandler.TransportRequestHandler和TransportChannelHandler剖析 ...

随机推荐

  1. JSP6(JSP 指令与JSP 动作元素)

    一.JSP指令用来设置整个JSP页面相关的属性 指令可以有很多个属性,它们以键值对的形式存在,并用逗号隔开. JSP中的三种指令标签: Page指令 Page指令为容器提供当前页面的使用说明.一个JS ...

  2. c语言贪吃蛇详解-2.画出蛇

    c语言贪吃蛇详解-2.画出蛇 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 蛇的身 ...

  3. VC++下编译 程序“减肥”

    在vc6 和 vs 2008下 编译 以下代码,不更改任何编译设置(vc6  40k , s2008 7k). 一.vc6下,Release 模式 编译处理. 1.去掉不必要的 链接库  工程(Pro ...

  4. 网站图片挂马检测及PHP与python的图片文件恶意代码检测对比

    前言 周一一早网管收到来自阿里云的一堆警告,发现我们维护的一个网站下有数十个被挂马的文件.网管直接关了vsftpd,然后把警告导出邮件给我们. 取出部分大致如下: 服务器IP/名称 木马文件路径 更新 ...

  5. Centos7.0 安装 oracle 11g 以及相关问题解决

    参考其他的资源和自己实践内容总结出来的流程

  6. (译)ABP之依赖注入

    原文地址:https://aspnetboilerplate.com/Pages/Documents/Dependency-Injection 什么是依赖注入 传统方式的问题 解决方案 构造函数注入 ...

  7. HDU5804--Price List

    Price List Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others) Tot ...

  8. “玲珑杯”ACM比赛 Round #22 E 贪心,脑洞

    1171 - 这个E大概是垃圾桶捡来的 Time Limit:2s Memory Limit:128MByte Submissions:138Solved:45 DESCRIPTION B君在做 CO ...

  9. maven项目部署对Oracle jar包的处理

    1.正常情况下,我们是访问不到ojdbc.jar的,需要建立一个本地仓. 2.先找到自己的Oracle中ojdbc.jar将其放入到   C:\Users\Administrator  这个目录下,然 ...

  10. java学习笔记IO之File类

    File类总结 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times } p.p2 { margin: 0.0px 0.0px 0.0p ...