溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Hadoop 系列(二)—— 集群資源管理器 YARN

發(fā)布時(shí)間:2020-06-15 22:06:06 來源:網(wǎng)絡(luò) 閱讀:647 作者:heibaiying 欄目:大數(shù)據(jù)

一、hadoop yarn 簡(jiǎn)介

Apache YARN (Yet Another Resource Negotiator) 是 hadoop 2.0 引入的集群資源管理系統(tǒng)。用戶可以將各種服務(wù)框架部署在 YARN 上,由 YARN 進(jìn)行統(tǒng)一地管理和資源分配。

<div align="center"> <img width="600px" src="https://raw.githubusercontent.com/heibaiying/BigData-Notes/master/pictures/yarn-base.png"/> </div>

二、YARN架構(gòu)

Hadoop 系列(二)—— 集群資源管理器 YARN

1. ResourceManager

ResourceManager 通常在獨(dú)立的機(jī)器上以后臺(tái)進(jìn)程的形式運(yùn)行,它是整個(gè)集群資源的主要協(xié)調(diào)者和管理者。ResourceManager 負(fù)責(zé)給用戶提交的所有應(yīng)用程序分配資源,它根據(jù)應(yīng)用程序優(yōu)先級(jí)、隊(duì)列容量、ACLs、數(shù)據(jù)位置等信息,做出決策,然后以共享的、安全的、多租戶的方式制定分配策略,調(diào)度集群資源。

2. NodeManager

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

  • 啟動(dòng)時(shí)向 ResourceManager 注冊(cè)并定時(shí)發(fā)送心跳消息,等待 ResourceManager 的指令;
  • 維護(hù) Container 的生命周期,監(jiān)控 Container 的資源使用情況;
  • 管理任務(wù)運(yùn)行時(shí)的相關(guān)依賴,根據(jù) ApplicationMaster 的需要,在啟動(dòng) Container 之前將需要的程序及其依賴拷貝到本地。

3. 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ò)。具體如下:

  • 根據(jù)應(yīng)用的運(yùn)行狀態(tài)來決定動(dòng)態(tài)計(jì)算資源需求;
  • ResourceManager 申請(qǐng)資源,監(jiān)控申請(qǐng)的資源的使用情況;
  • 跟蹤任務(wù)狀態(tài)和進(jìn)度,報(bào)告資源的使用情況和應(yīng)用的進(jìn)度信息;
  • 負(fù)責(zé)任務(wù)的容錯(cuò)。

4. Contain

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

三、YARN工作原理簡(jiǎn)述

<div align="center"> <img src="https://raw.githubusercontent.com/heibaiying/BigData-Notes/master/pictures/yarn工作原理簡(jiǎn)圖.png"/> </div>

  1. Client 提交作業(yè)到 YARN 上;

  2. Resource Manager 選擇一個(gè) Node Manager,啟動(dòng)一個(gè) Container 并運(yùn)行 Application Master 實(shí)例;

  3. Application Master 根據(jù)實(shí)際需要向 Resource Manager 請(qǐng)求更多的 Container 資源(如果作業(yè)很小, 應(yīng)用管理器會(huì)選擇在其自己的 JVM 中運(yùn)行任務(wù));

  4. Application Master 通過獲取到的 Container 資源執(zhí)行分布式計(jì)算。

四、YARN工作原理詳述

Hadoop 系列(二)—— 集群資源管理器 YARN

1. 作業(yè)提交

client 調(diào)用 job.waitForCompletion 方法,向整個(gè)集群提交 MapReduce 作業(yè) (第 1 步) 。新的作業(yè) ID(應(yīng)用 ID) 由資源管理器分配 (第 2 步)。作業(yè)的 client 核實(shí)作業(yè)的輸出, 計(jì)算輸入的 split, 將作業(yè)的資源 (包括 Jar 包,配置文件, split 信息) 拷貝給 HDFS(第 3 步)。 最后, 通過調(diào)用資源管理器的 submitApplication() 來提交作業(yè) (第 4 步)。

2. 作業(yè)初始化

當(dāng)資源管理器收到 submitApplciation() 的請(qǐng)求時(shí), 就將該請(qǐng)求發(fā)給調(diào)度器 (scheduler), 調(diào)度器分配 container, 然后資源管理器在該 container 內(nèi)啟動(dòng)應(yīng)用管理器進(jìn)程, 由節(jié)點(diǎn)管理器監(jiān)控 (第 5 步)。

