自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試 | 深入理解Yarn的內部架構

開發(fā) 架構
Apache YARN(Yet Another Resource Negotiator)是 Hadoop 的集群資源管理器。Yarn 是在 Hadoop 2.x 中引入的。

[[421394]]

本文轉載自微信公眾號「大數(shù)據(jù)技術與數(shù)倉」,作者西貝。轉載本文請聯(lián)系大數(shù)據(jù)技術與數(shù)倉公眾號。

引言

Apache YARN(Yet Another Resource Negotiator)是 Hadoop 的集群資源管理器。Yarn 是在 Hadoop 2.x 中引入的。

Yarn 允許不同的數(shù)據(jù)處理引擎,如圖形處理、交互處理、流處理以及批處理來運行和處理存儲在 HDFS(Hadoop 分布式文件系統(tǒng))中的數(shù)據(jù)。其實,YARN不僅負責資源分配,而且也會負責作業(yè)的調度。

MapReduce1.0既是一個計算框架,也是一個資源管理調度框架。到了Hadoop2.0以后,MapReduce1.0中的資源管理調度功能,被單獨分離出來形成了YARN,它是一個純粹的資源管理調度框架,而不是一個計算框架。被剝離了資源管理調度功能的MapReduce 框架就變成了MapReduce2.0,它是運行在YARN之上的一個純粹的計算框架,不再自己負責資源調度管理服務,而是由YARN為其提供資源管理調度服務。

如下圖所示:目前主流的大數(shù)據(jù)計算框架都可以運行在YARN上。

YARN的體系結構

YARN總體上仍然是Master/Slave結構。在整個資源管理框架中,ResourceManager為Master,NodeManager為Slave,ResourceManager負責對各個NodeManager上的資源進行統(tǒng)一管理和調度。當用戶提交一個應用程序時,需要提供一個用以跟蹤和管理這個程序的ApplicationMaster,它負責向ResourceManager申請資源,并要求NodeManger啟動可以占用一定資源的任務。由于不同的ApplicationMaster被分布到不同的節(jié)點上,因此它們之間不會相互影響。

  • ResourceManager

一個純粹的調度器,專門負責集群中可用資源的分配和管理。

  • 調度器Scheduler
  • 應用程序管理器(Applications Manager)
  • NodeManager

負責節(jié)點本地資源的管理,包括啟動應用程序的Container,監(jiān)控它們的資源使用情況,并報告給RM

  • ApplicationMaster

特定框架庫的一個實例,負責有RM協(xié)商資源,并和NM協(xié)調工作來執(zhí)行和監(jiān)控Container以及它們的資源消耗。AM也是以一個的Container身份運行。

ResourceManager

ResourceManager(RM)是一個全局的資源管理器,負責整個系統(tǒng)的資源管理和分配,主要包括兩個組件,即調度器(Scheduler)和應用程序管理器(Applications Manager)。

調度器接收來自ApplicationMaster的應用程序資源請求,把集群中的資源以“容器”的形式分配給提出申請的應用程序,容器的選擇通常會考慮應用程序所要處理的數(shù)據(jù)的位置,進行就近選擇,從而實現(xiàn)“計算向數(shù)據(jù)靠攏”。

容器(Container)作為動態(tài)資源分配單位,每個容器中都封裝了一定數(shù)量的CPU、內存、磁盤等資源,從而限定每個應用程序可以使用的資源量。

調度器被設計成是一個可插拔的組件,YARN不僅自身提供了許多種直接可用的調度器,也允許用戶根據(jù)自己的需求重新設計調度器。

應用程序管理器(Applications Manager)負責系統(tǒng)中所有應用程序的管理工作,主要包括應用程序提交、與調度器協(xié)商資源以啟動ApplicationMaster、監(jiān)控ApplicationMaster運行狀態(tài)并在失敗時重新啟動等。

NodeManager

