一起了解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的執行狀態;另一方面,它接收並處理來自AM的Container啟動/停止等各種請求。
Container
Container 是 YARN 中的資源抽象,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等,當AM向RM申請資源時,RM為AM返回的資源便是用Container表示的。YARN會為每個任務分配一個Container,且該任務只能使用該Container中描述的資源。
要使用一個 YARN 叢集,首先需要來自包含一個應用程式的客戶的請求。
ResourceManager 協商一個容器的必要資源,啟動一個 ApplicationMaster 來表示已提交
的應用程式。通過使用一個資源請求協議,ApplicationMaster 協商每個節點上供應用程式使用的資源容器。執行應用程式時,ApplicationMaster 監視容器直到完成。當應用程式完
成時,ApplicationMaster 從 ResourceManager 登出其容器,執行週期就完成了。