通過對Hadoop1.0和2.0的架構對比,引出了YARN作為資源調度和管理器的作用。
1、YARN產生的背景
YARN是MRv1基礎上演化而來的,克服了MRv1中的各種局限性。在正式的介紹YARN之前,我們先要了解MRv1的一些局限性,這可概括為以下幾個方面:
- 擴展性差:在MRv1中,JobTracker同時兼?zhèn)淞速Y源管理和作業(yè)控制兩個功能,這個成為系統(tǒng)的一個最大瓶頸,嚴重制約了Hadoop集群的擴展性。
- 可靠性差:MRv1采用的master/slaver結構,其中master節(jié)點存在單點故障問題,一旦它出現(xiàn)故障將導致整個集群不可用。
- 資源利用率低:MRv1采用了基于槽位的資源分配模型,槽位是一種粗粒度的資源劃分單位,通常一個任務不會用完槽位對應的資源,且其他任務也無法使用這些空閑資源。此外,Hadoop將槽位分為Map Slot和Reduce Slot兩種,且不允許它們之間共享,常常會導致一種槽位資源緊張而另一種閑置(比如一個作業(yè)剛剛提交時,只會運行Map Task,此時Reduce Slot閑置)。
- 無法支持多種計算框架。
2、什么是YARN?
YARN實際上是一個彈性計算平臺,它的目標已經不再局限于支持MapReduce一種計算框架了,而是朝著對多種框架進行統(tǒng)一管理的方向發(fā)展。YARN的基本思想是將資源管理和作業(yè)調度/監(jiān)視的功能拆分為單獨的守護程序。 擁有一個全局的ResourceManager(RM)和每個應用程序的ApplicationMaster(AM)。 應用程序可以是單個作業(yè),也可以是作業(yè)的DAG。


3、YARN的作用是什么?
3.1、Hadoop v1.0的方式
在Hadoop v1.0的框架中,對數(shù)據的處理、資源調度主要依賴MapReduce完成,具體過程如下所示:

從以上圖中,我們可以了解到Hadoop v1.0的數(shù)據處理方式。在小規(guī)模的數(shù)據處理過程中,這套方法沒有太大問題。但是,在真實的場景中往往需要處理大量數(shù)據,這套方法便會遇到以下問題:
- 由于大量的數(shù)據處理Job提交給Job Tracker,且Job Tracker需要協(xié)調的Data Node可能有數(shù)千臺,Job Tracker極易成為整個系統(tǒng)的性能、可用的瓶頸。
- 無法有效地調配資源,導致資源分配不均。如以下例子,假設有3臺Data Node(DN),每個DN的內存為4GB。用戶提交了6個Job,每個Job需要1GB內存進行處理,且數(shù)據均在DN2上。由于DN2只有4GB內存,所以Job1-4在DN2上運行,Job5和6則在排隊等待。但是,此時DN1和3均在閑置的狀態(tài)下,而未能有效的被利用。

3.2、YARN的方式
基于上述問題,Hadoop在2.0版本上推出了YARN (Yet Another Resource Negotiator)。YARN的核心思想是將資源管理和Job的調度/監(jiān)控進行分離。YARN的架構如下圖所示。


YARN的核心組件可以分為兩大部分:
全局組件
-
Resource Manager(RM): 作為全局統(tǒng)一的資源管理、調度、分配。Resource Manager由Scheduler(調度器:本質上是一種策略)和Applicatio Manager(應用程序管理器,ASM:負責管理Client用戶提交的應用)組成。Scheduler根據節(jié)點的容量、隊列情況,為Application分配資源;Application Manager接受用戶提交的請求,在節(jié)點中啟動Application Master,并監(jiān)控Application Master的狀態(tài)、進行必要的重啟。 -
Node Manager(NM): 在每一個節(jié)點上都有一個Node Manager作為代理監(jiān)控節(jié)點的資源使用情況(cpu, memory, disk, network)并向Resource Manager上報節(jié)點狀態(tài)。
Per-applicaiton組件
-
Application Master(AM): 負責數(shù)據處理job的執(zhí)行調度。Application Master與Resource Manager進行溝通,獲取資源進行計算。得到資源后,與節(jié)點上的Node Manager進行溝通,在分配的Container匯總執(zhí)行任務,并監(jiān)控任務執(zhí)行的情況。(每當 Client 提交一個 Application 時候,就會新建一個 ApplicationMaster 。由這個 ApplicationMaster 去與 ResourceManager 申請容器資源,獲得資源后會將要運行的程序發(fā)送到容器上啟動,然后進行分布式計算。) -
Container: 資源的一種抽象方式,它封裝了某個節(jié)點上的多維度資源,如內存、CPU、磁盤、網絡等,當Application Master向Resource Manager申請資源時,Resource Manager為Application Master返回的資源便是Container。
當YARN接受用戶提交的Job時,其工作過程為:

YARN通過以下方式,解決了上述問題。
- 通過Application Master來解決Job Tracker的瓶頸問題。每當新的job提交進來后,Resource Manager會在恰當?shù)墓?jié)點啟動一個新的Application Master,從而避免在Hadoop v1.0中Job Tracker成為性能瓶頸的尷尬。
- 更有效的進行資源的調度。Resource Manager可以為Application Master分配空余的資源,幫忙Application Master完成任務。
- 支持MapReduce以外的數(shù)據處理方式,例如:Spark等。
4、YARN和其他的資源管理器的對比
即便Hadoop v2.0應用來YARN的設計思路,也仍有一個難題:當大量的job提交、用盡所有計算資源后,新的job要等待很久才能被處理,即便新的job是非常重要的任務,也只能等待。在YARN中,通過scheduler plugin(例如:FIFO Scheduler、Fair Scheduler、Capacity Scheduler)的方式,配置不同的資源調度規(guī)則,來盡量緩解該問題,讓重要的job可以優(yōu)先獲得資源調配。
5、參考資料
http://www.itdecent.cn/p/952d59b7cbe7
https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html