Hadoop 三劍客之 —— 集羣資源管理器 YARN

1、hadoop yarn 簡介

Apache YARN (Yet Another Resource Negotiator) 是hadoop 2.0 引入的集羣資源管理系統。用戶能夠將各類服務框架部署在YARN上,由YARN進行統一地管理和資源分配。html

2、YARN架構

1. ResourceManager

ResourceManager一般在獨立的機器上之後臺進程的形式運行,它是整個集羣資源的主要協調者和管理者。ResourceManager負責給用戶提交的全部應用程序分配資源,它根據應用程序優先級、隊列容量、ACLs、數據位置等信息,作出決策,而後以共享的、安全的、多租戶的方式制定分配策略,調度集羣資源。node

2. NodeManager

NodeManager是YARN集羣中的每一個具體節點的管理者。主要負責該節點內全部容器的生命週期的管理,監視資源和跟蹤節點健康。具體以下:git

  • 啓動時向ResourceManager註冊並定時發送心跳消息,等待ResourceManager的指令;
  • 維護Container的生命週期,監控Container的資源使用狀況;
  • 管理任務運行時的相關依賴,根據ApplicationMaster的須要,在啓動Container以前將須要的程序及其依賴拷貝到本地。

3. ApplicationMaster

在用戶提交一個應用程序時,YARN會啓動一個輕量級的進程ApplicationMasterApplicationMaster負責協調來自 ResourceManager的資源,並經過NodeManager 監視容器內資源的使用狀況,同時還負責任務的監控與容錯。具體以下:github

  • 根據應用的運行狀態來決定動態計算資源需求;
  • ResourceManager申請資源,監控申請的資源的使用狀況;
  • 跟蹤任務狀態和進度,報告資源的使用狀況和應用的進度信息;
  • 負責任務的容錯。

4. Contain

Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等。當AM向RM申請資源時,RM爲AM返回的資源是用Container表示的。YARN會爲每一個任務分配一個Container,該任務只能使用該Container中描述的資源。ApplicationMaster可在Container內運行任何類型的任務。例如,MapReduce ApplicationMaster請求一個容器來啓動 map 或 reduce 任務,而Giraph ApplicationMaster請求一個容器來運行 Giraph 任務。shell

3、YARN工做原理簡述

  1. Client提交做業到YARN上;apache

  2. Resource Manager選擇一個Node Manager,啓動一個Container並運行Application Master實例;緩存

  3. Application Master根據實際須要向Resource Manager請求更多的Container資源(若是做業很小, 應用管理器會選擇在其本身的JVM中運行任務);安全

  4. Application Master經過獲取到的Container資源執行分佈式計算。服務器

4、YARN工做原理詳述

1. 做業提交

client調用job.waitForCompletion方法,向整個集羣提交MapReduce做業 (第1步) 。新的做業ID(應用ID)由資源管理器分配(第2步)。做業的client覈實做業的輸出, 計算輸入的split, 將做業的資源(包括Jar包,配置文件, split信息)拷貝給HDFS(第3步)。 最後, 經過調用資源管理器的submitApplication()來提交做業(第4步)。網絡

2. 做業初始化

當資源管理器收到submitApplciation()的請求時, 就將該請求發給調度器(scheduler), 調度器分配container, 而後資源管理器在該container內啓動應用管理器進程, 由節點管理器監控(第5步)。

MapReduce做業的應用管理器是一個主類爲MRAppMaster的Java應用,其經過創造一些bookkeeping對象來監控做業的進度, 獲得任務的進度和完成報告(第6步)。而後其經過分佈式文件系統獲得由客戶端計算好的輸入split(第7步),而後爲每一個輸入split建立一個map任務, 根據mapreduce.job.reduces建立reduce任務對象。

3. 任務分配

若是做業很小, 應用管理器會選擇在其本身的JVM中運行任務。

若是不是小做業, 那麼應用管理器向資源管理器請求container來運行全部的map和reduce任務(第8步)。這些請求是經過心跳來傳輸的, 包括每一個map任務的數據位置,好比存放輸入split的主機名和機架(rack),調度器利用這些信息來調度任務,儘可能將任務分配給存儲數據的節點, 或者分配給和存放輸入split的節點相同機架的節點。

4. 任務運行

當一個任務由資源管理器的調度器分配給一個container後,應用管理器經過聯繫節點管理器來啓動container(第9步)。任務由一個主類爲YarnChild的Java應用執行, 在運行任務以前首先本地化任務須要的資源,好比做業配置,JAR文件, 以及分佈式緩存的全部文件(第10步。 最後, 運行map或reduce任務(第11步)。

YarnChild運行在一個專用的JVM中, 可是YARN不支持JVM重用。

5. 進度和狀態更新

YARN中的任務將其進度和狀態(包括counter)返回給應用管理器, 客戶端每秒(通mapreduce.client.progressmonitor.pollinterval設置)嚮應用管理器請求進度更新, 展現給用戶。

6. 做業完成

除了嚮應用管理器請求做業進度外, 客戶端每5分鐘都會經過調用waitForCompletion()來檢查做業是否完成,時間間隔能夠經過mapreduce.client.completion.pollinterval來設置。做業完成以後, 應用管理器和container會清理工做狀態, OutputCommiter的做業清理方法也會被調用。做業的信息會被做業歷史服務器存儲以備以後用戶覈查。

5、提交做業到YARN上運行

這裏以提交Hadoop Examples中計算Pi的MApReduce程序爲例,相關Jar包在Hadoop安裝目錄的share/hadoop/mapreduce目錄下:

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

參考資料

  1. 初步掌握Yarn的架構及原理

  2. Apache Hadoop 2.9.2 > Apache Hadoop YARN

更多大數據系列文章能夠參見我的 GitHub 開源項目: 大數據入門指南

相關文章
相關標籤/搜索