【深入淺出 Yarn 架構與實現】6-1 NodeManager 功能概述

2023-03-31 21:01:01

本節開始將對 Yarn 中的 NodeManager 服務進行剖析。
NodeManager 需要在每個計算節點上執行,與 ResourceManager 和 ApplicationMaster 進行互動。管理節點的計算資源以及排程容器。後續將對 NM 的功能職責、狀態機、容器生命週期和資源隔離等方面進行講解。本篇將從整體上對 NM 進行介紹。

一、NodeManager 基本職能

在 Hadoop 叢集中,每個計算節點都需要有一個管理服務,其就是 NodeManager(NM)。
它負責與 ResourceManager 保持通訊,管理 Container 的生命週期,監控每個 Container 的資源使用情況,追蹤節點健康狀況,管理紀錄檔等。
主要職責:

  1. 保持與 ResourceManager 同步
  2. 跟蹤節點的健康狀況
  3. 管理節點各個 Container 的生命週期,監控每個 Container 的資源使用情況
  4. 管理分散式快取(對 Container 所需的 Jar,庫檔案的本地檔案系統快取)
  5. 管理各個 Container 生成紀錄檔

整體來說,NM 通過兩個 RPC 協定與 RM 和 AM 互動,如下圖所示。

一)與 RM 互動

通過 ResourceTrackerProtocol 協定:

  • NM 通過該 RPC 協定向 RM 註冊、彙報節點健康狀況和 Container 執行狀態;
  • 領取 RM 下達的命令,包括重新初始化、清理 Container 佔用資源等。

在該協定中,RM 扮演 RPC server 的角色,而 NM 扮演 RPC Client 的角色(由內部元件 NodeStatusUpdater 實現)。NM 與 RM 之間採用 「pull 模型」,NM 總是週期性地主動向 RM 發起請求,並領取下達給自己的命令。

二)與 AM 互動

通過 ContainerManagementProtocol 協定:

  • 應用程式的 AM 通過該 RPC 協定向 NM 發起 Container 的相關操作(啟動、kill、獲取 Container 執行狀態等)。

在該協定中,AM 扮演 RPC Client 的角色,而 NM 扮演 RPC Server 的角色(由內部元件 ContainerManager 實現)。NM 與 AM 之間採用「push 模型」,AM 可以將 Container 相關操作的第一時間告訴 NM,相比於「pull 模型」,可以大大降低時間延遲。

二、NodeManager 內部結構

NodeManager 內部由多個元件構成,如下圖所示。其中最主要的三個元件是:NodeStatusUpdaterContainerManagerNodeHealthCheckService

一)NodeStatusUpdater

NodeStatusUpdater 是 NM 與 RM 通訊的唯一通道。

  • 當 NM 啟動時,該元件負責向 RM 註冊,並彙報節點上總的可用資源;
  • 之後,該元件週期性與 RM 通訊,彙報各個 Container 的狀態更新(包括節點上正在執行的 Container、已經完成的 Container 等資訊);
  • 同時 RM 會返回待清理的 Container 列表、待清理的應用程式列表、診斷資訊、各種 Token 等資訊。

二)ContainerManager