NodeManager是駐留在一個YARN集群中的每個節(jié)點上的代理,主要負責:

  • 容器生命周期管理
  • 監(jiān)控每個容器的資源(CPU、內存等)使用情況
  • 跟蹤節(jié)點健康狀況
  • 以“心跳”的方式與ResourceManager保持通信
  • 向ResourceManager匯報作業(yè)的資源使用情況和每個容器的運行狀態(tài)
  • 接收來自ApplicationMaster的啟動/停止容器的各種請求

需要說明的是,NodeManager主要負責管理抽象的容器,只處理與容器相關的事情,而不具體負責每個任務(Map任務或Reduce任務)自身狀態(tài)的管理,因為這些管理工作是由ApplicationMaster完成的,ApplicationMaster會通過不斷與NodeManager通信來掌握各個任務的執(zhí)行狀態(tài)。

ApplicationMaster

ResourceManager接收用戶提交的作業(yè),按照作業(yè)的上下文信息以及從NodeManager收集來的容器狀態(tài)信息,啟動調度過程,為用戶作業(yè)啟動一個ApplicationMaster。

ApplicationMaster的主要功能是:

  • 當用戶作業(yè)提交時,ApplicationMaster與ResourceManager協(xié)商獲取資源,ResourceManager會以容器的形式為ApplicationMaster分配資源;
  • 把獲得的資源進一步分配給內部的各個任務(Map任務或Reduce任務),實現(xiàn)資源的“二次分配”;
  • 與NodeManager保持交互通信進行應用程序的啟動、運行、監(jiān)控和停止,監(jiān)控申請到的資源的使用情況,對所有任務的執(zhí)行進度和狀態(tài)進行監(jiān)控,并在任務發(fā)生失敗時執(zhí)行失敗恢復(即重新申請資源重啟任務);
  • 定時向ResourceManager發(fā)送“心跳”消息,報告資源的使用情況和應用的進度信息;
  • 當作業(yè)完成時,ApplicationMaster向ResourceManager注銷容器,執(zhí)行周期完成。

YARN的工作流程

簡單流程示意圖如下:

1.作業(yè)提交

JobSubmitter 實現(xiàn)的作業(yè)提交過程執(zhí)行以下操作:

  • 向資源管理器詢問新的應用程序 ID,用于 MapReduce 作業(yè) ID(步驟 2)。
  • 檢查作業(yè)的輸出規(guī)范。例如,如果沒有指定輸出目錄或已經(jīng)存在,則不提交作業(yè),并向 MapReduce 程序拋出錯誤。
  • 計算作業(yè)的輸入分片。如果無法計算分片(例如,因為輸入路徑不存在),則不會提交作業(yè),并向 MapReduce 程序拋出錯誤。
  • 將運行作業(yè)所需的資源(包括作業(yè) JAR 文件、配置文件和計算的輸入分片)復制到以作業(yè) ID 命名的目錄中的HDFS共享文件系統(tǒng)(步驟 3)。作業(yè) JAR 會被復制多個副本,以便節(jié)點管理器(node managers)在為作業(yè)運行任務時可以訪問集群中的大量副本。
  • 通過在資源管理器上調用 submitApplication() 提交作業(yè)(步驟 4)。

2.作業(yè)初始化

  • 當資源管理器收到對其 submitApplication() 方法的調用時,它會將請求移交給 YARN 調度程序。調度器分配一個容器,然后資源管理器啟動appmaster。
  • MapReduce 作業(yè)的app master是一個 Java 應用程序,初始化作業(yè)并跟蹤任務的完成進度(步驟 6)。
  • 接下來,它從共享文件系統(tǒng)中檢索在客戶端計算的輸入分片(步驟 7)。然后它為每個split創(chuàng)建一個map任務以及一些reduce任務。
  • app master決定如何運行構成 MapReduce 作業(yè)的任務。如果作業(yè)很小,app master可能會選擇在與自己相同的 JVM 中運行任務。

