作者:幻好

來源:恒生LIGHT云社區

基本概述

Apache YARN (Yet Another Resource Negotiator) 是 Hadoop 中的資源管理和作業調度系統, 在 Hadoop 2.x 時才被引入。

用戶可以將各種服務框架部署在 YARN 上,由 YARN 進行統一地管理和資源分配。

Yarn在 Hadoop2.x 時才被推出,在 Hadoop1.x 時,主要由 MapReduce 進行資源分配,由于考慮到如果 MapReduce 在計算中掛掉了,那么資源調度也將停止工作,于是在新版本中將資源調度這部分功能剝離開,才有 Yarn。

核心架構

Yarn 的主要架構分為四個部分:ResourceManager、NodeManager、ApplicationMaster、Container

ResourceManager

  • ResourceManager 通常在獨立的部署在一臺機器作為應用運行,集群中只有一個,負責整個系統的資源管理和分配。
  • ResourceManager 主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(Applications Manager,ASM)。能夠根據應用程序優先級、隊列容量、數據位置等信息,做出決策,通過安全的、共享的、多租戶的方式制定分配策略,調度集群資源。

NodeManager

  • NodeManager 是 YARN 集群中的每個具體節點的管理者。主要負責該節點內所有容器的生命周期的管理,監視資源和跟蹤節點健康。
  • NodeManager 主要用來處理來自ResourceManagerApplicationMaster的命令。

一個節點啟動時,它會向 ResourceManager 進行注冊并推送可用資源信息。在運行期,通過 NodeManager 和 ResourceManager 協同工作,這些信息會不斷被更新并保障整個集群發揮出最佳狀態。

ApplicationMaster

  • 在用戶提交一個應用程序時,YARN 會啟動一個輕量級的進程ApplicationMaster
  • ApplicationMaster 負責協調來自ResourceManager 的資源,并通過NodeManager 監視容器內資源的使用情況,同時還負責任務的監控與容錯。

ApplicationMaster 將能將數據進行拆分,并根據應用的運行狀態動態匹配資源需求,能夠監控跟蹤任務狀態和進度,報告應用的進度信息。

Container

  • Container是 YARN 中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等。
  • ApplicationMasterResourceManager 申請資源時,ResourceManagerApplicationMaster 返回的資源是用Container 表示的。
  • YARN 會為每個任務分配一個Container,該任務只能使用該Container 中描述的資源。
  • ApplicationMaster 可在Container 內運行任何類型的任務。

工作流程

YARN 應用提交的整個工作流程:

  • 首先客戶端提交任務到 YARN 上,ResourceManager 提交應用并請求一個ApplicationMaster 實例;
  • ResourceManager 會選擇一個可運行的NodeManager,并在Container 中啟動并運行ApplicationMaster 實例;
  • 啟動中的ApplicationMasterResourceManager 注冊自己,啟動成功后與RM保持心跳。
  • ApplicationMasterResourceManager 發送請求,獲取需要的Container 資源;
  • ApplicationMaster 通過獲取到的Container 資源執行分布式計算。
  • 應用運行結束后,ApplicationMasterResourceManager 注銷自己,并允許屬于它的container 被收回。

總結

Yarn 主要在 Hadoop 體系中負責服務資源的調度分配,能夠最大限度的利用機器資源,高效調配,達到資源利用的最大化。