不可不知的資源管理調度器Hadoop Yarn

Yarn(Yet Another Resource Negotiator)是一個資源調度平台,負責為運算程序如Spark、MapReduce分配資源和調度,不參與用戶程序內部工作。同樣是Master/Slave架構。

以下圖MapReduce提交到Yarn上運行為例,看看Yarn主要包括哪些核心組件以及每個組件的作用:

 

全局資源管理器(ResourceManager)

主節點,全局資源管理器,負責整個系統的資源管理和分配,主要由調度器和應用程序管理器組成。
調度器根據容量、隊列等限制條件(如每個隊列分配多少資源、最多執行一定數量的作業等)將系統中資源分配給各個正在運行的應用程序。
應用程序管理器(ApplicationsManager)負責管理整個系統中所有應用程序,包括應用程序提交、與調度器協商資源以啟動、監控Application Master,並且在失敗時重新啟動它等

節點資源管理器(NodeManager) 

從節點,每個節點上的資源和任務管理器,它需要向ResourceManager彙報本節點上的資源使用情況和各個Container的運行狀態,同時接收並處理來自Application Master的Container啟動/停止等各種請求


應用管理器(Application Master)

用戶提交的每個應用程序均包含1個應用管理器,對應到運行MapReduce為MRAppMaster,主要功能包括:

1. 向全局資源管理器申請資源

2. 將得到的資源進一步分配給內部的任務

3. 與節點資源管理器通信以啟動/停止任務

4. 監控所有任務運行狀態,並在任務運行失敗時重新為任務申請資源以重啟任務


Container

可以理解為Yarn中為某個節點已經申請到的資源封裝的類,資源如內存、CPU等,是根據應用程序需求動態生成的,是Yarn中基本資源劃分單位。一個NodeManager節點上同時存在多個Container。提交作業的每個task都運行在Container中


Yarn調度器

根據一些限制條件如每個隊列分配多少資源、最多執行多少數量的作業,將系統中資源按照應用程序的資源需求分配給各個應用程序,資源分配單位就是上文提到的container,並且用戶可以根據自己的需求設計新的調度器,目前Yarn也提供了多種可直接使用的調度器:

 


FIFOScheduler(先進先出調度器):不支持搶佔先機。如果有運行特別慢的任務,會影響其他任務

FairScheduler(公平調度器):每個用戶公平共享集群資源,支持搶佔先機,如果有的任務長時間佔用大量資源,超出其應該分配的資源比例,會終止得到過多資源的任務

CapacityScheduler(容量調度器):有層次結構的隊列,每個隊列分配一定的容量(比如將小job和大job分配到不同的隊列),單個隊列內部支持FIFO

筆者強調:

1. Yarn並不清楚用戶提交程序的運行機制,只提供運算資源的調度(用戶程序向yarn申請資源,yarn負責分配資源)

2. Yarn中的主管角色是ResourceManager,具體提供運算資源的角色是NodeManager

3. Yarn與運行的用戶程序完全解耦,意味着Yarn上可以運行各種類型的分佈式運算程序,如Spark、MapReduce、Storm、Tez等,前提是這些技術框架中有符合Yarn規範的資源請求機制即可

4. 因為Yarn不參與用戶程序的執行等,使得Yarn成為一個通用的資源調度平台。企業中以前存在的各種計算引擎集群都可以整合在一個資源管理平台上,提高資源利用率

5. 調度器不參與任何與具體應用程序相關的工作,如不負責監控或者跟蹤應用的執行狀態等,也不負責重新啟動因應用執行失敗或者硬件故障而產生的失敗任務,這些均交由應用程序相關的Application Master完成。


關注微信公眾號:大數據學習與分享,獲取更對技術乾貨