Yarn : 新的計算框架,是一個全局資源管理器,負責整個集羣的資源管理和分配
一. Yarn產生背景
Hadoop1.0MR有侷限性,歸納爲如下幾個方面 :
-
擴展性差
-
可靠性差
-
資源利用率低
-
沒法支持多種計算框架
爲克服Hadoop1.0中MR存在各類問題而提出了Yarn,它將JobTracker中的資源管理和做業控制功能分開,分別由組件ResourceManager和ApplicationMaster實現,其中,ResourceManager負責全部應用程序的資源分配,而ApplicationMaster僅負責管理一個應用程序,進而誕生了全新的通用資源管理框架 - Yarn
二. Yarn基本架構
基本架構
Yarn是資源管理系統,它的基本設計思想是將Hadoop1.0MR中的JobTracker拆分紅兩個獨立的服務 : 一個全局資源管理器ResourceManager和每一個應用程序特有的ApplicationMaster
Yarn整體上仍然是Master/Slave結構,在整個資源管理框架中,ResourceManager爲Master,NodeManager爲Slave,ResourceManager負責對各個NodeManager上的資源進行統一管理和調度.當用戶提交一個應用程序時,須要提供一個用以跟蹤和管理這個程序的ApplicationMaster,它負責向ResourceManager申請資源,並要求NodeManager啓動能夠佔用必定資源的任務
Apache Yarn的基本架構
組件構成
1)調度器:
它僅僅是一個單純的「調度器」,不參與 集羣的其餘任何操做,負責給各個應用程序的資源進行分配,基本分配單位是一個資源抽象概念「Container」,Container封裝了內存和CPU。
2)應用程序管理器(ApplicationMaster)(AM)
應用程序管理器負責整個系統中的全部應用程序,包括:應用程序的提交、與調度器協商資源已啓動ApplicationMaster進程,監控ApplicationMaster運行狀態並在失敗時從新啓動它等
3)Container
Container是YARN的資源抽象,Container封裝了某個節點內存和CPU,當AM向RM申請資源時,RM爲AM 返回的資源用Container表示。負責對各個應用程序的資源進行分配
4)NodeManager(NM)
是每個節點的資源和任務管理器,1會定時向RM彙報它所在節點的資源使用狀況和Container的運行狀態;2能夠處理來自AM發送的Container的啓動/中止等等命令
5)ResourceManager(RM)
全局資源管理器,負責整個集羣集羣的資源管理與分配, RM做爲整個集羣的資源管理與分配的角色,若是出現單點故障(單個節點宕掉),Hadoop2.4.0版本以前,沒法在進行資源管理與分配,Hadoop2.4.0版本出現以後有了HA(高可用),能夠增長RM的可用性(出現單點故障不影響RM運行)
通訊協議
Yarn的通訊協議 - RPC協議,RPC協議是鏈接各個組件的,在Yarn中,任何兩個需相互通訊的組件之間僅有一個RPC協議,而對於任何一個RPC協議,通訊雙方有一端是Client,有一端爲Server,且Client老是主動鏈接Server的,所以,Yarn實際上採用的拉式(pull-based)通訊模型
Yarn的RPC協議
Yarn主要由如下幾個RPC協議組成 :
-
JobClient ---> RM(ApplicationClientProtocol) : JobClient經過該RPC協議提交應用程序,查詢應用程序狀態等
-
Admin ---> RM(ResourceManagerAdministrationProtocol) : Admin經過該協議更新系統配置文件,好比節點黑白名單,用戶隊列權限等
-
AM ---> RM(ApplicationMasterProtocol) : AM經過該RPC協議向RM註冊和撤銷本身,併爲各個任務申請資源
-
AM ---> NM(ContainerManagementProtocol) : AM經過該RPC要求NM啓動或者中止Container,獲取各個Container的使用狀態等信息
-
NM ---> RM(ResourceTracker) : NM經過該RPC協議向RM註冊,並定時發送心跳信息會報當前節點的資源使用狀況和Container運行狀況
任務執行流程
1 用戶向YARN中提交應用程序,其中包括ApplicationMaster程序、啓動ApplicationMaster的命令、用戶程序等
2 ResourceManager爲該應用程序分配第一個Container(這裏能夠理解爲一種資源好比內存),並與對應的Node-Manager通訊,要求它在這個Container中啓動應用程序的ApplicationMaster。
3 ApplicationMaster首先向ResourceManager註冊,這樣用戶能夠直接經過ResourceManage查看應用程序的運行狀態,而後它將爲各個任務申請資源,並監控它的運行狀態,直到運行結束,即重複步驟4~7。
4 ApplicationMaster採用輪詢的方式經過RPC協議向ResourceManager申請和領取資源。
5 一旦ApplicationMaster申請到資源後,便與對應的NodeManager通訊,要求它啓動任務。
6 NodeManager爲任務設置好運行環境(包括環境變量、JAR包、二進制程序等)後,將任務啓動命令寫到一個腳本中,並經過運行該腳本啓動任務。
7 各個任務經過某個RPC協議向ApplicationMaster彙報本身的狀態和進度,以讓ApplicationMaster隨時掌握各個任務的運行狀態,從而能夠在任務失敗時從新啓動任務。在應用程序運行過程當中,用戶可隨時經過RPC向ApplicationMaster查詢應用程序的當前運行狀態。
8 應用程序運行完成後,ApplicationMaster向ResourceManager註銷並關閉本身
三. 多角度理解Yarn
並行編程
單機程序設計,爲了快速處理一個大的數據集,一般採用多線程並行編程,有操做系統啓動主線程,由它切分數據,任務分配,子線程啓動和銷燬等工做,而各個子線程只負責計算本身的數據,當全部子線程處理完數據後,主線程退出
類比,Yarn上的應用程序運行過程與之相近,只不過他是集羣上的分佈式並行編程.Yarn爲應用程序啓動AppMaster(至關主線程),而後由AppMaster負責數據切分,任務分配,啓動和監控等工做,而AppMaster啓動的每一個Task(至關於子線程)僅負責本身的計算任務.當計算完成,AppMaster認爲運行完成,退出
資源管理
資源管理系統的主要功能是對集羣中各種資源進行抽象,並根據各類應用程序或者服務的要求,按照必定的調度策略,將資源分配給他們使用,同時需採用必定的資源隔離機制防止應用程序或者服務之間因資源搶佔而相互干擾
雲計算
廣泛認爲,雲計算包括如下幾個層次的服務 :
-
IaaS : 基礎設施即服務
-
PaaS : 平臺即服務
-
SaaS : 軟件即服務
從雲計算分層概念上講,Yarn可看作PaaS層,它能爲不用類型的應用程序提供統一的管理和調度
我天天會寫文章記錄大數據技術從入門到精通,能夠關注個人公衆號"SmallBird技術分享",咱們一塊兒學習分享,而且回覆'分享'會有大數據資源驚喜等着你~