天天看點

YARN面試題總結(大資料面試)

YARN概述

YARN 是一種新的 Hadoop 資料總管,它是一個通用資源管理系統。可為上層應用提供統一的資源管理和排程,它的引入為叢集在使用率、資源統一管理和資料共享等方面帶來了巨大優點。

YARN最初是為了修複MapReduce實作裡的明顯不足,并對可伸縮性(支援一萬個節點和二十萬個核心的叢集)、可靠性和叢集使用率進行了提升。YARN實作這些需求的方式是,把Job Tracker的兩個主要功能(資源管理和作業排程/監控)分成了兩個獨立的服務程式——全局的資源管理(RM)和針對每一個應用的應用 Master(AM)。這樣一個應用要麼是傳統意義上的MapReduce任務,要麼是任務的有向無環圖(DAG)。

YARN從某種那個意義上來說應該算做是一個雲作業系統,它負責叢集的資源管理。在作業系統之上能夠開發各類的應用程式,比如批處理MapReduce、流式作業Storm以及實時型服務Storm等。這些應用能夠同一時候利用Hadoop叢集的計算能力和豐富的資料存儲模型,共享同一個Hadoop 叢集和駐留在叢集上的資料。

此外,這些新的架構還能夠利用YARN的資料總管,提供新的應用管理器實作。

1、yarn的結構

yarn總體上是master/slave結構,主要由ResourceManager、NodeManager、ApplicationMaster和Container等幾個元件組成。

2.1 RM

RM 是一個全局的資料總管,負責整個系統的資源管理和配置設定,它主要由兩個部分組成:排程器(Scheduler)和應用程式管理器(Application Manager)。

排程器根據容量、隊列等限制條件,将系統中的資源配置設定給正在運作的應用程式,在保證容量、公平性和服務等級的前提下,優化叢集資源使用率,讓所有的資源都被充分利用。

應用程式管理器負責管理整個系統中的所有的應用程式,包括應用程式的送出、與排程器協商資源以啟動ApplicationMaster、監控ApplicationMaster運作狀态并在失敗時重新開機它。

2.2 AppMaster

使用者送出的一個應用程式會對應于一個ApplicationMaster,它的主要功能有:

a.與RM 排程器協商以獲得資源,資源以Container 表示。

b.将得到的任務進一步配置設定給内部的任務。

c.與NM 通信以啟動/停止任務。

d.監控所有的内部任務狀态,并在任務運作失敗的時候重新為任務申請資源以重新開機任務。

2.3 NodeManager

NodeManager 是每個節點上的資源和任務管理器,一方面,它會定期地向RM 彙報本節點上的資源使用情況和各個Container 的運作狀态;另一方面,他接收并處理來自AM 的Container 啟動和停止請求。

2.4 Container

Yarn中的資源抽象,它封裝了某個節點上的多元度資源,如記憶體,CPU,磁盤,網絡等。AppMaster向NodeManager申請資源的時候,資源是以container的形式表示的。一個應用程式會配置設定一個Container,這個應用程式隻能使用這個Container 中描述的資源。不同于MapReduceV1 中槽位slot 的資源封裝,Container 是一個動态資源的劃分機關,更能充分利用資源。

2、yarn的排程器

1、FIFO 排程模式的基本原理、優點和缺點?

基本原理:按照先後順序決定資源的使用,資源優先滿足最先來的 job。第一個 job 優先獲 取所有可用的資源,接下來第二個 job 再擷取剩餘資源。以此類推,如果第一個 job 沒有占 用所有的資源,那麼第二個 job 還可以繼續擷取剩餘資源,這樣多個 job 可以并行運作,如 果第一個 job 很大,占用所有資 源,則第二 job 就需要等待,等到第一個 job 釋放所有資源。

優點和缺點:

1)适合長作業,不适合短作業,

2)适合 CPU 繁忙型作業(計算時間長,相當于 長作業),不利于 IO 繁忙型作業(計算時間短,相當于短作業)

2、FAIR 排程模式的優點和缺點?

所有的任務擁有大緻相當的優先級來共享叢集資源,spark 多以輪訓的方式為任務配置設定資 源,不管長任務還是短任務都可以獲得資源,并且獲得不錯的響應時間,對于短任務,不會 像 FIFO 那樣等待較長時間了,通過參數 spark.scheduler.mode 為 FAIR 指定.

