天天看點

不可不知的資源管理排程器Hadoop Yarn

Yarn(Yet Another Resource Negotiator)是一個資源排程平台,負責為運算程式如Spark、MapReduce配置設定資源和排程,不參與使用者程式内部工作。同樣是Master/Slave架構。

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

不可不知的資源管理排程器Hadoop 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也提供了多種可直接使用的排程器:

不可不知的資源管理排程器Hadoop 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完成。

繼續閱讀