1. 程式人生 > >YARN架構的工作流程和排程機制總結

YARN架構的工作流程和排程機制總結

YARN 是一個資源管理、任務排程的框架,主要包含三大模組:ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM).

1).ResourceManager 負責所有資源的監控、分配和管理;

2).ApplicationMaster 負責每一個具體應用程式的排程和協調;

3).NodeManager 負責每一個節點的維護。對於所有的 applications,RM 擁有絕對的控制權和對資源的分配權。而每個 AM 則會和RM 協商資源,同時和 NodeManager 通訊來執行和監控 task。

  • yarn的工作流程

1)client 向 RM 提交應用程式,其中包括啟動該應用的 ApplicationMaster 的必須資訊,例如 ApplicationMaster 程式、啟動 ApplicationMaster 的命令、使用者程式等。

2)ResourceManager 啟動一個 container 用於執行 ApplicationMaster。啟動中的 ApplicationMaster 向 ResourceManager 註冊自己,啟動成功後與 RM 保持心跳。

3)ApplicationMaster 向 ResourceManager 傳送請求,申請相應數目的 container。

4)ResourceManager 返回 ApplicationMaster 的申請的 containers 資訊。申請成功的container,由 ApplicationMaster 進行初始化。container 的啟動資訊初始化後,AM與對應的 NodeManager 通訊,要求 NM 啟動 container。AM 與 NM 保持心跳,從而對 NM上執行的任務進行監控和管理。

5) container 執行期間,ApplicationMaster 對 container 進行監控。container 通過 RPC協議向對應的 AM 彙報自己的進度和狀態等資訊。

6) 應用執行期間,client 直接與 AM 通訊獲取應用的狀態、進度更新等資訊。

7) 應用執行結束後,ApplicationMaster 向 ResourceManager 登出自己,並允許屬於它的container 被收回。

  • 排程器 Scheduler

Yarn中,負責給應用分配資源的就是  Scheduler,三種排程器可以選擇:FIFO Scheduler ,Capacity Scheduler,FairScheduler。

1. FIFO Scheduler

FIFO Scheduler 把應用按提交的順序排成一個佇列,這是一個 先進先出佇列,在進行資源分配的時候,先給佇列中最頭上的應用進行分配資源,待最頭上的應用需求滿足後再給下一個分配,以此類推。

2. Capacity Scheduler

Capacity 排程器允許多個組織共享整個叢集,每個組織可以獲得叢集的一部分計算能力。通過為每個組織分配專門的佇列,然後再為每個佇列分配一定的叢集資源,這樣整個叢集就可以通過設定多個佇列的方式給多個組織提供服務了。除此之外,佇列內部又可以垂直劃分,這樣一個組織內部的多個成員就可以共享這個佇列資源了,在一個佇列內部,資源的排程是採用的是先進先出(FIFO)策略。

3.Fair Scheduler

在 Fair 排程器中,我們不需要預先佔用一定的系統資源,Fair 排程器會為所有執行的job 動態的調整系統資源。如下圖所示,當第一個大 job 提交時,只有這一個 job 在執行,此時它獲得了所有叢集資源;當第二個小任務提交後,Fair 排程器會分配一半資源給這個小任務,讓這兩個任務公平的共享叢集資源。