1. 程式人生 > >一起了解YARN的架構及原理

一起了解YARN的架構及原理

初步瞭解YARN的架構及原理

YARN 產生背景

MapReduce存在的問題:

1)JobTracker 單點故障。

2)JobTracker 承受的訪問壓力大,影響系統的擴充套件性。

3)不支援MapReduce之外的計算框架,比如Storm、Spark、Flink

什麼是YARN

YARN 是Hadoop2.0版本新引入的資源管理系統,直接從MR1演化而來。核心思想:

將MR1中JobTracker的資源管理和作業排程兩個功能分開,分別由ResourceManager和ApplicationMaster程序來實現。

1)ResourceManager:負責整個叢集的資源管理和排程。

2)ApplicationMaster:負責應用程式相關的事務,比如任務排程、任務監控和容錯

等。

YARN的出現,使得多個計算框架執行在一個叢集當中。

1)每個應用程式對應一個ApplicationMaster。

2)目前可以支援多種計算框架執行在YARN上面,比如MapReduce、Storm、Spark、 Flink

YARN的基本架構


YARN 的架構圖來看,它主要由ResourceManager、NodeManager、ApplicationMaster和Container等以下幾個元件構成。

ResourceManager(RM)

RM 是一個全域性的資源管理器,負責整個系統的資源管理和分配。它主要由兩個元件構成:

排程器(Scheduler)和應用程式管理器(Applications Manager,ASM)。

YARN 分層結構的本質是 ResourceManager。這個實體控制整個叢集並管理應用程式向基礎計算資源的分配。ResourceManager 將各個資源部分(計算、記憶體、頻寬等)精心安排

給基礎 NodeManager(YARN 的每節點代理)。ResourceManager 還與 ApplicationMaster 一起分配資源,與 NodeManager 一起啟動和監視它們的基礎應用程式。在此上下文中,ApplicationMaster 承擔了以前的 TaskTracker 的一些角色, ResourceManager 承擔了 JobTracker 的角色。

(1)排程器

排程器根據容量、佇列等限制條件(如每個佇列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在執行的應用程式。該排程器是一個“純排程器”,它不再從事任何與具體應用程式相關的工作。

(2)應用程式管理器

應用程式管理器負責管理整個系統中所有應用程式,包括應用程式提交、與排程器協商資源以啟動ApplicationMaster、監控ApplicationMaster執行狀態並在失敗時重新啟動它等。

ApplicationMaster(AM)

ApplicationMaster 管理一個在 YARN 內執行的應用程式的每個例項。ApplicationMaster負責協調來自 ResourceManager 的資源,並通過 NodeManager 監視容器的執行和資源

使用(CPU、記憶體等的資源分配)。請注意,儘管目前的資源更加傳統(CPU 核心、記憶體),但未來會帶來基於手頭任務的新資源型別(比如圖形處理單元或專用處理裝置)。從

YARN 角度講,ApplicationMaster 是使用者程式碼,因此存在潛在的安全問題。YARN 假設

ApplicationMaster 存在錯誤或者甚至是惡意的,因此將它們當作無特權的程式碼對待。

NodeManager(NM)

NodeManager 管理一個 YARN 叢集中的每個節點。NodeManager 提供針對叢集中每個

節點的服務,從監督對一個容器的終生管理到監視資源和跟蹤節點健康。MRv1 通過插槽管理 Map  Reduce 任務的執行,而 NodeManager 管理抽象容器,這些容器代表著可供一個特定應用程式使用的針對每個節點的資源。YARN 繼續使用 HDFS 層。它的主要 NameNode 用於元資料服務,而 DataNode 用於分散在一個叢集中的複製儲存服務

NM是每個節點上的資源和工作管理員,一方面,它會定時地向RM彙報本節點上的資源使用情況和各個Container的執行狀態;另一方面,它接收並處理來自AMContainer啟動/停止等各種請求。

Container

Container 是 YARN 中的資源抽象,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等,當AM向RM申請資源時,RM為AM返回的資源便是用Container表示的。YARN會為每個任務分配一個Container,且該任務只能使用該Container中描述的資源。

要使用一個 YARN 叢集,首先需要來自包含一個應用程式的客戶的請求。

ResourceManager 協商一個容器的必要資源,啟動一個 ApplicationMaster 來表示已提交

的應用程式。通過使用一個資源請求協議,ApplicationMaster 協商每個節點上供應用程式使用的資源容器。執行應用程式時,ApplicationMaster 監視容器直到完成。當應用程式完

成時,ApplicationMaster  ResourceManager 登出其容器,執行週期就完成了。