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完成。
關注微信公眾號:大資料學習與分享,獲取更對技術乾貨