1. 程式人生 > >YARN的架構及原理

YARN的架構及原理

YARN產生背景
a)JobTracker單點故障
b)JobTracker承受的訪問壓力大,影響系統的擴充套件性
c)不支援MapReduce之外的計算框架,比如storm、spark、flink

什麼是YARN
YARN是Hadoop2.0版本引進的資源管理系統,直接從MR1演化而來。
核心思想:將MR1中的JobTracker的資源管理和作業排程兩個功能分開,分別由ResourceManager和ApplicationMaster程序實現。

ResourceManager:負責整個叢集的資源管理和排程
ApplicationMaster:負責應用程式相關事務,比如任務排程、任務監控和容錯等。

YARN的出現,使得多個計算框架可以執行在同一個叢集之中。
1. 每一個應用程式對應一個ApplicationMaster。
2. 目前可以支援多種計算框架執行在YARN上面,比如MapReduce、storm、Spark、Flink。

YARN的基本架構
這裡寫圖片描述
從YARN的架構來看,它主要由ResourceManager、 NodeManager、ApplicationMaster 和 Container組成

ResourceManager(RM)
RM是一個全域性的資源管理器,負責整個系統的 資源管理和分配。它主要由兩個元件構成:排程器(Schedule)和應用程式管理器(Application Manager, ASM)

YARN分層結構的本質是ResourceManager。這個實體控制整個叢集並管理應用程式向基礎計算資源的分配。ResourceManager將各個資源部分(計算、記憶體、頻寬等)精心安排給基礎NodeManager(YARN的每節點代理)。ResourceManager還與ApplicationMaster一起分配資源,與NodeManager一起啟動和監視它們的基礎應用程式。在此上下文中,ApplicationMaster承擔了以前的TaskTracker的一些角色,ResourceManager承擔了JobTracker的角色。

a)排程器(Schedule)
排程器根據容量、佇列等限制條件(如每個佇列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在執行的應用程式。該排程器是一個“純排程器”,它不再從事任何與具體應用程式相關的工作。

b)應用程式管理器(Application Manager)
應用程式管理器負責管理整個系統中所有的應用程式,包括應用程式提交、排程協調資源以啟動ApplicationMaster、監控ApplicationMaster執行狀態並在失敗時重新啟動它。

ApplicationMaster(AM)
ApplicationMaster管理一個在YARN內執行的應用程式的每個例項。ApplicationMaster負責協調來自ResourceManager的資源,並通過NodeManager監視容器的執行和資源的使用(cpu、記憶體等資源分配)。
請注意,儘管目前的資源更加傳統(CPU核心、記憶體),但未來會帶來基於手頭任務的新資源型別(比如圖形處理單元,或專用處理裝置)。從YARN角度來講,ApplicationMaster是使用者程式碼因此存在潛在安全問題。YARN假設ApplicationMaster存在錯誤或者甚至是惡意的,因此將它們當做無特權的程式碼對待。

NodeManager(NM)
NodeManager管理一個YARN叢集中的每個節點。NodeManager提供針對叢集中每個節點的服務,從監督對一個容器的終身管理到監視資源和跟蹤節點健康。MRv1通過插槽管理Map和Reduce任務執行,而NodeManager管理抽象容器,這些容器代表著可供一個特定應用程式使用的針對每個節點的資源。YARN繼續使用HDFS層。它的主要NameNode主要用於元資料服務,而DataNode用於分散在一個叢集中的複製儲存服務。
NM是每個節點上的資源和工作管理員。一方面,它會定時地向RM彙報本節點上的資源使用情況和各個Container執行狀態;另一方面,它接收並處理來自AM的 Container 啟動/停止等各種請求。

Container
Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如記憶體,CPU,磁碟,網路等。當AM向RM申請資源時,RM為AM返回的資源便是用Container表示的。

YARN會為每個任務分配一個Container,且該任務只能用該Container中描述的資源。
要使用一個YARN叢集,首先需要來自包含一個應用程式的客戶請求。
ResourceManager協商一個容器的必要資源,啟動一個ApplicationMaster來表示已經提交的應用程式。通過使用一個資源請求協議,ApplicationMaster協商每個節點上供應程式使用的資源容器。執行應用程式時,ApplicationMaster監視容器,直到完成。當應用程式完成時,ApplicationMaster從ResourceManager登出其容器,執行週期就完成了。

通過以上的描述,應該明確的一點是,舊的Hadoop架構收到了JobTracker的高度約束,JobTracker負責整個叢集的資源管理和作業排程。新的YARN架構打破了這種模型,允許一個新ResourceManager管理跨應用程式的資源使用,ApplicationMaster負責管理作業的執行。這一更改消除了這一瓶頸,還改善了Hadoop叢集的擴充套件能力,使其擴充套件能力比以前大得多。此外,不同於傳統的MapReduce,YARN允許使用Message Passing Interface 等標準通訊模式,同時執行各種不同的程式設計模型,包括圖形計算、迭代式處理、機器學習和一般叢集計算。

YARN的工作原理
這裡寫圖片描述

MapReduce On YARN
這裡寫圖片描述
MapReduce On YARN
a)YARN負責資源管理和排程
b)ApplicationMaster負責任務管理

MapReduce  ApplicationMaster
a)MRAppMaster
b)每個MapReduce作業啟動一個MRAppMaster
c)MRAPPMaster負責任務切分、任務排程、任務監控、容錯等

MRAPPMater任務排程
a)YARN將資源分配給MR APPMaster
b)MRAPPMaster進一步將資源分配給內部任務

MRAPPMaster容錯
a)MRAPPMaster執行失敗後,由YARN重新啟動
b)任務執行失敗後,MRAPPMaster重新申請資源

YARN HA
這裡寫圖片描述
ResourceManager HA 由一對 Active,Standby節點構成,通過RMStataStore儲存內部資料和主要應用的資料及標記。
目前支援的可替代的 RMStateStore實現有:基於記憶體的 MemoryRMStateStore,基於檔案系統的FileSystemRMStateStore,及基於Zookeeper的ZKRMStateStore。
ResourceManager HA的架構模式同NameNode HA的架構模式基本一致,資料共享由RMStateStore,而ZKFC稱為ResourceManager程序的一個服務,非獨立存在。