YARN 原理簡介


YARN 組件

參考:Spark on Yarn | Spark,從入門到精通

YARN 采用 Master/Slave結構 ,包含ResourceManager 和 NodeManager
ResourceManager 是 Master;
NodeManager 是 Slave。

YARN的基本思想是將資源管理和作業調度/監視功能划分為單獨的守護進程。
其實現為擁有一個全局ResourceManager (RM)和每個應用程序的ApplicationMaster (AM)。
應用程序可以是單個作業,也可以是一組作業。
從大體看,YARN的調度架構可以分為兩層
第一層調度是ResourceManager 和 NodeManager;
第一層調度.png
第二層調度是 NodeManager 和 Container
第一層調度.png
通過采用雙層調度結構將 Scheduler 管理的資源由細粒度的 (cpu、內存、磁盤、網絡)變成了粗粒度的 Container,降低了負載。
在 App Manager 組件中也只需要管理 App Master,不需要管理任務調度執行的完整信息,同樣降低了負載。通過降低 ResourceManager 的負載,變相地提高了集群的擴展性。
ResourceManager和NodeManager構成數據計算框架。ResourceManager是在系統中的所有應用程序之間仲裁資源的最終權威。NodeManager是每台機器的框架代理,負責監視containers的資源使用情況(cpu、內存、磁盤、網絡),並向ResourceManager/Scheduler報告相同的情況。
每個應用程序ApplicationMaster實際上是一個特定於框架的庫,它的任務是與ResourceManager協商資源,並與NodeManager一起執行和監視任務。
ResourceManager有兩個主要組件:Scheduler和ApplicationsManager。

  • Scheduler
    Scheduler負責根據密集的容量、隊列等約束將資源分配給各種正在運行的應用程序。
    Scheduler是純粹調度器,因為它不執行對應用程序狀態的監視或跟蹤。
    此外,它也不能保證由於應用程序故障或硬件故障而重新啟動失敗的任務。
    Scheduler根據應用程序的資源需求執行調度功能;
    它是基於資源containers的抽象概念實現的,資源containers包含內存、cpu、磁盤、網絡等元素。
  • ApplicationsManager
    ApplicationsManager負責接受作業提交,協商執行特定於應用程序的ApplicationMaster的第一個容器,並提供在出現故障時重新啟動ApplicationMaster容器的服務。
    每個應用程序ApplicationMaster負責與調度程序協商適當的資源容器,跟蹤它們的狀態並監視進度。

Yarn 的運作流程

Yarn的運作流程.png

  1. Client 向 ResourceManager 的 App Manager 提交應用並請求一個 AppMaster 實例;
  2. App Manager 向 Scheduler 獲取可以運行一個 Container 的 NodeManager
  3. Scheduler 返回一個可以運行一個 Container 的 NodeManager 給 App Manager
  4. App Manager 在返回對 NodeManager 上啟動一個Container,並在這個Container上啟動 App Master 實例
  5. App Master 向 App Manager注冊
  6. 完成注冊客戶端就可以查詢 ResourceManager 獲得自己 App Master 的詳情以及直接和 App Master 交互
  7. 根據交互情況 App Master 向 向App Manager 請求資源,即 Container
  8. App Manager 收到請求后從 Scheduler 獲取到分配資源的信息 返回給 App Master 。
  9. App Master在對應的 NodeManager 上啟動 Container 並執行 Task
  10. Container 執行過程中會把運行進度和狀態等信息發送給 AppMaster
  11. Client 和 App Master 交流應用的運行狀態、進度更新等信息
  12. 所有任務完后成 App Master 向 App Manager 取消注冊然后關閉,同時所有的 Container 也歸還給系統。

Scheduler 策略

Scheduler 策略 有下列幾種:FIFO Scheduler、Capacity Scheduler、Fair Scheduler

  • FIFO Scheduler
    如果沒有配置Scheduler 策略的話,所有的任務都提交到一個 default 隊列,根據它們的提交順序執行。
    如果資源充足執行任務,若資源緊張就等待前面的任務執行完畢后釋放資源,這就是 FIFO Scheduler 先入先出的分配方式。
    FIFO Scheduler .png
  • Capacity Scheduler
    Capacity Scheduler 是一種多租戶、彈性的分配方式。
    支持多個隊列,每個隊列可配置一定量的資源,每個采用FIFO的方式調度。
    每個租戶一個隊列,每個隊列可以配置能使用的資源上限與下限(如 50%,達到這個上限后即使其他的資源空置着,也不可使用),通過配置可以令隊列至少有資源下限配置的資源可使用。
    Capacity Scheduler .png
  • Fair Scheduler
    Fair Scheduler 是一種公平的分配方式,所謂的公平就是集群會盡可能地按配置的比例分配資源給隊列。
    Job1 提交給隊列 A,它占用了集群的所有資源。
    接着 Job2 提交給了隊列 B,這時 Job1 就需要釋放它的一半的資源給隊列 A 中的 Job2 使用。
    接着 Job3 也提交給了隊列 B,這個時候 Job2 如果還未執行完畢的話也必須釋放一半的資源給 Job3。
    這就是公平的分配方式,在隊列范圍內所有任務享用到的資源都是均分的。
    Fair Scheduler  .png

Yarn HA(容災備援)

  1. Container 故障:Resource Manager 可以分配其他的 Container 繼續執行
  2. App Master 故障:分配新的 Container,啟動 App Master,新的 App Master 從 App Manager 獲取相關恢復信息
  3. NodeManager 故障:移除這個節點,在其他的 NodeManager 重啟繼續任務。
  4. ResourceManager 故障:在 Yarn 集群中,ResourceManager 可以啟動多台,只有其中一台是 active 狀態的,其他都處於待命狀態。
    這台 active 狀態的 ResourceManager 執行的時候會向 ZooKeeper 集群寫入它的狀態;
    當它故障的時候這些 RM 首先選舉出另外一台 leader 變為 active 狀態,然后從 ZooKeeper 集群加載 ResourceManager 的狀態;
    在轉移的過程中它不接收新的 Job,轉移完成后才接收新 Job。
    Yarn HA.png


免責聲明!

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



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