Spark - Leader选举
流程
Leader选举模式包括ZOOKEEPER、基于文件系统的、默认空实现以及自定义实现的,选举模式和持久化引擎是对应的。
持久化引擎 | Leader选举模式 |
---|---|
基于文件系统 | MonarchyLeaderAgent |
基于ZooKeeper | ZooKeeperLeaderElectionAgent |
空实现 | MonarchyLeaderAgent |
拉取数据 当成为Leader节点的时候,Master就会去持久化引擎里拉取ApplicationInfo、DriverInfo、WorkerInfo等信息(拉取的过程在持久化引擎里说过了),如果这些数据都是空的,就直接变成ALIVE状态,对外提供服务。
文章图片
如果不是空的,那就需要把数据进行还原,这样原ALIVE节点的数据就不会丢失。
恢复Application Master拿到ApplicationInfo数据后,就开始对Application进行注册,把Application的状态改为UNKNOWN,然后发消息给对应的Application,告知他Master地址已经变更,此消息将携带被选举为领导的Master和此Master的masterWebUiUrl属性。
文章图片
Application接收到新的Master的通知,就断开了和旧的Master的连接,并指向新的master,然后发信息给Master说我已经知道了。
Master收到消息后,把Application的状态改为WAITING。
恢复Driver 【Spark - Leader选举】遍历从持久化引擎中读取的DriverInfo,将每个DriverInfo添加到drivers缓存。
恢复Worker Master拿到WorkerInfo数据后,就开始对Worker进行注册,把WorkerInfo的状态改为UNKNOWN,然后发消息给对应的Application,告知他Master地址已经变更,此消息将携带被选举为领导的Master和此Master的masterWebUiUrl属性。
文章图片
Worker接收到新的Master的通知,把Master的相关信息进行了变更,然后发消息给Master,这个消息携带了Worker的ID、这个Worker里的Executor的信息列表。
文章图片
Master收到消息后,对Worker和Executor的信息进行了恢复,并把WorkerInfo的状态改为ALIVE。
调度 Application和Worker恢复的时候,都会先把状态改为UNKNOWN。
文章图片
等Application响应的时候,再把状态改为WAITING或者ALIVE。
文章图片
此时如果状态为UNKNOWN的WorkerInfo或ApplicationInfo说明还没发消息给Master,Master不确定他们是否存活,所以在调度之前就需要移除他们。
对Application、Driver、Worker等信息进行恢复后,就开启了资源调度。资源调度之前已经讲过,这里就不再累述。
推荐阅读
- Spark|Spark 数据倾斜及其解决方案
- 聊聊curator|聊聊curator recipes的LeaderLatch
- 如何举办一场成功的俱乐部换届选举会【1】设定愿景和目标
- Spark--java.util.NoSuchElementException:|Spark--java.util.NoSuchElementException: None.get at at
- spark|spark 资源动态释放
- SparkStreaming读Kafka-|SparkStreaming读Kafka- Couldn't find leaders for Set
- spark|spark UDAF根据某列去重求合 distinct sum
- 大数据|spark UDAF 自定义聚合函数 UserDefinedAggregateFunction 带条件的去重操作
- Python3实战Spark大数据分析及调度
- Gank Spark