🚧施工中🚧
心跳
NM与RM
NM 需要和 RM 进行心跳,让 RM 更新自己的信息。心跳的信息包含:
- Request(NM->RM) : NM 上所有 Container 的状态,
- Response(RM->NM) : 已待删除和待清理的 Container 列表
ResourceTracker.nodeHeartbeat NM to RM:8031
核心逻辑就是触发出一个「更新 NM 信息」事件 :RMNodeStatusEvent(RMNodeEventType.STATUS_UPDATE)
,这个消息由 RMNode处理。
AM与RM
每次RM收到心跳会向AMLivelinessMonitor模块更新最近心跳时间。
其中最重要的方法是 allocate() ,该方法同时也承担着 AM 与 RM 心跳的责任。该方法的主要逻辑,就是把
AllocateRequest 转换为「Google protocol Buffer」格式,通过 RPC 调用传到 RM 。在 RM 一端,则是由
ApplicationMasterService 接收消息。该类同样也是实现了接口 ApplicationMasterProtocol ,所以这时 ApplicationMasterService.allocate() 会被执行。
AM 与 RM 进行心跳,发送的信息中含有:
- AM 告诉 RM 两个信息: a) 自己对Container的要求,b) 已经用完的待回收的Container列表。
- RM 给 AM 的回应:a) 新申请的 Container,b) 已经完成的 Container 的状态。
应用提交
RM写ZK
创建节点/rmstore/ZKRMStateRoot/RM_ZK_FENCING_LOCK保证只有一个Client再写
写节点结束在删除RM_ZK_FENCING_LOCK。