1. 程式人生 > >Hadoop 系統架構分析(2)

Hadoop 系統架構分析(2)

YARN 概述

YARN 的本質是一個全域性的資源管理器(ResourceManager,RM),它控制整個叢集並管理基礎計算資源在應用程式之間的分配。 資源管理器RM 和它在各個節點的代理——節點管理器(NodeManager,NM)構成了整個資料計算的框架:由RM 最終決定各個資源部分(CPU、記憶體、磁碟、網路等)在系統內各程式之間的分配,而各節點的 NM 主要負責管理容器(Containers),監視這些資源的使用並將這些資訊上報給RM。

資源管理器主要由兩個元件構成:排程器(Scheduler)和應用程式管理器(Applications Manager,AM)。排程器負責將系統中的資源分配給各個正在執行的應用程式,但是不負責具體應用程式的相關工作,比如監控或跟蹤狀態、重新啟動失敗任務等。排程器根據應用程式對資源的需求來分配資源,這種分配依據一種抽象的資源概念——“資源容器”(Resource Container,簡稱Container)。Container是一個動態資源分配單位,它將記憶體,CPU,磁碟,網路等資源封裝在一起,從而限定每個任務的資源量。排程器具有可替換的特性,使用者可以自行設計。YARN提供了多種直接可用的排程器,比如FairScheduler和CapacityScheduler等。

YARN 針對每個應用程式還會啟動一個應用程式管理器元件。它負責與資源管理器協商以獲取資源(用Container表示),然後與節點管理器分工協作啟動各項任務同時監控任務狀態,並在任務執行失敗時重新為任務申請資源以重啟任務。應用程式管理器實際上是一個執行某種計算框架的庫,目前支援的計算框架包括Mapreduce 和Spark 等。

YARN 工作流程圖

上圖是Hadoop 官網[1] 給出的YARN 工作流程圖。要使用一個 YARN 叢集,首先需要來自客戶的包含一個應用程式的請求。然後由ResourceManager 協商各種必要資源,並啟動一個 ApplicationMaster 來表示已提交的應用程式。通過使用一個資源請求協議,ApplicationMaster 協商每個節點上供應用程式使用的資源容器。執行應用程式時,ApplicationMaster 監視容器直到完成。當應用程式完成時,ApplicationMaster 從 ResourceManager 登出其容器,執行週期完成[2]。

YARN的引入大大提高了叢集的資源利用率,並降低了叢集管理成本。首先,YARN允許多個應用程式執行在一個叢集中,並將資源按需分配給它們,這大大提高了資源利用率;其次,YARN允許各類短作業和長服務混合部署在一個叢集中,並提供了容錯、資源隔離及負載均衡等方面的支援,這大大簡化了作業和服務的部署和管理成本。

本章小結——YARN的基本架構:

  • ResourceManager 是一個全域性的資源管理器,它排程、啟動每一個應用程式的 ApplicationMaster,同時監控 ApplicationMaster 的執行情況
  • NodeManager 是RM在每個節點上的代理,是執行應用程式的容器,功能專一,只負責 Container 狀態的維護以及向 RM 保持心跳
  • ApplicationMaster 管理每個應用程式具體的資源排程和協調,負責一個應用程式生命週期內的所有工作,可以執行在 ResourceManager 以外的機器上
  • 每一個ApplicationMaster擁有多個Container在NodeManager上執行