Yarn詳解


一、yarn的基本思想

  yarn是Hadoop 2.0中的資源管理系統,它的基本思想是將JobTracker 的兩個主要功能(資源管理和作業調度/監控)分離,主要方法是創建一個全局的ResourceManager(RM)和若干個針對應用程序的ApplicationMaster(AM)。其中RM負責整個系統的資源管理和分配,而AM負責單個應用程序的管理。這里的應用程序指的是傳統的Mapreduce作業或作業的DAG(有向無環圖)。

二、Yarn組件

 1.RsourceManager

  RM是一個全局的資源管理器,管理整個集群的計算資源,並將這些資源分配給應用程序。包括:

  • 與客戶端交互,處理來自客戶端的請求。
  • 啟動和管理applicationManager(AM),並在它失敗的時候重新啟動它。
  • 管理NodeManager,接收來自NodeManager的資源匯報信息,並向NodeManager下達管理指令
  • 資源管理與調度,接收來自AM的資源申請請求,並為之分配資源。

RM 關鍵配置參數:

  最小容器內存:yarn.scheduler.mininum-allocation-mb

  容器內容容量:yarn.scheduler.increment-allocation-mb

  最大容器內存:yarn.scheduler.maxinum-allocation-mb

 

2.ApplicationMaster(AM)

  應用程序級別的,管理運行在YARN上的應用程序。包括:

  • 用戶提交的每個應用程序均包含一個AM,它可以運行在RM以外的機器上。
  • 負責與RM調度器協商以獲取資源(以container表示)
  • 將得到的資源進一步分配給內部的任務(資源的二次分配)
  • 與NodeManager通信以啟動或停止任務
  • 監控所有任務運行狀態,並在任務運行失敗時重新為任務申請資源以重啟任務

3.NodeManager

  YARN的每個節點上的代理,管理HADOOP集群中單個計算節點。包括:

  • 啟動和監視節點的計算容器(container)
  • 以心跳的形式向RM匯報本節點上的資源使用情況和各個container的運行狀態(cpu和內存等資源)
  • 接收並處理來自AM的container 啟動/停止等各種請求

4.container

  container是YARN中抽象的資源,它封裝了某個節點上的多緯度資源,如內存、cpu、磁盤、網絡等。

container由AM向RM申請的,有RM種的資源調度器異步分配給AM。container的運行是由AM向資源所在的nodeManager發起。

一個應用程序所需的container分為兩大類:

  1. 運行AM的container:這是由RM申請和啟動的,用戶提交應用程序是,它可以指定唯一的AM所需的資源
  2. 運行各類任務的container:這是由AM向RM申請的,由AM與NodeManager通信來啟動

以上兩類Container可能在任意節點上,他們的位置通常是隨機的,即AM可能與它管理的任務運行在一個節點上。

 

三、yarn提交流程

  1. client向RM提交應用程序,其中包括啟動該應用的AM的必須信息,例如AM程序、啟動AM的命令、用戶程序等。
  2. RM啟動一個container用於運行AM。
  3. 啟動中的AM向RM注冊自己,啟動成功后與RM保存心跳。
  4. AM向RM發送請求,申請相應數目的container。
  5. RM返回AM申請的containers信息。申請成功的container,由AM進行初始化。container的啟動信息初始化后,AM與對應的NodeManager通信,要求nodeManager啟動container。AM與nodeManger保持心跳,從而對AM上的任務進行監控和管理。
  6. container運行期間,AM對container進行監控。container通過RPC協議向對應的AM匯報自己的進度和狀態等信息。
  7. 應用程序運行期間,client直接與AM通信獲取應用的狀態,進度更新等信息。
  8. 應用程序結束后,AM向RM注銷自己,並允許屬於它的container被收回。

五、yarn shell

  顯示正在執行的yarn程序:yarn application -list

  停止指定的yarn程序:yarn application -kill <application_id>

  查看指定的yarn程序:yarn application -status <application_id>

  查看指定的yarn程序的嘗試列表:yarn applicationattemp -list <application_id>

  查看指定的yarn程序的container列表:yarn container -list <application_id>

  查看指定的container信息:yarn container -status <container id>

  查看nodeManager列表:yarn node -list

  查看nodeManager信息:yarn node -status <node-id>

六、資源調度器

  FIFO調度器

  FIFO調度器的郵件的簡單易懂不需要任何配置,但是不適合共享集群。大型應用會占用集群中的所有資源,所以每個應用必須等待直到輪到自己運行。在一個共享集群中,更適合容量調度器或者公平調度器。這兩種調度器都允許長時間運行的作業能及時完成,同時也允許正在進行較小的臨時查詢的用戶能夠在合理時間內得到返回結果。

  容量調度器

  容量調度器允許多個組織共享一個hadoop集群,每個組織可以分配到全部集群資源的一部分。每個組織被配置一個專門的隊列,每個隊列被配置為可以使用一定的集群資源,隊列可以進一步按層次划分,這樣每個組織內的不同用戶能夠共享該組織隊列所分配的資源。在一個隊列中,使用FIFO調度策略對應用進行調度。

  單個作業使用的資源不回超過其隊列容量。然而如果隊列中有多個作業,並且隊列資源不夠呢?這時如果仍有可用的空閑資源,那么容量調度器可能會將空余的資源分配給隊列中的作業,哪怕這會超出隊列容量。這被稱為彈性隊列。

  資源調度器 Fair

  公平調度是一種對全局資源,對於所有應用作業來說,都均勻分配的資源分配方法。默認情況,公平調度器FairScheduler基於內存來安排公平調度策略。也可以配置為同時基於內存和CPU來調度。在一個隊列中,可以使用FIFO、FAIR、DRF調度策略來對應用進行調度。FairScheduler允許保障性的分配最小資源到隊列。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM