1. 启动 Master

    Standalone 部署模式中首先会启动一到多个 Master.main 函数的进程。每个 Master.main 进程中都会创建 Master 实例并注册到 Master 自己的 RpcEnv 中

  2. Master 选举

    Standalone 模式下可以存在多个Master,这些 Master 之间通过持久化引擎 (PersistenceEngine) 和领导选举机制解决生成环境下 Master 的单点问题,使 Master 在异常退出后,能够重新选举激活状态的 Master,并从故障中恢复集群。

    在启动 Master 实例的过程中创建 ZooKeeperLeaderElectionAgent 实例,每个 Master 实例对应的 ZooKeeperLeaderElectionAgent 实例都会参与 ZooKeeper 的领导选举,最终确定正式的领导者并调用 $ZooKeeperLeaderElectionAgent.isLeader()$ 方法。$isLeader()$ 方法将会调用 $Master.electedLeader()$ 方法将 Master 选举为领导,Master 的状态被设置为激活。对于没有被选举为领导的 Master,会调用 $ZooKeeperLeaderElectionAgent.notLeader()$ 方法。$notLeader()$ 方法会将领导者的信息告知支持者。

  3. 启动 Worker

    Standalone 部署模式中会启动一到多个 Worker.main 函数的进程。每个 Worker.main 进程中都会创建 Worker 实例并注册到 Worker 自己的 RpcEnv 中~

  4. 注册 Worker

    在启动 Worker 实例的过程中向 Master 实例发送 RegisterWorker 消息,注册 Worker~,Master 接收到 RegisterWorker 消息后对 WorkerInfo 进行注册。WorkerInfo 注册成功后,Master 向 Worker 回复 RegisteredWorker 消息。Worker 收到 RegisteredWorker 消息后,将向 Master 发送 WorkerLatestState 消息,将 Worker 最新状态汇报给 Master。Master 接收到 WorkerLatestState 消息后,对 Executor 和 Driver 进行匹配,对于不匹配的 Executor 和 Driver,通知 Worker 杀死

  5. Worker 心跳

    Worker 通过发送心跳实现的汇报运行状态,当 worker 向 Master 注册成功后会接收到 Master 回复的 RegisteredWorker 消息,Worker 使用 handleRegisterResponse 方法处理 RegisteredWorker 消息时,将会向 forworaMessageScheduler 提交以 HEARTBEAT_MILLIS 作为间隔向 Worker 自身发送 SendHeartbeat 消息的定时任务。Worker 的 receive 方法实现了对 SendHeartbeat 消息的处理

    如果 connected 为 true,则调用 sendToMaster 方法,向 Master 发送 Heartbeat 消息(此消息将携带Worker 的 ID 和 Worker 的 RpcEndpointRef)