任務分配

  • 如果該作業(yè)不符合與app master在相同的JVM中運行的條件,app master會向資源管理器請求該作業(yè)中所有 map 和 reduce 任務的container(步驟 8)。
  • 對 map 任務的請求首先進行,并且具有比 reduce 任務更高的優(yōu)先級,因為所有 map 任務必須在 reduce 的排序階段開始之前完成。直到 5% 的 map 任務完成后才會請求 reduce 任務。
  • Reduce 任務可以在集群中的任何位置運行,但對 map 任務具有數(shù)據(jù)本地性的限制。
  • 在最佳情況下,任務是本地數(shù)據(jù),即在分片所在的同一節(jié)點上運行?;蛘?,任務可能是機架本地的:與分片在同一機架上,但不在同一節(jié)點上。有些任務既不在同一節(jié)點又不在同一機架,而是需要從不同機架不同節(jié)點中檢索數(shù)據(jù)。
  • 請求還指定了任務的內存和CPU要求 。默認情況下,每個 map 和 reduce 任務都分配了 1024 MB 的內存和一個虛擬內核。

任務執(zhí)行

  • 一旦資源管理器的調度程序為特定節(jié)點上的容器分配了資源,app master將通過聯(lián)系nodemanager來啟動容器(步驟 9a 和 9b)。
  • 最后,它運行 map 或 reduce 任務(步驟 11)。

作業(yè)完成

  • 當app master收到作業(yè)的最后一個任務已完成的通知時,它會將作業(yè)的狀態(tài)更改為“成功”。
  • 然后,當 Job 輪詢狀態(tài)時,它得知作業(yè)已成功完成,會打印一條消息告訴用戶,然后從 waitForCompletion() 方法返回。
  • 此時作業(yè)統(tǒng)計信息和計數(shù)器會打印到控制臺。
  • 最后,在作業(yè)完成時,app master和任務容器清理它們的工作狀態(tài)(中間輸出被刪除)。作業(yè)信息由作業(yè)歷史服務器存檔,以便用戶以后在需要時查詢。

總結

Hadoop生態(tài)系統(tǒng)是工業(yè)界應用最廣泛的大數(shù)據(jù)生態(tài)系統(tǒng)。作為Hadoop 生態(tài)圈的重要一員,YARN在開源大數(shù)據(jù)領域有著重要的地位,很多計算框架都能夠運行在YARN上,比如Spark,F(xiàn)link,Storm等。對于大多數(shù)公司的大數(shù)據(jù)計算場景,采用YARN來管理集群,是一個比較常見的解決方案。

 

責任編輯:武曉燕 來源: 大數(shù)據(jù)技術與數(shù)倉
相關推薦

2019-09-24 13:41:22

Hadoop面試分布式

2017-08-15 13:05:58

Serverless架構開發(fā)運維

2018-04-16 11:04:23

HBaseRegion Serv數(shù)據(jù)庫

2022-01-14 12:28:18

架構OpenFeign遠程

2023-06-07 15:34:21

架構層次結構

2018-12-27 12:34:42

HadoopHDFS分布式系統(tǒng)

2019-03-18 09:50:44

Nginx架構服務器

2024-10-28 08:28:59

2010-06-01 15:25:27

JavaCLASSPATH

2016-12-08 15:36:59

HashMap數(shù)據(jù)結構hash函數(shù)

2020-07-21 08:26:08

SpringSecurity過濾器

2023-01-16 18:32:15

架構APNacos

2012-11-22 10:11:16

LispLisp教程

2013-09-22 14:57:19

AtWood

2009-09-25 09:14:35

Hibernate日志

2023-10-19 11:12:15

Netty代碼

2021-02-17 11:25:33

前端JavaScriptthis

2014-11-27 15:32:31

openstacknetworkovs

2021-09-10 07:31:54

AndroidAppStartup原理

2020-09-23 10:00:26

Redis數(shù)據(jù)庫命令
點贊
收藏

51CTO技術棧公眾號