Hadoop-Yarn架構

李孟lm發表於2020-10-01

一.簡介

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將分為兩個階段執行該應用程式:

  1. 啟動ApplicationMaster
  2. ApplicationMaster建立應用程式,為它申請資源,並監控它的整個執行過程,直到執行完成。

圖片

(此圖來自《Hadoop 技術內幕:深入解析 YARN 架構設計與實現原理》)

工作流程

  1. 使用者向Yarn提交應用程式,其中包括ApplicationMaster程式,啟動ApplicationMaster命令、使用者程式等;
  2. RM為該應用程式分配第一個Container,並與對應的NM通訊,要求它在這個Container中啟動應用程式的ApplicationMaster;
  3. ApplicationMaster首先向RM註冊,這樣使用者可以直接通過NM檢視應用程式的執行狀態,然後它將為各個任務申請資源,並監控它的執行狀態,直到執行結束,一直重複下面4-7步;
  4. ApplicationMaster採用輪詢的方式通過RPC協議向RM申請和領取資源;
  5. 一旦ApplicationMaster申請資源後,便與對應NM通訊,要求它啟動任務;
  6. NM為任務設定好執行環境(包括環境變數、jar包等)後,將任務啟動命令寫到一個指令碼中,並通過執行該指令碼啟動任務;
  7. 各個任務通過某個RPC協議向ApplicationMaster彙報自己的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的執行狀態,從而可以在任務失敗時重新啟動任務;
  8. 應用程式執行完成後,ApplicationMaster向RM登出並關閉自己(當然像 Storm、Flink 這種常駐應用程式列外)。

參考

https://matt33.com/2018/09/01/yarn-architecture-learn/

《Hadoop技術內幕 深入解析YARN架構設計與實現原理》

相關文章