Hadoop 系列YARN:資源調度平臺(YARN介紹)

YARN介紹

YARN的全稱是Yet Another Resource Negotiator,意爲另外一種資源調度者。 從Apache Hadoop 2.0開始, Hadoop包含 YARN。網絡

Hadoop 1.x與Hadoop 2.x

    (1)MRv1
    在介紹Yarn以前,咱們先回頭看一下Hadoop1.x對MapReduce job的調度管理方式。在Hadoop 1.x版本中,MapReduce(也稱MRv1)既要負責資源管理又要負責做業處理。MapReduce(MRv1)運行時環境由(一個)JobTracker和(若干個)TaskTracker兩類服務組成。其中,JobTracker負責資源管理和全部做業的控制,而TaskTracker負責接收來自JobTracker的命令並執行它。該框架在擴展性、容錯性和多框架支持等方面存在不足,這也促使了MRv2的產生。

    (2)MRv2
    在Apache Hadoop 2.x中,咱們將MapReduce(MRv1)分解爲Apache Hadoop YARN,一種通用的分佈式應用程序管理框架,而Apache Hadoop MapReduce(又稱MRv2)仍然是一個純粹的分佈式計算框架。
    MRv2是在運行於資源管理框架YARN之上的計算框架MapReduce。它的運行時環境再也不由JobTracker和TaskTracker等服務組成,而是變爲通用資源管理系統YARN和做業控制進程ApplicationMaster。 簡言之,MRv1僅是一個獨立的離線計算框架,而MRv2則是運行於YARN之上的MapReduce。
    (3)YARN
    YARN是Hadoop 2.x中的資源管理系統,它是一個通用的資源管理模塊,可爲各種應用程序進行資源管理和調度。YARN不只限於MapReduce一種框架使用,也能夠供其餘框架使用,好比Hive、Spark、Storm等。因爲YARN的通用性,下一代MapReduce的核心已經從簡單的支持單一應用的計算框架MapReduce轉移到通用的資源管理系統YARN。

爲了讓你們更進一步理解以 YARN 爲核心的軟件棧(Hadoop 2.x),咱們將與以 MapReduce 爲核心的軟件棧(Hadoop 1.x)進行對比,以下圖。在Yarn中咱們把job的概念換成了application,由於在新的Hadoop2.x中,運行的應用不僅是MapReduce了,還有多是其它應用如一個DAG(有向無環圖Directed Acyclic Graph,例如storm應用)。Yarn的另外一個目標就是拓展Hadoop,使得它不只僅能夠支持MapReduce計算,還能很方便的管理諸如Hive、Hbase、Pig、Spark/Shark等應用。
Hadoop 2.x的YARN已經再也不侷限於支持MapReduce 一種計算框架,而是朝着對多種框架進行統一管理的方向發展。
架構

 

YARN的架構

YARN的架構仍是經典的主從(master/slave)結構,以下圖所示。大致上看,YARN服務由一個ResourceManager(RM)和多個NodeManager(NM)構成,ResourceManager爲主節點(master),NodeManager爲從節點(slave)。
app

 

 簡單地說,YARN 主要由 ResourceManager、NodeManager、ApplicationMaster和 Container 等幾個組件構成。

    Container是Yarn對計算機計算資源的抽象,它其實就是一組CPU和內存資源,全部的應用都會運行在Container中。
    ApplicationMaster是對運行在Yarn中某個應用的抽象,它其實就是某個類型應用的實例,ApplicationMaster是應用級別的,它的主要功能就是向ResourceManager(全局的)申請計算資源(Containers)而且和NodeManager交互來執行和監控具體的task。
    Scheduler是ResourceManager專門進行資源管理的一個組件,負責分配NodeManager上的Container資源,NodeManager也會不斷髮送本身Container使用狀況給ResourceManager。
