Hadoop系列(九)Hadoop三大核心之Yarn-資源調度詳解

Yarn的調度流程詳解

  1. Client端提交作業到ResourceManager中的ApplicationManager,申請JobID(唯一ID)

  2. RM返回一個作業ID,並且將一個臨時hdfs路徑返回給 Client,要求Client將要上傳的文件發送到這個臨時目錄中。(任務結束後,該臨時目錄將被刪除)

  3. Client將作業運行所需要的資源(jar包、配置文件和分片信息等)向指定的HDFS路徑上傳

  4. 上傳成功後,向RM中的AM發送請求,執行作業

  5. AM將請求轉發給調度器,調度器開始處理請求

  6. 調度器將任務放置隊列中,當執行到請求的時候,則告知ApplicationManager 可以分配容器,告知NodeManager的信息用於開闢Container

  7. ApplicationManager命令NodeManager創建一個Container並運行作業的ApplicationMaster。NodeManager創建一個Container並啓動作業的ApplicationMaster。ApplicationMaster將自己註冊到ApplicationManager,使得ApplicationManager可以監控到Job的執行狀態,Client也可以通過ApplicationManager對作業進行控制。

  8. ApplicationMaster查詢臨時hdfs路徑,獲取jar包信息,配置文件等,創建map和reduce任務

  9. ApplicationMaster請求調度器分配資源,開闢map,reduce任務資源

  10. 調度器返回執行信息,內含在哪些NodeManager可開闢資源信息

  11. ApplicationMaster通知NodeManager開闢資源池啓動map和reduce任務

  12. NodeManager 啓動自身資源池中的任務

  13. map、reduce任務查詢臨時hdfs路徑的數據。開始執行。ApplicationMaster實時監控自己管理的map、reduce任務執行情況,如果失敗,請求調度器在新節點中開闢資源池,執行失敗的程序。ApplicationManager實時監控自己管理的ApplicationMaster執行情況,如果ApplicationMaster 宕機,創建一個新的ApplicationMaster,繼續監控原有的map和reduce任務,在此期間,map、reduce任務不受影響

  14. 程序成功,釋放資源

Yarn的調度策略

  • FIFO調度
  • 容量調度
  • 公平調度

1.FIFO先進先出調度

這種調度最簡單,將應用放置在一個隊列中,然後按照提交的順序將所有的Applications放到隊列中,先按照作業的優先級高低、再按照到達時間的先後,爲每個app分配資源。如果第一個app需要的資源被滿足了,如果還剩下了資源並且滿足第二個app需要的資源,那麼就爲第二個app分配資源。

優點:簡單,不需要配置。

缺點:不適合共享集羣。如果有大的app需要很多資源,那麼其他app可能會一直等待。

2.Capacity 容量調度機制

容量調度機制適用於一個集羣(集羣被多個組織共享)中運行多個Application的情況,目標是最大化吞吐量和集羣利用率。

容量調度允許將整個集羣的資源分成多個部分,每個組織使用其中的一部分,即每個組織有一個專門的隊列,每個組織的隊列還可以進一步劃分成層次結構(Hierarchical Queues),從而允許組織內部的不同用戶組的使用。

每個隊列內部,按照FIFO的方式調度Applications。當某個隊列的資源空閒時,可以將它的剩餘資源共享給其他隊列。

實例:

有一個專門的隊列允許小的apps提交之後能夠儘快執行,job1先提交到queueA,並沒有佔用系統的全部資源(假如job1需要100G內存,但是整個集羣只有100G內存,那麼只分配給job1 80G),job2可提交到queueB 中快速執行。

3.Fair 公平調度機制

FairScheduler允許應用在一個集羣中公平地共享資源。默認情況下FairScheduler的公平調度只基於內存,也可以配置成基於memory & CPU。當集羣中只有一個app時,它獨佔集羣資源。當有新的app提交時,空閒的資源被新的app使用,這樣最終每個app就會得到大約相同的資源。可以爲不同的app設置優先級,決定每個app佔用的資源百分比。FairScheduler可以讓短的作業在合理的時間內完成,而不必一直等待長作業的完成。

Fair Sharing: Scheduler將apps組織成queues,將資源在這些queues之間公平分配。默認情況下,所有的apps都加入到名字爲“default“的隊列中。app也可以指定要加入哪個隊列中。隊列內部的默認調度策略是基於內存的共享策略,也可以配置成FIFO和multi-resource with Dominant Resource Fairness

Minimum Sharing:FairScheduller提供公平共享,還允許指定minimum shares to queues,從而保證所有的用戶以及Apps都能得到足夠的資源。如果有的app用不了指定的minimum的資源,那麼可以將超出的資源分給別的app使用。

FairScheduler默認讓所有的apps都運行,但是也可以通過配置文件配置每個queue中的分配權重,若權重1:1,當兩個queue同時執行任務時,各分到一半資源。

實例:

兩個用戶A和B。A提交job1時集羣內沒有正在運行的app,因此job1獨佔集羣中的資源。用戶B的job2提交時,job2在job1釋放一半的containers之後,開始執行。job2還沒執行完的時候,用戶B提交了job3,job2釋放它佔用的一半containers之後,job3獲得資源開始執行。

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