【深入淺出 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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...