(1)ResourceManager(RM)
RM 是一個全局的資源管理器,負責整個系統的資源管理和分配。RM有兩個主要組件:調度器(Scheduler)和應用程序管理器(Applications Manager)。

    調度器(Scheduler),負責根據容量,隊列等的熟悉約束,向各類運行的應用程序分配資源。調度程序是純調度器,它不執行監視或跟蹤應用程序的狀態。此外,因爲應用程序故障或硬件故障,它不能保證從新啓動失敗的任務。調度程序根據應用程序的資源需求執行其調度功能; 它基於包含諸如內存,cpu,磁盤,網絡等元素的資源容器的抽象概念。YARN 提供了多種直接可用的調度器,好比 FairScheduler 和 Capacity Scheduler 等。
    ApplicationsManager負責接受做業提交,協商第一個容器來執行應用程序特定的ApplicationMaster,並提供服務,以便在失敗時從新啓動ApplicationMaster容器。每一個應用程序ApplicationMaster有責任從調度程序協商適當的資源容器,跟蹤其狀態並監視進度。

(2) ApplicationMaster ( AM )
當用戶提交一個應用程序時,須要提供一個用以跟蹤和管理這個程序的ApplicationMaster(AM),它負責向 ResourceManager 申請資源,並要求 NodeManger 啓動能夠佔用必定資源的任務。
AM主要功能包括:

    與 RM 調度器協商以獲取資源(用 Container 表示);
    將獲得的任務進一步分配給內部的任務;
    與 NM 通訊以啓動 / 中止任務;
    監控全部任務運行狀態,並在任務運行失敗時從新爲任務申請資源以重啓任務。

ApplicationMaster 負責一個應用程序生命週期內的全部工做。但注意每個 應用程序(不是每一種)都有一個 ApplicationMaster,它能夠運行在 ResourceManager 之外的機器上。

(3)NodeManager ( NM )
NM 是每一個節點上的資源和任務管理器,一方面,它會定時地向 RM 彙報本節點上的資源使用狀況和各個 Container 的運行狀態;另外一方面,它接收並處理來自 AM 的 Container啓動 / 中止等各類請求。
NM 功能比較專注,就是負責 Container 狀態的維護,並向 RM 保持心跳。

(4)Container
Container 是 YARN 中 的 資 源 抽 象, 它 封 裝 了 某 個 節 點 上 的 多 維 度 資 源, 如 內 存、CPU、磁盤、網絡等,當 AM 向 RM 申請資源時,RM 爲 AM 返回的資源即是用 Container表示的。YARN 會爲每一個任務分配一個 Container,且該任務只能使用該 Container 中描述的資源。須要注意的是,Container 不一樣於 MRv1 中的 slot,它是一個動態資源劃分單位,是根據應用程序的需求動態生成的。目前,YARN 僅支持 CPU 和內存兩種資源,且使用了輕量級資源隔離機制 Cgroups 進行資源隔離。框架

 

YARN工做流程


瞭解了上面介紹的這些概念,咱們有必要看一下Application在Yarn中的執行過程。當用戶向 YARN 中提交一個應用程序後,YARN 將分兩個階段運行該應用程序 :第一個階段是啓動 ApplicationMaster ;第二個階段是由 ApplicationMaster 建立應用程序,爲它申請資源,並監控它的整個運行過程,直到運行完成。

下面這幅圖展現了應用程序的整個執行過程:
分佈式

(1)客戶端程序向ResourceManager提交應用並請求一個ApplicationMaster實例

(2)ResourceManager找到能夠運行一個Container的NodeManager,並在這個Container中啓動ApplicationMaster實例

(3)ApplicationMaster向ResourceManager進行註冊,註冊以後客戶端就能夠查詢ResourceManager得到本身ApplicationMaster的詳細信息,之後就能夠和本身的ApplicationMaster直接交互了

(4)在日常的操做過程當中,ApplicationMaster根據resource-request協議向ResourceManager發送resource-request請求

(5)當Container被成功分配以後,ApplicationMaster經過向NodeManager發送container-launch-specification信息來啓動Container, container-launch-specification信息包含了可以讓Container和ApplicationMaster交流所須要的資料

(6)應用程序的代碼在啓動的Container中運行,並把運行的進度、狀態等信息經過application-specific協議發送給ApplicationMaster

(7)在應用程序運行期間,提交應用的客戶端主動和ApplicationMaster交流得到應用的運行狀態、進度更新等信息,交流的協議也是application-specific協議

(8)一但應用程序執行完成而且全部相關工做也已經完成,ApplicationMaster向ResourceManager取消註冊而後關閉,用到全部的Container也歸還給系統

oop

相關文章
相關標籤/搜索