作者:幻好

來源:恒生LIGHT云社區(qū)

基本概述

Apache YARN (Yet Another Resource Negotiator) 是 Hadoop 中的資源管理和作業(yè)調(diào)度系統(tǒng), 在 Hadoop 2.x 時(shí)才被引入。

用戶可以將各種服務(wù)框架部署在 YARN 上,由 YARN 進(jìn)行統(tǒng)一地管理和資源分配。

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

核心架構(gòu)

Yarn 的主要架構(gòu)分為四個(gè)部分:ResourceManager、NodeManager、ApplicationMaster、Container

ResourceManager

  • ResourceManager 通常在獨(dú)立的部署在一臺(tái)機(jī)器作為應(yīng)用運(yùn)行,集群中只有一個(gè),負(fù)責(zé)整個(gè)系統(tǒng)的資源管理和分配。
  • ResourceManager 主要由兩個(gè)組件構(gòu)成:調(diào)度器(Scheduler)和應(yīng)用程序管理器(Applications Manager,ASM)。能夠根據(jù)應(yīng)用程序優(yōu)先級(jí)、隊(duì)列容量、數(shù)據(jù)位置等信息,做出決策,通過安全的、共享的、多租戶的方式制定分配策略,調(diào)度集群資源。

NodeManager

  • NodeManager 是 YARN 集群中的每個(gè)具體節(jié)點(diǎn)的管理者。主要負(fù)責(zé)該節(jié)點(diǎn)內(nèi)所有容器的生命周期的管理,監(jiān)視資源和跟蹤節(jié)點(diǎn)健康。
  • NodeManager 主要用來處理來自ResourceManager 、ApplicationMaster的命令。

一個(gè)節(jié)點(diǎn)啟動(dòng)時(shí),它會(huì)向 ResourceManager 進(jìn)行注冊(cè)并推送可用資源信息。在運(yùn)行期,通過 NodeManager 和 ResourceManager 協(xié)同工作,這些信息會(huì)不斷被更新并保障整個(gè)集群發(fā)揮出最佳狀態(tài)。

ApplicationMaster

  • 在用戶提交一個(gè)應(yīng)用程序時(shí),YARN 會(huì)啟動(dòng)一個(gè)輕量級(jí)的進(jìn)程ApplicationMaster。
  • ApplicationMaster 負(fù)責(zé)協(xié)調(diào)來自ResourceManager 的資源,并通過NodeManager 監(jiān)視容器內(nèi)資源的使用情況,同時(shí)還負(fù)責(zé)任務(wù)的監(jiān)控與容錯(cuò)。

ApplicationMaster 將能將數(shù)據(jù)進(jìn)行拆分,并根據(jù)應(yīng)用的運(yùn)行狀態(tài)動(dòng)態(tài)匹配資源需求,能夠監(jiān)控跟蹤任務(wù)狀態(tài)和進(jìn)度,報(bào)告應(yīng)用的進(jìn)度信息。

Container

  • Container是 YARN 中的資源抽象,它封裝了某個(gè)節(jié)點(diǎn)上的多維度資源,如內(nèi)存、CPU、磁盤、網(wǎng)絡(luò)等。
  • 當(dāng)ApplicationMasterResourceManager 申請(qǐng)資源時(shí),ResourceManagerApplicationMaster 返回的資源是用Container 表示的。
  • YARN 會(huì)為每個(gè)任務(wù)分配一個(gè)Container,該任務(wù)只能使用該Container 中描述的資源。
  • ApplicationMaster 可在Container 內(nèi)運(yùn)行任何類型的任務(wù)。

工作流程

YARN 應(yīng)用提交的整個(gè)工作流程:

  • 首先客戶端提交任務(wù)到 YARN 上,ResourceManager 提交應(yīng)用并請(qǐng)求一個(gè)ApplicationMaster 實(shí)例;
  • ResourceManager 會(huì)選擇一個(gè)可運(yùn)行的NodeManager,并在Container 中啟動(dòng)并運(yùn)行ApplicationMaster 實(shí)例;
  • 啟動(dòng)中的ApplicationMasterResourceManager 注冊(cè)自己,啟動(dòng)成功后與RM保持心跳。
  • ApplicationMasterResourceManager 發(fā)送請(qǐng)求,獲取需要的Container 資源;
  • ApplicationMaster 通過獲取到的Container 資源執(zhí)行分布式計(jì)算。
  • 應(yīng)用運(yùn)行結(jié)束后,ApplicationMasterResourceManager 注銷自己,并允許屬于它的container 被收回。

總結(jié)

Yarn 主要在 Hadoop 體系中負(fù)責(zé)服務(wù)資源的調(diào)度分配,能夠最大限度的利用機(jī)器資源,高效調(diào)配,達(dá)到資源利用的最大化。