本節開始將對 Yarn 中的 NodeManager 服務進行剖析。
NodeManager 需要在每個計算節點上執行,與 ResourceManager 和 ApplicationMaster 進行互動。管理節點的計算資源以及排程容器。後續將對 NM 的功能職責、狀態機、容器生命週期和資源隔離等方面進行講解。本篇將從整體上對 NM 進行介紹。
在 Hadoop 叢集中,每個計算節點都需要有一個管理服務,其就是 NodeManager(NM)。
它負責與 ResourceManager 保持通訊,管理 Container 的生命週期,監控每個 Container 的資源使用情況,追蹤節點健康狀況,管理紀錄檔等。
主要職責:
整體來說,NM 通過兩個 RPC 協定與 RM 和 AM 互動,如下圖所示。
通過 ResourceTrackerProtocol
協定:
在該協定中,RM 扮演 RPC server 的角色,而 NM 扮演 RPC Client 的角色(由內部元件 NodeStatusUpdater
實現)。NM 與 RM 之間採用 「pull 模型」,NM 總是週期性地主動向 RM 發起請求,並領取下達給自己的命令。
通過 ContainerManagementProtocol 協定:
在該協定中,AM 扮演 RPC Client 的角色,而 NM 扮演 RPC Server 的角色(由內部元件 ContainerManager
實現)。NM 與 AM 之間採用「push 模型」,AM 可以將 Container 相關操作的第一時間告訴 NM,相比於「pull 模型」,可以大大降低時間延遲。
NodeManager 內部由多個元件構成,如下圖所示。其中最主要的三個元件是:NodeStatusUpdater
、ContainerManager
、NodeHealthCheckService
。
NodeStatusUpdater
是 NM 與 RM 通訊的唯一通道。
ContainerManager 是 NM 中最核心的元件之一,它由多個子元件組成,每個子元件負責一部分功能,協同管理執行在該節點上的所有 Container,各個子元件如下。
ContainerManagementProtocol
協定,是 AM 與 NM 通訊的唯一通道。ContainerManager 從各個 AM 上接收 RPC 請求以啟動新的 Container 或者 停止正在執行的 Container。需要注意的是,任何 Container 操作均會經 ContainerTokenSecretManager
合法性驗證,以防止偽造啟動或停止 Container 的命令。NodeHealthCheckerService 通過週期性地執行一個自定義指令碼(由元件 NodeHealthScriptRunner 完成)和向磁碟寫檔案(由服務 LocalDirsHandlerService 完成)檢查節點的健康狀況。
並通過 NodeStatusUpdater 傳遞給 ResourceManager。一旦 ResourceManager 發現一個節點處於不健康狀態,則會將它加入黑名單,此後不再使用該資源,直到再次轉為健康狀態。需要注意的是,節點被加入黑名單時,正在執行的 Container 仍會正常執行,不會被殺死。
NodeManager 使用一個專門的服務用於檔案刪除。非同步地刪除失效檔案,這樣可避免刪除檔案帶來的效能開銷。
安全部分。它包含兩部分,分別是 ApplicationACLsManager
和 ContainerTokenSecretManager
,ApplicationACLsManager
確保存取 NodeManager 的使用者是合法的,ContainerTokenSecretManager
確保使用者請求的資源被 ResourceManager 授權過。
通過 Web 介面向用戶展示該節點上所有應用程式執行狀態、Container 列表、節點健康狀況和 Container 產生的紀錄檔等資訊。
與底層作業系統互動,安全的放置 Container 所需要的檔案和目錄,隨後以一個安全的方式啟動和清理Container相關程序。
NodeManager主要元件也是通過事件進行互動的,這使得元件能夠非同步並行完成各種功能。如下圖所示:
本節對 NodeManager 整體結構進行了介紹。從它的基本職能、內部結構、事件處理三個方面進行講解,對 NM 整體結構有了認知。
實際上 NM 主要就負責兩個事情:1)與 RM 互動,註冊以及彙報狀態,領取 RM 指令處理 container。2)與 AM 互動,處理其管理的 container 操作。
參考文章:
《Hadoop技術內幕:深入解析YARN架構設計與實現原理》
深入YARN系列3:剖析NodeManager架構,元件與生產應用
NodeManager詳細元件及功能
Yarn NodeManager總體架構