🚧施工中🚧

心跳

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。