流程
Leader 选举模式包含 ZOOKEEPER、基于文件系统的、默认空实现以及自定义实现的,选举模式和长久化引擎是对应的。
长久化引擎 | Leader 选举模式 |
---|---|
基于文件系统 | MonarchyLeaderAgent |
基于 ZooKeeper | ZooKeeperLeaderElectionAgent |
空实现 | MonarchyLeaderAgent |
MonarchyLeaderAgent 是服务启动的时候,就间接成为 Leader 节点,而 ZooKeeperLeaderElectionAgent 是基于 ZooKeeper 的 Leader 来选举的。
拉取数据
当成为 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
遍历从长久化引擎中读取的 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 等信息进行复原后,就开启了资源调度。资源调度之前曾经讲过,这里就不再累述。