本课主题

  • Master 接收 Worker, Driver, Application 注册
  • Master 处理 Driver 狀态变换
  • Master 处理 Executor 狀态变换

Master 接受 Driver, Worker, Application 注册內幕

可以把 Master 想像成公司里的总经理,Driver 就是客户,Worker 是每个项目的技术领导,Executor 是实际干活的工程师,在实际情况下,他们三个会相互沟通,总经理一般都不会直接跟工程师沟通。但客户、技术领导和工程师一般都会进行沟通。

用这个例子,你就可以理解在 Spark 的世界中Master、Driver、Worker 三者会进行沟通Executor、Driver、Worker 三者也会进行沟通,而 Master 不会直接向 Excecutor 进行沟通。

[下图是 Master 接收 Worker, Driver, Application 的流程图]

Master 對其他组件注册的处理
  1. Master 接受注册的对象主要是 Driver, Application 和 Worker, 需要补充说明的是 Executor 不会注册给 Master,Executor 是注册给 Driver 中的 SchedulerBackend 的;
  2. Worker 是在启动之后主动向Master 注册的,这样设计有一个很大的好处,就是在生产环境下如果想把新的Worker 加入到已经运行的Spark 集群上,此时不需要重新启动Spark 集群就能够使用新加入的Worker 以提升处理能力;Worker 启动后会调用onStart( ) 方法,然后调用 registerWithMaster( ) 来注册给Master。
    [下图是 Worker.scala 中的 onStart 方法]

    这里  registerWithMaster( ) 首先会调用 tryRegisterAllMasters( )
    [下图是 Worker.scala 中的 registerWithMaster 方法]

    [下图是 Worker.scala 中的 tryRegisterAllMasters 方法]

    这里发送一个 RegisterWorker 的 case class 去 masterEndpoint
    [下图是 Worker.scala 中的 registerWithMaster 有一个参数的重载方法]

    在 RegisterWorker 这个数据结构中具体会有 id、host、port、workerEndPoint、cores、memory、webUiPort、publicAddress 等信息。它会首先判断一下 host 是不是空值和 port 必须是大于 0
    [下图是 DeployMessage.scala 中 RegisterWorker 的 case class]
  3. Master 接到 Worker 注册的请求后,首先会判断一下当前的 Master 是否是 Standby 的模式,如果是的话就不处理,然后会判断当前 Master 内存的数据结构 idToWorker 中是否已经有该 Worker 的注册信息,如果有的话此时并不会重覆注册;




  4. 通过持久化引擎例如 ZooKeeper 把注册信息持久化起来
  5. Master 如果决定接收注册的Worker,首先会创建 WorkerInfo 对象来保存注册的 Worker 的信息:然后调用 registerWorker 来执行具体的注册的过程,如果 Worker 状态是 DEAD 的状态则直接过滤掉,对于 UNKNOWN 状态的内容会调用 removeWorker 方法来进行清理(包括清理该工人下的 Executors 和驱动程序。
  6. 注册的时候会先注册 Driver 然后再注册 Application

Master 处理 Driver 狀态变换

  • Master 对 Driver 和 Executor 状态变化的出来,只有 Driver 的状态发生变发就直接调用 removeDriver 方法
  • 首先查看有没有这个 driver,要看看曾经有没有登记
 

Master 处理 Executor 狀态变换

  • 首先是查询一次有没有这个 Executor 注册的信息,
  • Executor 挂掉的时候系统会进行一定次数的重启(最多重试10次)

 
 

[总结部份]

更新中......

最新文章

  1. Java实现数组排序
  2. 页断裂(partial write)与doublewrite技术
  3. BZOJ1010 [HNOI2008]玩具装箱toy
  4. 解决Android SDK Manager 更新、下载慢以及待安装包列表不显示
  5. 《gpg文件加密的使用》RHEL6
  6. 奇怪的JS正则之 /[A-z]/.test("\\"); // true
  7. jsp:setProperty
  8. ServiceContract,OperationContract
  9. Linux 定期自动备份文件夹脚本
  10. 前端生成验证码图片utils
  11. spring实例化bean三种方式
  12. 你真的会websocket吗
  13. Spring boot 线上部署
  14. Lock 从来就没有成功过
  15. iOS开发-Autolayout小结
  16. Linux命令: ls -F
  17. C# 进程通信-命名管道
  18. SharePoint 2013 App 示例之图片墙
  19. MySQL InnoDB简介
  20. Learn X in Y minutes Where X=c++

热门文章

  1. C# 特性(Attribute)之Flag特性
  2. 理解session和cookie
  3. 使用SubstanceDesign和Unity插件ShaderForge制作风格化火焰
  4. Linux下ffmpeg添加Facebook/transform代码块实现将全景视频的球模型转换成立方体模型
  5. php 命名空间与文件引入
  6. Flash流媒体服务器软件
  7. cocos creator Touch事件应用(触控选择多个子节点)
  8. C Primer Plus note9
  9. Excel的Sheet页复制
  10. java利用直方图实现图片对比