中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-06-15 22:06:06 來源:網絡 閱讀:653 作者:heibaiying 欄目:大數據

一、hadoop yarn 簡介

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

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

二、YARN架構

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

1. ResourceManager

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

2. NodeManager

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

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

3. ApplicationMaster

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

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

4. Contain

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

三、YARN工作原理簡述

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

  1. Client 提交作業到 YARN 上;

  2. Resource Manager 選擇一個 Node Manager,啟動一個 Container 并運行 Application Master 實例;

  3. Application Master 根據實際需要向 Resource Manager 請求更多的 Container 資源(如果作業很小, 應用管理器會選擇在其自己的 JVM 中運行任務);

  4. Application Master 通過獲取到的 Container 資源執行分布式計算。

四、YARN工作原理詳述

Hadoop 系列(二)—— 集群資源管理器 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 的作業清理方法也會被調用。作業的信息會被作業歷史服務器存儲以備之后用戶核查。

五、提交作業到YARN上運行

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

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

參考資料

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

  2. Apache Hadoop 2.9.2 > Apache Hadoop YARN

更多大數據系列文章可以參見 GitHub 開源項目大數據入門指南

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

楚雄市| 望城县| 高碑店市| 买车| 十堰市| 马山县| 邛崃市| 台江县| 屯昌县| 介休市| 峨眉山市| 营山县| 赫章县| 海盐县| 清苑县| 专栏| 鄂州市| 湟中县| 台州市| 田阳县| 繁峙县| 济宁市| 德江县| 高邑县| 黑山县| 鄂托克旗| 遂川县| 云梦县| 佛山市| 高青县| 宿迁市| 苏州市| 塔河县| 和林格尔县| 资中县| 漳平市| 安平县| 色达县| 扶沟县| 吉水县| 和田市|