3、CAPCACITY 排程模式的優點和缺點?

原理:容量排程器支援多個隊列,每個隊列可配置一定的資源量,每個隊列采用 FIFO 排程策 略,為了防止同一個使用者的作業獨占隊列中的資源,該排程器會對同一使用者送出的作業所占 資源量進行限定。排程時,首先按以下政策選擇一個合适隊列:計算每個隊列中正在運作的 任務數與其應該分得的計算資源之間的比值(即比較空閑的隊列),選擇一個該比值最小的隊 列;然後按以下政策選擇該隊列中一個作業:按照作業優先級和送出時間順序選擇,同時考 慮使用者資源量限制和記憶體限制。

優點:

(1)計算能力保證。支援多個隊列,某個作業可被送出到某一個隊列中。每個隊列會配置一 定比例的計算資源,且所有送出到隊列中的作業共享該隊列中的資源。

(2)靈活性。空閑資源會被配置設定給那些未達到資源使用上限的隊列,當某個未達到資源的隊 列需要資源時,一旦出現空閑資源資源,便會配置設定給他們。

(3)支援優先級。隊列支援作業優先級排程(預設是 FIFO)

(4)多重租賃。綜合考慮多種限制防止單個作業、使用者或者隊列獨占隊列或者叢集中的資源。

(5)基于資源的排程。 支援資源密集型作業,允許作業使用的資源量高于預設值,進而可 容納不同資源需求的作業。不過,目前僅支援記憶體資源的排程。

3、YARN高可用

YARN ResourceManager 的高可用與 HDFS NameNode 的高可用類似,但是 ResourceManager 不像 NameNode ,沒有那麼多的中繼資料資訊需要維護,是以它的狀态資訊可以直接寫到 Zookeeper 上,并依賴 Zookeeper 來進行主備選舉。

4、為什麼會産生 yarn,它解決了什麼問題,有什麼優勢?

Yarn最主要的功能就是解決運作的使用者程式與yarn架構完全解耦。

Yarn上可以運作各種類型的分布式運算程式(mapreduce隻是其中的一種),比如mapreduce、storm程式,spark程式……

5、作業送出全過程詳解

作業送出全過程詳解

作業送出

第1步:client調用job.waitForCompletion方法,向整個叢集送出MapReduce作業。

第2步:client向RM申請一個作業id。

第3步:RM給client傳回該job資源的送出路徑和作業id。

第4步:client送出jar包、切片資訊和配置檔案到指定的資源送出路徑。

第5步:client送出完資源後,向RM申請運作MrAppMaster。

作業初始化

第6步:當RM收到client的請求後,将該job添加到容量排程器中。

第7步:某一個空閑的NM領取到該job。

第8步:該NM建立Container,并産生MRAppmaster。

第9步:下載下傳client送出的資源到本地。

任務配置設定

第10步:MrAppMaster向RM申請運作多個maptask任務資源。

第11步:RM将運作maptask任務配置設定給另外兩個NodeManager,另兩個NodeManager分别領取任務并建立容器。

任務運作

第12步:MR向兩個接收到任務的NodeManager發送程式啟動腳本,這兩個NodeManager分别啟動maptask,maptask對資料分區排序。

第13步:MrAppMaster等待所有maptask運作完畢後,向RM申請容器,運作reduce task。

第14步:reduce task向maptask擷取相應分區的資料。

第15步:程式運作完畢後,MR會向RM申請登出自己。

進度和狀态更新

YARN中的任務将其進度和狀态(包括counter)傳回給應用管理器, 用戶端每秒(通過mapreduce.client.progressmonitor.pollinterval設定)向應用管理器請求進度更新, 展示給使用者。

作業完成

除了向應用管理器請求作業進度外, 用戶端每5分鐘都會通過調用waitForCompletion()來檢查作業是否完成。時間間隔可以通過mapreduce.client.completion.pollinterval來設定。作業完成之後, 應用管理器和container會清理工作狀态。作業的資訊會被作業曆史伺服器存儲以備之後使用者核查。

資料來源