YARN(YetAnother Resource Negotiator)

YARN(YetAnother Resource Negotiator)

YARN:針對MapReduce在擴展性和多框架支持方面的不足(擴展性受限、單點故障、難以支持MR之外的計算),提出了全新的資源管理框架YARN,它將JobTracker中的資源管理和作業控制功能分開,分別由兩個不同進程ResourceManager和ApplicationMaster實現,其中ResourceManager負責所有應用程序的資源分配,而ApplicationMaster僅僅負責管理一個應用程序。

MapReduce框架的問題主要集中在:

(1)   JobTracker是MapReduce的集中處理點,存在單點故障;

(2)   JobTracker完成了太大的任務,造成了過多的資源消耗:當MapReduce job非常多的時候,會造成很大的內存開銷,也就增加了JobTracker fail的風險(MapReduce只能支持4000節點主機的上限!);

(3)   TaskTracker端:以MapReduce task的數目爲資源的表示過於簡單,沒有考慮到cpu/內存的佔用情況,如果兩個大內存消耗的task被調度在一起,很容易發生內存溢出錯誤;

(4)   在TaskTracker端把資源強制劃分爲map task slot和reduce task slot,如果當系統中只有map task或者只有reduce task時會造成資源浪費;

(5)   源代碼層面分析:一個類做了太多事情,代碼量多大3000多行,造成類的任務不清晰,增加bug修復和版本維護的難度等

MR:離線計算框架;Storm:實時計算框架;Spark:內存計算框架!


YARN基本結構(Container是Yarn作資源隔離所用)

ResourceManager:管理和分配集羣的資源,是集羣的一個單點,通過zookeeper來保存狀態以便failover(容錯)。RM主要包含兩個功能組件:Applications Manager(AM)和Resource Scheduler(RS),其中AM負責接收client的作業提交的請求,爲AppMaster請求Container,並且處理AM的fail;RS負責在多個application之間分配資源,存在queue capacity的限制,RS調度的單位是Resource Container,一個Container是memory,cpu,disk,network的組合。Yarn支持可插拔的調度器!(處理客戶端請求、啓動/監控ApplicationMaster、監控NodeManager、資源分配與調度)

NodeManager:部署在每個節點上的slave,負責啓動container,並且檢測進程組資源使用情況。NodeManager上可以搭載一些簡單的service,比如shuffle service。(單個節點上的資源管理、處理來自ResourceManager的命令、處理來自ApplicationMaster的命令)

ApplicationMaster:每個application的master,負責和Resource Manager協商資源,將相應的Task分配到合適的Container上,並監測Task的執行情況。在和RM協商資源的時候可以加上資源偏好,比如MapReduceMaster爲了本地化會將InputSplit的信息轉化成對應的資源請求。ApplicationMaster將其history文件持久化存儲在HDFS上,並在AM出問題的時候,回放history文件,進行斷點重啓。(數據切分、爲應用程序申請資源,並分配給內部任務、任務監控與容錯)


Yarn模塊架構(Yarn:下一代MapReduce!)

過程:(1)用戶通過JobClient向RM提交作業;(2)RM爲AM分配Container,並請求NM啓動AM;(3)AM啓動後向RM協商Task的資源;(4)獲得資源後AM通知NM啓動Task;(5)Task啓動後向AM發送心跳,更新進度、狀態和出錯信息。

Yarn採用基於事件驅動進制的異步編程模型:一方面使得處理邏輯更加清晰,另一方面較好地改善了併發性。EventHandler對事件的處理過程通過狀態機來描述,handler接受到一個事件後跳轉到另外一個狀態,同時觸發一個動作(通常是產生一個其他類型的event,形成一個事件處理流)。


如下圖RMAppAttempt的狀態機所示,比如在SCHEDULED狀態,接收到CONTAINER_ALLOCATED事件,會跳轉到ALLOCATED狀態,表示已經爲對應的AM分配了Container,同時會觸發一個LAUNCH AM的事件,RM接到該事件會請求NM啓動AM Container。


Yarn採用事件驅動的模式,下面通過對一個作業提交、啓動、執行的分析來說明JobClient、ResourceManager、AppMaster、NodeManager的功能模塊組織和事件處理流程。


JobClient模塊圖

JobClient通過ClientRMProtocol和RM通信,向其提交作業;作業成功啓動後通過MRClientProtocol和MRAppMaster通信,查詢作業和任務的狀態進度信息,作業完成後通過MRClientProtocol和JobHistoryServer通信查詢歷史信息。

ResourceManager:在RM上一個RMApp對象代表一個application,和task類似,application也引入attempt的概念,一個application因爲機器故障等原因application master失敗,RM會重新分配一個AM繼續嘗試。

作業提交到RM後,RM事件流圖


MRAppMaster事件流圖


                                                                       NodeManager模塊和事件流圖


運行在YARN上的軟件

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章