Master的注册机制和状态改变管理解密
本课主题
- 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 接受注册的对象主要是 Driver, Application 和 Worker, 需要补充说明的是 Executor 不会注册给 Master,Executor 是注册给 Driver 中的 SchedulerBackend 的;
- 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]
- Master 接到 Worker 注册的请求后,首先会判断一下当前的 Master 是否是 Standby 的模式,如果是的话就不处理,然后会判断当前 Master 内存的数据结构 idToWorker 中是否已经有该 Worker 的注册信息,如果有的话此时并不会重覆注册;





- 通过持久化引擎例如 ZooKeeper 把注册信息持久化起来

- Master 如果决定接收注册的Worker,首先会创建 WorkerInfo 对象来保存注册的 Worker 的信息:然后调用 registerWorker 来执行具体的注册的过程,如果 Worker 状态是 DEAD 的状态则直接过滤掉,对于 UNKNOWN 状态的内容会调用 removeWorker 方法来进行清理(包括清理该工人下的 Executors 和驱动程序。

- 注册的时候会先注册 Driver 然后再注册 Application
Master 处理 Driver 狀态变换
- Master 对 Driver 和 Executor 状态变化的出来,只有 Driver 的状态发生变发就直接调用 removeDriver 方法

- 首先查看有没有这个 driver,要看看曾经有没有登记

Master 处理 Executor 狀态变换
- 首先是查询一次有没有这个 Executor 注册的信息,


- Executor 挂掉的时候系统会进行一定次数的重启(最多重试10次)


[总结部份]
更新中......
Master的注册机制和状态改变管理解密的更多相关文章
- [Spark内核] 第30课:Master的注册机制和状态管理解密
本課主題 Master 接收 Worker, Driver, Application Master 处理 Driver 狀态变换 Master 处理 Executor 狀态变换 [引言部份:你希望读者 ...
- Spark系列(六)Master注册机制和状态改变机制
各组件的注册流程如下图: 注册机制源码说明: 入口:org.apache.spark.deploy.master文件下的receiveWithLogging方法中的case RegisterAppli ...
- 小记--------spark的Master的Application注册机制源码分析及Master的注册机制原理分析
原理图解: Master类位置所在:spark-core_2.11-2.1.0.jar的org.apache.spark.deploy.master下的Master类 //截取了部分代码 //处理 ...
- C#实现软件授权,限定MAC运行(软件license管理,简单软件注册机制)
一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理. 基本原理:1.软件一运 ...
- C#软件license管理(简单软件注册机制)
最近做了一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理. ...
- DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能
DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能 一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己 ...
- TensorFlow中的设备管理——Device的创建与注册机制
背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 作为一款优秀的异构深度学习算法框架,TensorFlow可以在多种设备上运行算 ...
- iOS:使用代理模式监听开关状态改变事件
记一次解决跨控制器监听开关状态改变的尝试. 为了统一设置UITableViewCell里的内容,自定义了UITableViewCell类的一个基类,命名为SettingCell.SettingCell ...
- Unity3.0基于约定的自动注册机制
前文<Unity2.0容器自动注册机制>中,介绍了如何在 Unity 2.0 版本中使用 Auto Registration 自动注册机制.在 Unity 3.0 版本中(2013年),新 ...
随机推荐
- (转)bash条件判断之if语句
http://blog.51cto.com/64314491/1629175---------bash条件判断之if语句(一) http://blog.51cto.com/64314491/16292 ...
- Jmeter断言实例—响应断言
断言有很多种,最最最常用的一种就是响应断言,目前我用的最多是这一种,下面列举一个运用响应断言的实例 对相应的请求添加断言 **Main sample and sub-samples:断言应用于主采样器 ...
- 获取两个数之间的随机数-java
start=25 end=30 (int)(Math.random()*(end-start)+start)
- JSONP原理及简单实现
在web2.0时代,熟练的使用ajax是每个前端攻城师必备的技能.然而由于受到浏览器的限制,ajax不允许跨域通信. JSONP就是就是目前主流的实现跨域通信的解决方案. 虽然在在jquery中,我们 ...
- CSS box-flex属性,然后弹性盒子模型简介
今天做项目的时候发现一个css3的新属性flex 一.什么是flex 它的作用是能够按照设置好的规则来排列容器内的项目,而不必去计算每一个项目的宽度和边距.甚至是在容器的大小发生改变的时候,都可以重新 ...
- spring中使用quartz时注入时出现的错误
错误1: 配置文件: <!-- 任务执行器的线程池 --> <bean id="taskExecutor" class="org.springframe ...
- Magento 2中文手册教程 - 如何获得 Magento 2
Magento 2 安装 我们搜集了一些信息来帮助您开始使用Magento 2和你的Magento 2安装. 我们有一些资源帮助您开始使用Magento 2. 如何获得 Magento 2 参考下表开 ...
- WPF 资源字典
使用好处:存储需要被本地话的内容(错误消息字符串等,实现软编码),减少重复的代码,重用样式,实现多个项目之间的共享资源;修改一个地方所有引用的地方都会被修改,方便统一风格; 使用方法,归纳起来主要有下 ...
- 编译器错误消息: CS0012: 类型“System.Object”在未被引用的程序集中定义。必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用。
编译器错误消息: CS0012: 类型“System.Object”在未被引用的程序集中定义.必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neu ...
- RUP 4+1视图
RUP开篇之作:http://www.ibm.com/developerworks/cn/rational/r-4p1-view/index.html 百科:http://baike.baidu.co ...