本篇繼續對 RM 中管理 NodeManager 的部分進行深入的講解,主要有三個部分:檢查 NM 是否存活;管理 NM 的黑白名單;回應 NM RPC 請求,
一、簡介
在 RM 的主從結構中,最主要的就是 RM 和 NM 之間的主從結構,RM 作為「管理員」,管理下面多個 NM 節點,如何檢測 NM 是否存活,劃分黑白名單,以及如何相應 NM RPC 請求,將在下面進行詳細介紹,
二、NM 管理主要組成
一)NMLivelinessMonitor
- 檢測 NM 活性的服務,是否有心跳
- 當前正在運行的 NM 會保存在 RM 的一個資料結構中,NMLivelinessMonitor 就周期遍歷,若一個 NM 在一定時間(默認10分鐘)未匯報心跳,則任務其掛了
- NM 被認為掛了后,其上的 Container 會自動置為運行失敗,并通知給 AM,由 AM 決定后續處理方案
二)NodesListManager
- 管理 exclude(類似黑名單)和 include(類似白名單)串列
- 啟動時,它們分別從
yarn.resourcemanager.nodes.include-path以及yarn.resourcemanager.nodes.exclude-path中讀取 - 黑名單串列中的nodes不能夠和RM直接通信(直接拋出RPC例外)
- 可以動態加載,使用命令
yarn rmadmin -refreshNodes
三)ResourceTrackerService
ResourceTrackerService 是 RPC 協議 ResourceTracker 的一個實作,它作為一個 RPC Server 端接收 NodeManager 的 RPC 請求,
請求主要包含2種資訊,1)注冊NodeManager,2)處理心跳資訊,
- 注冊 NodeManager 處理:
ResourceTrackerService#registerNodeManager
// ResourceTrackerService#registerNodeManager
public RegisterNodeManagerResponse registerNodeManager(
RegisterNodeManagerRequest request) throws YarnException,
IOException {
// nm 節點資訊 - ip、埠、資源、版本
NodeId nodeId = request.getNodeId();
String host = nodeId.getHost();
int cmPort = nodeId.getPort();
int httpPort = request.getHttpPort();
Resource capability = request.getResource();
String nodeManagerVersion = request.getNMVersion();
RegisterNodeManagerResponse response = recordFactory
.newRecordInstance(RegisterNodeManagerResponse.class);
// 檢查版本
if (!minimumNodeManagerVersion.equals("NONE")) {
if (minimumNodeManagerVersion.equals("EqualToRM")) {
minimumNodeManagerVersion = YarnVersionInfo.getVersion();
}
if ((nodeManagerVersion == null) ||
(VersionUtil.compareVersions(nodeManagerVersion,minimumNodeManagerVersion)) < 0) {
String message =
"Disallowed NodeManager Version " + nodeManagerVersion
+ ", is less than the minimum version "
+ minimumNodeManagerVersion + " sending SHUTDOWN signal to "
+ "NodeManager.";
LOG.info(message);
response.setDiagnosticsMessage(message);
response.setNodeAction(NodeAction.SHUTDOWN);
return response;
}
}
- 處理心跳
- 可以到原始碼中查看具體邏輯
ResourceTracker#nodeHeart - 接收并檢查 nm 匯報的心跳資訊
- 在
NodeHeartbeatResponse中 set 需要釋放的 Container 串列、Application 串列等資訊 - 向 RMNode 發送該 NodeManager 的狀態資訊并且保存最近一次心跳應答資訊
- 回傳 `NodeHeartbeatResponse
- 可以到原始碼中查看具體邏輯
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540727.html
標籤:其他
