Hadoop-Yarn架構
一.簡介
YARN(Yet Another Resource Negotiator)是一個通用的資源管理平臺,可為各類計算框架提供資源的管理和排程。其核心出發點是為了分離資源管理與作業排程/監控,實現分離的做法是擁有一個全域性資源管理器(ResourceManager,RM),以及每個應用程式對應一個應用管理器(ApplicationMaster,AM),應用程式由一個作業(Job)或者Job的有向無環圖(DAG)組成。
功能
- 資源的統一管理和排程:叢集中所有的節點資源(記憶體、CPU、磁碟、網路等)抽象為Container,Yarn按照特定的策略對資源進行排程進行Container的分配。
- 資源隔離:Yarn使用了輕量級資源隔離機制Cgroups進行資源隔離以避免相互干擾,一旦Container使用的資源超過事先定義的上限值,就將其殺死。
二.架構
2.1 ResourceManager (RM)
RM是一個全域性資源管理器,負責整個系統的資源管理和分配,它主要有兩個元件構成:
- 排程器(Scheduler)
- 應用程式管理器:Applications Manager,ASM。
排程器
排程器根據容量,佇列等限制條件(如某個分配一定資源,最多執行一定數量的作業等),將系統中資源分配給各個正在執行的應用程式。注意的是,該排程器是一個純排程器,它不再從事任何與應用程式相關的工作,比如不負責重新啟動(因應用程式失敗或硬體故障導致的失敗),這些均交由應用程式相關的ApplicationMaster完成。排程器僅根據各個應用程式的資源需求進行資源分配,而資源分配單位用一個抽象概念 資源容器(Resource Container,即Container),Container是一個動態資源分配單位,它將記憶體、CPU、磁碟、網路等資源封裝在一起,從而限定每個任務使用的資源量。此外,該排程器是一個可插拔的元件,使用者可根據自己的需求設計新的排程器,Yarn提供了多種直接可用的排程器,比如Fair Scheduler和Capacity Scheduler等。
應用程式管理器
應用程式管理器負責整個系統中應用程式,包括應用程式提交、與排程器協商資源以AM、監控AM執行狀態並在失敗是重新啟動它等。
2.2 NodeManager(NM)
NM是每個節點上執行的資源和工作管理員,一方面,它會定時向RM彙報本節點上的資源使用情況和各個Container的執行狀態;另一個方面,它接收並處理來自AM的Container啟動/停止等各個請求。
2.3 ApplicationMaster(AM)
提交的每個作業都會包含一個AM,主要功能:
- 與RM協商以獲取資源(用container表示);
- 將得到任務進一步分配給內部的任務;
- 與NM通訊以啟動/停止任務;
- 監控所有任務的執行狀態,當任務有失敗時,重新為任務申請資源並重啟任務
MapReduce 就是原生支援 ON YARN 的一種框架,可以在 YARN 上執行 MapReduce 作業。有很多分散式應用都開發了對應的應用程式框架,用於在 YARN 上執行任務,例如 Spark,Storm、Flink 等。
2.4 Container
Container是Yarn中資源抽象,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等,當AM向RM申請資源時,RM為AM返回資源便是用Container表示的。Yarn會為每個任務分配一個Container且該任務只能使用該Container中描述資源。
三.執行流程
當使用者向Yarn中提交一個應用程式後,Yarn將分為兩個階段執行該應用程式:
- 啟動ApplicationMaster
- ApplicationMaster建立應用程式,為它申請資源,並監控它的整個執行過程,直到執行完成。
工作流程
- 使用者向Yarn提交應用程式,其中包括ApplicationMaster程式,啟動ApplicationMaster命令、使用者程式等;
- RM為該應用程式分配第一個Container,並與對應的NM通訊,要求它在這個Container中啟動應用程式的ApplicationMaster;
- ApplicationMaster首先向RM註冊,這樣使用者可以直接通過NM檢視應用程式的執行狀態,然後它將為各個任務申請資源,並監控它的執行狀態,直到執行結束,一直重複下面4-7步;
- ApplicationMaster採用輪詢的方式通過RPC協議向RM申請和領取資源;
- 一旦ApplicationMaster申請資源後,便與對應NM通訊,要求它啟動任務;
- NM為任務設定好執行環境(包括環境變數、jar包等)後,將任務啟動命令寫到一個指令碼中,並通過執行該指令碼啟動任務;
- 各個任務通過某個RPC協議向ApplicationMaster彙報自己的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的執行狀態,從而可以在任務失敗時重新啟動任務;
- 應用程式執行完成後,ApplicationMaster向RM登出並關閉自己(當然像 Storm、Flink 這種常駐應用程式列外)。
參考
https://matt33.com/2018/09/01/yarn-architecture-learn/
《Hadoop技術內幕 深入解析YARN架構設計與實現原理》
相關文章
- 架構之:serverless架構架構Server
- SaaS架構:流程架構分析架構
- 【細品架構4/100】架構之架構切分架構
- 架構師修煉之道(二)——架構?設計?架構師?架構
- 單體架構&微服務架構&中臺服務架構架構微服務
- 架構之:資料流架構架構
- 前端架構之小小node架構前端架構
- 邏輯架構和物理架構架構
- 軟體架構與架構師架構
- 單體架構到垂直架構架構
- 架構架構
- 業務架構、資訊架構、技術架構三位一體架構
- 書籍:精益架構(敏捷架構 瘦架構 Lean Architecture)架構敏捷
- 架構演進之「微服務架構」架構微服務
- MySQL 高可用架構之 MMM 架構MySql架構
- 架構之:微服務架構漫談架構微服務
- 架構之:軟體架構漫談架構
- 遊戲架構 遊戲架構設計(8)遊戲架構
- 【架構分析】MESA (EGL/GLES)架構分析架構
- REST架構風格的架構元素REST架構
- 網站架構及架構演變網站架構
- 架構C01: 什麼是架構?為什麼做架構?架構師需要做什麼?架構
- 按照業務領域畫資料架構圖 業務架構 資料架構架構
- 架構師眼中的高併發架構架構
- 架構設計之一——基礎架構架構
- Java架構-到底什麼才是業務架構?Java架構
- 軟體架構模式之微服務架構架構模式微服務
- LNMP架構與LNAMP架構的區別LNMP架構
- IT架構之IT架構模型——思維導圖架構模型
- bs架構與cs架構的區別架構
- 軟體架構風格——規則架構架構
- 架構設計之架構的演變架構
- 業務架構架構
- 聊聊架構架構
- RocketMQ架構MQ架構
- MySql架構MySql架構
- Hive架構Hive架構
- 架構之路架構