面試「大動作」!YARN琢磨不透?一篇文章帶你玩轉YARN!

2021-01-11 跟著巨嬰去逆襲

一、hadoop yarn 簡介

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

二、YARN架構

1. ResourceManager

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

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

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

在用戶提交一個應用程式時,YARN 會啟動一個輕量級的進程ApplicationMaster。ApplicationMaster負責協調來自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工作原理簡述

Client提交作業到 YARN 上;Resource Manager選擇一個Node Manager,啟動一個Container並運行Application Master實例;Application Master根據實際需要向Resource Manager請求更多的Container資源(如果作業很小, 應用管理器會選擇在其自己的 JVM 中運行任務);Application Master通過獲取到的Container資源執行分布式計算。四、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-cdh5.15.2.jar pi 3 3

如果覺得對你有所幫助。記得收藏和關注呦!(每日更新各種框架)

如需轉載請註明出處(創作不易請見諒)

和巨嬰程序猿一起成長。讓自己變得更優秀

我最近一直在思考(大數據通俗講解)的問題,你的看法是什麼呢?關注我快說出來一起交流一下吧~

相關焦點

  • 資源管理與調度系統Yarn
    Introduction在大數據時代,為了存儲和處理海量數據,出現了豐富的技術組件,比如Hive、Spark、Flink、JStorm等,也有著數量眾多類型紛雜的應用程式和服務,比如離線作業、流式作業等,為了避免服務和服務之間、任務和任務之間的相互幹擾,傳統的做法是為每種類型的作業或者服務搭建一個單獨的集群。
  • 大數據YARN核心知識點來襲
    架構的內容放在第2點講,如果面試介紹YARN的話,老劉建議第一點和第二點一起講。第2點:YARN架構先看這張架構圖,就可以知道YARN是非常典型的主從架構。YARN由一個ResourceManager(RM)和多個NodeManager(NM)構成,RM是主節點,NM是從節點。什麼是ResourceManager?
  • Yarn 的內存分配管理機制及相關參數配置
    1.1 RM的內存資源配置, 配置的是資源調度相關 RM1:yarn.scheduler.minimum-allocation-mb=1G #單個容器可申請的最小內存RM2:yarn.scheduler.maximum-allocation-mb=4G #單個容器可申請的最大內存l RM2 必須大於等於 RM1l 一旦設置,不可動態改變1.2 NM的內存資源配置
  • 更快、更強——解析Hadoop新一代MapReduce框架Yarn
    編者按:對於業界的大數據存儲及分布式處理系統來說,Hadoop 是耳熟能詳的卓越開源分布式文件存儲及處理框架,對於 Hadoop 框架的介紹在此不再累述,隨著需求的發展,Yarn 框架浮出水面, @依然光榮復興的 博客給我們做了很詳細的介紹,讀者通過本文中新舊 Hadoop MapReduce 框架的對比,更能深刻理解新的 yarn 框架的技術原理和設計思想
  • Hadoop資源管理與作業調度框架yarn剖析
    提到Hadoop,大家可能首先想到的是Hdfs存儲、mapreduce離線計算,Hadoop2.x推出yarn(Yet Another Resource Negotiator)之後,hadoop已搖身一變為資源管理與作業調度平臺,基於yarn可在hadoop集群上可運行mepreduce(離線計算
  • Spark on Yarn學習之Yarn運行過程和Yarn應用的實現
    如果需要在一個 yarn 集群上運行程序 :首先得有個客戶端 client 來提交 job 到 ResourceManager(RM) 申請資源。我知道你在看喲
  • 史上最牛YARN介紹
    (2)rm將該應用程式的資源路徑返回給yarnrunner(3)該程序將運行所需資源提交到HDFS資源路徑上(4)程序資源提交完畢後,申請運行mrAppMaster(5)RM將用戶的請求初始化成一個task(6)其中一個NodeManager領取到task任務。
  • 袋鼠雲大數據崗位面試題
    2020-11-22 10:10:26 來源: 侶行大記藝 舉報   袋鼠雲面試題
  • 數據分析工程師面試集錦5——Spark面試指南
    導語本篇文章為大家帶來spark面試指南,文內會有兩種題型,問答題和代碼題,題目大部分來自於網絡上,有小部分是來自於工作中的總結,每個題目會給出一個參考答案。為什麼考察Spark?Spark作為大數據組件中的執行引擎,具備以下優勢特性。
  • 貴州省考面試形勢預估?大樹帶你10s了解結構化小組!
    文章內容整理至大樹閆老師的直播分享,可私聊客服要重播連結哦~省考面試形式預估2018年貴州申論改革分為了AB卷,考鄉鎮的沒有大作文了,全是4道小題。市直、市縣的有大作文,2020年貴州省考再次改革細分為市直單位考A卷、市縣單位考B卷、鄉鎮單位考C卷。筆試形式的變革也意味著面試形式隨之發生改變,針對不同崗位類型有不同的面試形式。
  • 【大數據】最新大數據學習路線(完整詳細版】
    大數據學習路線java(Java se,javaweb)Linux(shell,高並發架構,lucene,solr)Hadoop(Hadoop,HDFS,Mapreduce,yarn,hive,hbase,sqoop,zookeeper,flume)機器學習(R,mahout)Storm(Storm,kafka