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

来源:https://www.cnblogs.com/shuofxz/archive/2022/11/22/16916339.html
-Advertisement-
Play Games

前面幾篇文章對 Yarn 基本架構、程式基礎庫、應用設計方法等進行了介紹。之後幾篇將開始對 Yarn 核心組件進行剖析。 ResourceManager(RM)是 Yarn 的核心管理服務,負責集群管理、任務調度、狀態機管理等,本篇將對 RM 總體架構進行介紹。 ...


前面幾篇文章對 Yarn 基本架構、程式基礎庫、應用設計方法等進行了介紹。之後幾篇將開始對 Yarn 核心組件進行剖析。
ResourceManager(RM)是 Yarn 的核心管理服務,負責集群管理、任務調度、狀態機管理等,本篇將對 RM 總體架構進行介紹。

一、RM 基本職能

主要包含以下幾個功能:

  • Client 交互:處理來自 Client 的請求;
  • 管理 ApplicationMaster:啟動、管理、重啟等;
  • 管理 Nodemanager:接收 NM 彙報的資源信息,並下達管理指令;
  • 資源管理與調度:接收 AM 的資源請求,並分配資源。

image.png

如上圖所示,RM 中各組件通過對應 RPC 與各 Client 進行通信:

  • ResourceTrackerProtocol: NodeManager(NM)通過該 RPC 協議向 RM 註冊、彙報節點健康狀況和 Container 運行狀態,並領取 RM 下達的命令。NM 與 RM 之間採用了「pull模型」,NM 總是周期性地主動向 RM 發起請求(心跳),並領取下達給自己的命令。
  • ApplicationMasterProtocol: 應用程式的 ApplicationMaster 通過該 RPC 協議向 RM 註冊、申請資源和釋放資源。(AM 與 RM 交互參考上一篇文章「3-3 Yarn Application Master 編寫」)
  • ApplicationClientProtocol: 應用程式的客戶端通過該 RPC 協議向 ResourceManager 提交應用程式、查詢應用程式狀態和控制應用程式(比如殺死應用程式)等。(AppClient 與 RM 交互參考文章「3-2 Yarn Client 編寫」

從以上介紹中可以看出,與 RM 通過 RPC 通信的組件都採用「Pull 模型」,各個「Client」通過心跳定期向 RM 彙報,在心跳返回值中領取 RM 下達的指令。

二、RM 內部架構

本節將深入 RM 內部,看其內部組織結構和主要模塊,架構圖如下所示:
image.png

一)用戶交互模塊

RM 分別針對普通用戶、管理員和 Web 提供了三種對外服務:

  • ClientRMService: 為普通用戶提供的服務,它處理來自客戶端各種RPC請求,比如提交應用程式、終止應用程式、獲取應用程式運行狀態等;
  • AdminService: RM 為管理員提供了一套獨立的服務介面,以防止管理員發送的管理命令餓死,管理員可通過這些介面管理集群,比如動態更新節點列表、更新ACL列表、更新隊列信息等;
  • WebApp: 更加友好地展示集群資源使用情況和應用程式運行狀態等信息。

二) NM 管理模塊

  • NMLivelinessMonitor: 監控 NM 是否活著,長時間(預設為10min)內未彙報心跳信息,則認為其掛了;
  • NodesListManager: 維護正常節點和異常節點列表,管理exclude(類似於黑名單)和include(類似於白名單)節點列表,這兩個列表均是在配置文件中設置的,可以動態載入;
  • ResourceTrackerService: 處理來自 NM 的請求,主要包括註冊和心跳兩種請求。

三) AM 管理模塊

  • AMLivelinessMonitor: 監控AM是否活著,長時間未彙報心跳,它上面所有正在運行的 Container 將被置為失敗狀態,而 AM 本身會被重新分配到另外一個節點上執行(AM 重試次數預設是2);
  • ApplicationMasterLauncher: 與某個 NM 通信,要求它為某個應用程式啟動 ApplicationMaster;
  • ApplicationMasterService(AMS): 處理來自 AM 的請求,主要包括註冊和心跳兩種請求。其中心跳彙報信息包含所需資源描述、待釋放的Container列表、黑名單列表等,而 AMS 則為之返回相應的 Container 信息。

四) Application 管理模塊

  • ApplicationACLsManage: 管理應用程式訪問許可權,包含兩部分許可權:查看許可權和修改許可權;
  • RMAppManager: 管理應用程式的啟動和關閉;
  • ContainerAllocationExpirer: 當 AM 收到 RM 新分配的一個 Container 後,必須在一定的時間內啟動該 Container,否則將被回收。

五)狀態機管理模塊

