天天看點

Hadoop-Yarn架構

一.簡介

YARN(Yet Another Resource Negotiator)是一個通用的資源管理平台,可為各類計算架構提供資源的管理和排程。其核心出發點是為了分離資源管理與作業排程/監控,實作分離的做法是擁有一個全局資料總管(ResourceManager,RM),以及每個應用程式對應一個應用管理器(ApplicationMaster,AM),應用程式由一個作業(Job)或者Job的有向無環圖(DAG)組成。

功能
  • 資源的統一管理和排程:叢集中所有的節點資源(記憶體、CPU、磁盤、網絡等)抽象為Container,Yarn按照特定的政策對資源進行排程進行Container的配置設定。
  • 資源隔離:Yarn使用了輕量級資源隔離機制Cgroups進行資源隔離以避免互相幹擾,一旦Container使用的資源超過事先定義的上限值,就将其殺死。

二.架構

Hadoop-Yarn架構

圖檔來源官網

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架構

(此圖來自《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 這種常駐應用程式列外)。

繼續閱讀