1. 程式人生 > 程式設計 >Hadoop YARN 架構詳解

Hadoop YARN 架構詳解

通過對Hadoop1.0和2.0的架構對比,引出了YARN作為資源排程和管理器的作用。

1、YARN產生的背景

YARN是MRv1基礎上演化而來的,克服了MRv1中的各種侷限性。在正式的介紹YARN之前,我們先要了解MRv1的一些侷限性,這可概括為以下幾個方面:

  • 擴充套件性差:在MRv1中,JobTracker同時兼備了資源管理和作業控制兩個功能,這個成為系統的一個最大瓶頸,嚴重製約了Hadoop叢集的擴充套件性。
  • 可靠性差:MRv1採用的master/slaver結構,其中master節點存在單點故障問題,一旦它出現故障將導致整個叢集不可用。
  • 資源利用率低:MRv1採用了基於槽位的資源分配模型,槽位是一種粗粒度的資源劃分單位,通常一個任務不會用完槽位對應的資源,且其他任務也無法使用這些空閒資源。此外,Hadoop將槽位分為Map Slot和Reduce Slot兩種,且不允許它們之間共享,常常會導致一種槽位資源緊張而另一種閒置(比如一個作業剛剛提交時,只會執行Map Task,此時Reduce Slot閒置)。
  • 無法支援多種計算框架。

2、什麼是YARN?

YARN實際上是一個彈性計算平臺,它的目標已經不再侷限於支援MapReduce一種計算框架了,而是朝著對多種框架進行統一管理的方向發展。YARN的基本思想是將資源管理和作業排程/監視的功能拆分為單獨的守護程式。 擁有一個全域性的ResourceManager(RM)和每個應用程式的ApplicationMaster(AM)。 應用程式可以是單個作業,也可以是作業的DAG。

image-20191117175429041

image-20191117175447804

3、YARN的作用是什麼?

3.1、Hadoop v1.0的方式

在Hadoop v1.0的框架中,對資料的處理、資源排程主要依賴MapReduce完成,具體過程如下所示:

image-20191117175531487

從以上圖中,我們可以瞭解到Hadoop v1.0的資料處理方式。在小規模的資料處理過程中,這套方法沒有太大問題。但是,在真實的場景中往往需要處理大量資料,這套方法便會遇到以下問題:

  • 由於大量的資料處理Job提交給Job Tracker,且Job Tracker需要協調的Data Node可能有數千臺,Job Tracker極易成為整個系統的效能、可用的瓶頸。
  • 無法有效地調配資源,導致資源分配不均。如以下例子,假設有3臺Data Node(DN),每個DN的記憶體為4GB。使用者提交了6個Job,每個Job需要1GB記憶體進行處理,且資料均在DN2上。由於DN2只有4GB記憶體,所以Job1-4在DN2上執行,Job5和6則在排隊等待。但是,此時DN1和3均在閒置的狀態下,而未能有效的被利用。

image-20191117175553600

3.2、YARN的方式

基於上述問題,Hadoop在2.0版本上推出了YARN (Yet Another Resource Negotiator)。YARN的核心思想是將資源管理和Job的排程/監控進行分離。YARN的架構如下圖所示。

image-20191117175612400

image-20191117175634723

YARN的核心元件可以分為兩大部分:

全域性元件

  • Resource Manager(RM): 作為全域性統一的資源管理、排程、分配。Resource Manager由Scheduler(排程器:本質上是一種策略)和Applicatio Manager(應用程式管理器,ASM:負責管理Client使用者提交的應用)組成。Scheduler根據節點的容量、佇列情況,為Application分配資源;Application Manager接受使用者提交的請求,在節點中啟動Application Master,並監控Application Master的狀態、進行必要的重啟。
  • Node Manager(NM): 在每一個節點上都有一個Node Manager作為代理監控節點的資源使用情況(cpu,memory,disk,network)並向Resource Manager上報節點狀態。

Per-applicaiton元件

  • Application Master(AM): 負責資料處理job的執行排程。Application Master與Resource Manager進行溝通,獲取資源進行計算。得到資源後,與節點上的Node Manager進行溝通,在分配的Container彙總執行任務,並監控任務執行的情況。(每當 Client 提交一個 Application 時候,就會新建一個 ApplicationMaster 。由這個 ApplicationMaster 去與 ResourceManager 申請容器資源,獲得資源後會將要執行的程式傳送到容器上啟動,然後進行分散式計算。)
  • Container: 資源的一種抽象方式,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等,當Application Master向Resource Manager申請資源時,Resource Manager為Application Master返回的資源便是Container。

當YARN接受使用者提交的Job時,其工作過程為:

image-20191117175658829

YARN通過以下方式,解決了上述問題。

  • 通過Application Master來解決Job Tracker的瓶頸問題。每當新的job提交進來後,Resource Manager會在恰當的節點啟動一個新的Application Master,從而避免在Hadoop v1.0中Job Tracker成為效能瓶頸的尷尬。
  • 更有效的進行資源的排程。Resource Manager可以為Application Master分配空餘的資源,幫忙Application Master完成任務。
  • 支援MapReduce以外的資料處理方式,例如:Spark等。

4、YARN和其他的資源管理器的對比

即便Hadoop v2.0應用來YARN的設計思路,也仍有一個難題:當大量的job提交、用盡所有計算資源後,新的job要等待很久才能被處理,即便新的job是非常重要的任務,也只能等待。在YARN中,通過scheduler plugin(例如:FIFO SchedulerFair SchedulerCapacity Scheduler)的方式,配置不同的資源排程規則,來儘量緩解該問題,讓重要的job可以優先獲得資源調配。

5、參考資料

www.jianshu.com/p/952d59b7c…

hadoop.apache.org/docs/curren…