RM 共維護四類狀態機:

  • RMApp: 維護一個 Application 的整個運行周期,可能會包括多次 Attempt;
  • RMAppAttempt: 一個實例運行失敗後,可能再次啟動一個重新運行,而每次啟動稱為一次運行嘗試用 「RMAppAttempt」描述,RMAppAttempt 維護了一次運行嘗試的整個生命周期;
  • RMContainer: 維護一個 Container 的運行周期。RM 將資源封裝成 Container 發送給應用程式的 AM,而AM 則會在 Container 中啟動任務;
  • RMNode: 維護一個 NM 的生命周期,包括啟動到運行結束整個過程。

六)安全管理模塊

RM 有非常全面的許可權管理機制,主要包括:

  • ClientToAMSecretManager
  • ContainerTokenSecretManager
  • ApplicationTokenSecretManager

七)資源分配模塊

該模塊主要涉及一個組件「ResourceScheduler」。其是資源調度器,按照一定的約束條件(比如隊列容量限制等)將集群中的資源分配給各個應用程式。
ResourceScheduler 是一個插拔式模塊,自帶三個調度器,用戶可以自己定製:

  • FIFO:先進先出,單用戶
  • Fair Scheduler:公平調度器(FairScheduler基本上具備其它兩種的所有功能)
  • Capacity Scheduler:容量調度器

此部分將在後面文章中更詳細的介紹。

三、RM事件與事件處理器

Yarn採用了事件驅動機制,而RM是的實現則是最好的例證。所有服務和組件均是通過中央非同步調度器組織在一起的,不同組件之間通過事件交互,從而實現了一個非同步並行的高效系統。
下麵是詳細的表格:

image.png

四、小結

在 YARN 中,ResourceManager 負責集群中所有資源的統一管理和分配,它接收來自各個節點(NodeManager)的資源彙報信息,並把這些信息按照一定的策略分配給各個應用程式。
本篇對 ResourceManager 總體架構進行了介紹。對其基本職能、內部結構、處理的事件進行了梳理。後續文章中將會對每個部分深入源碼進行更深入討論。


參考文章:
《Hadoop 技術內幕 - 深入解析 Yarn 結構設計與實現原理》第五章


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大家好,EluxJS是一套基於“微模塊”和“模型驅動”的跨平臺、跨框架『同構方案』,歡迎瞭解... 可怕的巨石怪 工作中最可怕的是什麼?是遇到業務複雜且亂作一團的巨石應用。改一發而動全身,無法漸進式重構,也沒人敢對歷史包袱進行優化,欠下的代碼債只能像滾雪球一樣越積越多,終於到某天玩不下去,大佬選擇了 ...
  • 傳統大企業更喜歡私有化部署、個性化交付的傳統模式,因為他們需要更強的管控和更高的安全性。 然而,中小企業付費能力有限,需求往往也更加標準化,所以更喜歡價格更低的、訂購更簡單的SaaS產品。 為了滿足不同客戶的需求,多租戶的底層架構設計是至關重要的。 ...
  • 3. Drools入門案例 全套代碼及資料全部完整提供,點此處下載 本小節通過一個Drools入門案例來讓大家初步瞭解Drools的使用方式、對Drools有一個整體概念。 3.1 業務場景說明 業務場景:消費者在圖書商城購買圖書,下單後需要在支付頁面顯示訂單優惠後的價格。具體優惠規則如下: | 規 ...
  • 我們之前有<C++模板編程模塊>中的第<四>節 理解空間配置器allocator優化STL中的Vector 我將在此基礎上加入迭代器功能代碼 Iterator 為什麼可以遍歷所有的容器的方式都一樣? auto it =continer.beign(); for( ;it!=continer.end( ...
  • 最小生成樹(貪心演算法) 概念 一個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 n 個結點,並且有保持圖連通的最少的邊。 連通圖有多種連接方式,而其中最小的連通圖,就是最小生成樹 連通圖分為:無向、有向 無向連通圖:所以頂點相連,但各個邊都沒有方向 有向連通圖:邊有方向 1 ...
  • 學習:SQL 語句到結構體的轉換 | Go 語言編程之旅 (eddycjy.com) 目標:SQL表轉換為Go語言結構體 可以線上體驗這個過程:SQL生成GO語言結構體 - 支持批量處理 (tl.beer) MySQL資料庫中的表結構,本質上是SQL語句。 CREATE TABLE `USER`( ...
  • 規則引擎 Drools 全套代碼及資料全部完整提供,點此處下載 1. 問題引出 現有一個線上申請信用卡的業務場景,用戶需要錄入個人信息,如下圖所示: 通過上圖可以看到,用戶錄入的個人信息包括姓名、性別、年齡、學歷、電話、所在公司、職位、月收入、是否有房、是否有車、是否有信用卡等。錄入完成後點擊申請按 ...
  • 1、static修飾局部變數 在函數體內,只初始化一次,被static聲明過的局部變數在調用過程中值不變。原因:在任意函數內定義局部變數,存儲線上程中的棧區,出函數時自動摧毀,所以在每次調用這個函數時,局部變數的初始值都為定義的值在進行運算。static在修飾局部變數時,存儲在靜態區,函數返回時值保 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...