一、概述
Yarn是一個資源調度平臺,負責爲運算程序提供服務器運算資源,至關於一個分佈式的操做系統平臺,而MapReduce等運算程序則至關於運行於操做系統之上的應用程序。服務器
Yarn的架構以下圖所示:網絡
從Yarn的架構圖來看,他主要由ResourceManager、NodeManager、ApplicationMaster和Container等一下幾個組件構成。架構
1)ResourceManager 分佈式
Yarn分層結構的本質是ResourceManager,這個實體控制整個集羣並管理應用程序向基礎計算資源的分配。Resourcemanager將各個資源(計算,內存,帶寬等)精心安排給基礎NodeManager。ResourceManager還與ApplicationMaster一塊兒分配資源,與NodeManager一塊兒啓動和監視他們的基礎應用程序。post
總的來講,RM有如下功能:操作系統
(1)處理客戶端的請求blog
(2)啓動和監控ApplicationMaster內存
(3)監控NodeManager資源
(4)資源分配與調度rpc
2)ApplicationMaster
ApplicationMaster管理在Yarn內運行的每一個應用程序。負責協調來自RM的資源,並經過NodeManager監控容器的執行和資源的使用(CPU、內存等的資源分配)。整體來講,AM有如下做用
(1)負責數據的切分
(2)爲應用程序申請資源並分配給內部的任務
(3)任務的監控與容錯
3)NodeManager
NodeManager管理Yarn集羣中的每一個節點,並提供針對集羣每一個節點的服務,從監督一個容器的終生管理到監視資源和跟蹤節點健康。而NodeManager管理抽象容器,這些容器表明着可供一個特定應用程序使用的針對每一個節點的資源。
整體來講,NM有如下做用
(1)管理單個節點上的資源
(2)處理來自ResourceManager的命令
(3)處理來自ApplicationMaster的命令
4)、Container
Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM爲AM返回的資源即是用Container表示的。YARN會爲每一個任務分配一個Container,且該任務只能使用該Container中描述的資源。
總的來講,Container有如下做用
對任務運行環境進行抽象,封裝CPU、內存等多維度的資源以及環境變量、啓動命令等任務運行相關的信息
二、Yarn的運行機制
運行流程步驟爲:
(1)用戶向Yarn提交應用程序(job Application),jar文件,其中包裹着ApplicationMaster程序,啓動ApplicationMaster的命令等
(2)RM爲該job分配第一個Container,並選中一個NodeManager在其上運行job的ApplicationMaster
(3)ApplicationMaster向ApplicationsManager註冊,這樣就能夠在RMWeb界面查詢這個job的運行狀態
(4)ApplicationMaster採用輪詢的方式經過RPC協議向RM申請和領取資源
(5)一旦ApplicationMaster拿到資源,就與對應的NM通訊,要求啓動任務。
(6)NodeManager爲任務設置好運行環境(jar包等),將任務命令寫在一個腳本里。並經過該腳本啓動任務 task。
(7)各個task經過rpc協議向ApplicationMaster彙報本身的狀態和進度,以此讓ApplicationMaster隨時掌握各個task的運行狀態。
(8)ApplicationMaster向ApplicationsManger註銷且關閉本身。
整體來講,分爲兩步:
一、啓動ApplicationMaster,申請資源
二、運行任務,直到任務運行完成。