ContainerManager 是 NM 中最核心的元件之一,它由多個子元件組成,每個子元件負責一部分功能,協同管理執行在該節點上的所有 Container,各個子元件如下。

  • RPC Server:該 RPC Server 實現了 ContainerManagementProtocol 協定,是 AM 與 NM 通訊的唯一通道。ContainerManager 從各個 AM 上接收 RPC 請求以啟動新的 Container 或者 停止正在執行的 Container。需要注意的是,任何 Container 操作均會經 ContainerTokenSecretManager 合法性驗證,以防止偽造啟動或停止 Container 的命令。
  • ResourceLocalizationService:負責 Container 所需資源的在地化,它能夠按照描述從 HDFS 上下載 Container 所需的檔案資源,並儘量將它們分攤到各個磁碟上以防止出現熱點存取。此外,它會為下載的檔案新增存取控制限制,併為之施加合適的磁碟空間使用份額。
  • ContianersLauncher:維護了一個執行緒池以並行完成 Container 相關操作,比如啟動或者殺死 Container,其中啟動 Container 請求是由 AM 發起的,而殺死 Container 請求則可能來自 AM 或者 RM。
  • AuxService:NodeManager 允許使用者通過設定附屬服務的方式擴充套件自己的功能,這使得每個節點可以客製化一些特定框架的服務。附屬服務需要在 NodeManager 啟動之前設定好,並由 NodeManager 統一啟動與關閉。
  • ContainersMonitor:ContainersMonitor 負責監控 Container 的資源使用量,為了實現資源隔離和公平共用,RM 為每個 Container 分配了一定量的資源。而 ContainersMonitor 週期性探測它在執行過程中的資源利用量,一旦發生 Container 超出了它的允許使用份額上線,就向 Container 傳送訊號將其殺掉,這可以避免資源密集型的 Container 影響同節點上其他正在執行的 Container。
  • LogHandler:一個可插拔元件,使用者可通過它控制 Container 紀錄檔的儲存方式,即是寫到本地磁碟上還是將其打包後上傳到一個檔案系統中。
  • ContainerEventDispatcher:Container 事件排程器,負責將 ContainerEvent 型別的事件排程給對應 Container 的狀態機 ContainerImpl。
  • ApplicationEventDispatcher:Application 事件排程器,負責將 ApplicationEvent 型別的事件排程給對應 Application 的狀態機 ApplicationImpl。

三)NodeHealthCheckerService

NodeHealthCheckerService 通過週期性地執行一個自定義指令碼(由元件 NodeHealthScriptRunner 完成)和向磁碟寫檔案(由服務 LocalDirsHandlerService 完成)檢查節點的健康狀況。
並通過 NodeStatusUpdater 傳遞給 ResourceManager。一旦 ResourceManager 發現一個節點處於不健康狀態,則會將它加入黑名單,此後不再使用該資源,直到再次轉為健康狀態。需要注意的是,節點被加入黑名單時,正在執行的 Container 仍會正常執行,不會被殺死。

四)DeletionService

NodeManager 使用一個專門的服務用於檔案刪除。非同步地刪除失效檔案,這樣可避免刪除檔案帶來的效能開銷。

五)Security

安全部分。它包含兩部分,分別是 ApplicationACLsManagerContainerTokenSecretManagerApplicationACLsManager 確保存取 NodeManager 的使用者是合法的,ContainerTokenSecretManager 確保使用者請求的資源被 ResourceManager 授權過。

  • ApplicationACLsManager:NodeManager 需要為所有面向用戶的 API 提供安全檢查,如在 Web UI 上只能將 Container 紀錄檔顯示給授權使用者。該元件為每個應用程式維護了一個 ACL 列表,一旦收到類似請求後會利用該列表對其進行驗證。
  • ContainerTokenSecretManager:檢查收到的各種存取請求的合法性,確保這些請求操作已被 ResourceManager 授權。

六)WebServer

通過 Web 介面向用戶展示該節點上所有應用程式執行狀態、Container 列表、節點健康狀況和 Container 產生的紀錄檔等資訊。

七)ContainerExecutor

與底層作業系統互動,安全的放置 Container 所需要的檔案和目錄,隨後以一個安全的方式啟動和清理Container相關程序。

三、NodeManager 的事件與事件處理器

NodeManager主要元件也是通過事件進行互動的,這使得元件能夠非同步並行完成各種功能。如下圖所示:

四、總結

本節對 NodeManager 整體結構進行了介紹。從它的基本職能、內部結構、事件處理三個方面進行講解,對 NM 整體結構有了認知。
實際上 NM 主要就負責兩個事情:1)與 RM 互動,註冊以及彙報狀態,領取 RM 指令處理 container。2)與 AM 互動,處理其管理的 container 操作。


參考文章:
《Hadoop技術內幕:深入解析YARN架構設計與實現原理》
深入YARN系列3:剖析NodeManager架構,元件與生產應用
NodeManager詳細元件及功能
Yarn NodeManager總體架構