作者:幻好
來源:恒生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
主要用來處理來自ResourceManager
、ApplicationMaster
的命令。
一個節點啟動時,它會向 ResourceManager 進行注冊并推送可用資源信息。在運行期,通過 NodeManager 和 ResourceManager 協同工作,這些信息會不斷被更新并保障整個集群發揮出最佳狀態。
ApplicationMaster
- 在用戶提交一個應用程序時,YARN 會啟動一個輕量級的進程
ApplicationMaster
。 ApplicationMaster
負責協調來自ResourceManager
的資源,并通過NodeManager
監視容器內資源的使用情況,同時還負責任務的監控與容錯。
ApplicationMaster 將能將數據進行拆分,并根據應用的運行狀態動態匹配資源需求,能夠監控跟蹤任務狀態和進度,報告應用的進度信息。
Container
Container
是 YARN 中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等。- 當
ApplicationMaster
向ResourceManager
申請資源時,ResourceManager
為ApplicationMaster
返回的資源是用Container
表示的。 - YARN 會為每個任務分配一個
Container
,該任務只能使用該Container
中描述的資源。 ApplicationMaster
可在Container
內運行任何類型的任務。
工作流程
YARN 應用提交的整個工作流程:
- 首先客戶端提交任務到 YARN 上,
ResourceManager
提交應用并請求一個ApplicationMaster
實例; ResourceManager
會選擇一個可運行的NodeManager
,并在Container
中啟動并運行ApplicationMaster
實例;- 啟動中的
ApplicationMaster
向ResourceManager
注冊自己,啟動成功后與RM保持心跳。 ApplicationMaster
向ResourceManager
發送請求,獲取需要的Container
資源;ApplicationMaster
通過獲取到的Container
資源執行分布式計算。- 應用運行結束后,
ApplicationMaster
向ResourceManager
注銷自己,并允許屬于它的container
被收回。
總結
Yarn 主要在 Hadoop 體系中負責服務資源的調度分配,能夠最大限度的利用機器資源,高效調配,達到資源利用的最大化。