MapReduce 作業(yè)的應(yīng)用管理器是一個(gè)主類為 MRAppMaster 的 Java 應(yīng)用,其通過創(chuàng)造一些 bookkeeping 對(duì)象來監(jiān)控作業(yè)的進(jìn)度, 得到任務(wù)的進(jìn)度和完成報(bào)告 (第 6 步)。然后其通過分布式文件系統(tǒng)得到由客戶端計(jì)算好的輸入 split(第 7 步),然后為每個(gè)輸入 split 創(chuàng)建一個(gè) map 任務(wù), 根據(jù) mapreduce.job.reduces 創(chuàng)建 reduce 任務(wù)對(duì)象。

3. 任務(wù)分配

如果作業(yè)很小, 應(yīng)用管理器會(huì)選擇在其自己的 JVM 中運(yùn)行任務(wù)。

如果不是小作業(yè), 那么應(yīng)用管理器向資源管理器請(qǐng)求 container 來運(yùn)行所有的 map 和 reduce 任務(wù) (第 8 步)。這些請(qǐng)求是通過心跳來傳輸?shù)? 包括每個(gè) map 任務(wù)的數(shù)據(jù)位置,比如存放輸入 split 的主機(jī)名和機(jī)架 (rack),調(diào)度器利用這些信息來調(diào)度任務(wù),盡量將任務(wù)分配給存儲(chǔ)數(shù)據(jù)的節(jié)點(diǎn), 或者分配給和存放輸入 split 的節(jié)點(diǎn)相同機(jī)架的節(jié)點(diǎn)。

4. 任務(wù)運(yùn)行

當(dāng)一個(gè)任務(wù)由資源管理器的調(diào)度器分配給一個(gè) container 后,應(yīng)用管理器通過聯(lián)系節(jié)點(diǎn)管理器來啟動(dòng) container(第 9 步)。任務(wù)由一個(gè)主類為 YarnChild 的 Java 應(yīng)用執(zhí)行, 在運(yùn)行任務(wù)之前首先本地化任務(wù)需要的資源,比如作業(yè)配置,JAR 文件, 以及分布式緩存的所有文件 (第 10 步。 最后, 運(yùn)行 map 或 reduce 任務(wù) (第 11 步)。

YarnChild 運(yùn)行在一個(gè)專用的 JVM 中, 但是 YARN 不支持 JVM 重用。

5. 進(jìn)度和狀態(tài)更新

YARN 中的任務(wù)將其進(jìn)度和狀態(tài) (包括 counter) 返回給應(yīng)用管理器, 客戶端每秒 (通 mapreduce.client.progressmonitor.pollinterval 設(shè)置) 向應(yīng)用管理器請(qǐng)求進(jìn)度更新, 展示給用戶。

6. 作業(yè)完成

除了向應(yīng)用管理器請(qǐng)求作業(yè)進(jìn)度外, 客戶端每 5 分鐘都會(huì)通過調(diào)用 waitForCompletion() 來檢查作業(yè)是否完成,時(shí)間間隔可以通過 mapreduce.client.completion.pollinterval 來設(shè)置。作業(yè)完成之后, 應(yīng)用管理器和 container 會(huì)清理工作狀態(tài), OutputCommiter 的作業(yè)清理方法也會(huì)被調(diào)用。作業(yè)的信息會(huì)被作業(yè)歷史服務(wù)器存儲(chǔ)以備之后用戶核查。

五、提交作業(yè)到Y(jié)ARN上運(yùn)行

這里以提交 Hadoop Examples 中計(jì)算 Pi 的 MApReduce 程序?yàn)槔?,相關(guān) Jar 包在 Hadoop 安裝目錄的 share/hadoop/mapreduce 目錄下:

# 提交格式: hadoop jar jar包路徑 主類名稱 主類參數(shù)
# hadoop jar hadoop-mapreduce-examples-2.6.0-cdh6.15.2.jar pi 3 3

參考資料

  1. 初步掌握 Yarn 的架構(gòu)及原理

  2. Apache Hadoop 2.9.2 > Apache Hadoop YARN

更多大數(shù)據(jù)系列文章可以參見 GitHub 開源項(xiàng)目大數(shù)據(jù)入門指南

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI