[轉]Hadoop YARN任務提交流程


Yarn是隨着hadoop發展而催生的新框架,全稱是Yet Another Resource Negotiator,可以翻譯為“另一個資源管理器”。yarn取代了以前hadoop中jobtracker(后面簡寫JT)的角色,因為以前JT的 任務過重,負責任務的調度、跟蹤、失敗重啟等過程,而且只能運行mapreduce作業,不支持其他編程模式,這也限制了JT使用范圍,而yarn應運而 生,解決了這兩個問題。

為了表述清楚,大家可以先看hadoop版本說明這篇文章,我這里要說的是hadoop2.0,也就是新增了yarn之后的版本。

1. Yarn(或稱MRv2)

Yarn把jobtracker的任務分解開來,分為:

  • ResourceManager(簡寫RM)負責管理分配全局資源
  • ApplicationMaster(簡寫AM),AM與每個具體任務對應,負責管理任務的整個生命周期內的所有事宜

除了上面兩個以外,tasktracker被NodeManager(簡寫NM)替代,RM與NM構成了集群的計算平台。這種設計允許NM上長期運 行一些輔助服務,這些輔助服務一般都是應用相關的,通過配置項指定,在NM啟動時加載。例如在yarn上運行mapreduce程序時,shuffle就 是一個由NM加載起來的輔助服務。需要注意的是,在hadoop 0.23之前的版本,shuffle是tasktracker的一部分。

與每個應用相關的AM是一個框架類庫,它與RM溝通協商如何分配資源,與NM協同執行並且監測應用的執行情況。在yarn的設計 中,mapreduce只是一種編程模式,yarn還允許像MPI(message passing interface),Spark等應用構架部署在yarn上運行。

2. Yarn設計


上圖是一個典型的YARN集群。可以看到RM有兩個主要服務:

  • 可插拔的Scheduler,只負責用戶提交任務的調度
  • ApplicationsMaster的(簡寫AsM)負責管理集群中每個任務的ApplicationMaster(簡寫AM),負責任務的監控、失敗重起等

在hadoop1.0時,資源分配的單位是slot,再具體分為map的slot與reduce的slot,而且這些slot的個數是在任務運行前 事先定義的,在任務運行過程中不能改變,很明顯,這會造成資源的分配不均問題。在haodop2.0中,yarn采用了container的概念來分配資 源。每個container由一些可以動態改變的屬性組成,到現在為止,僅支持內存、cpu兩種。但是yarn的這種資源管理方式是通用的,社區以后會加 入更多的屬性,比如網絡帶寬,本地硬盤大小等等。

3. Yarn主要組件

在這小節里,主要介紹yarn各個組件,以及他們之間是如何通信的。

3.1 Client<—>RM

上面這個圖是Client向RM提交任務時的流程。
(1) Client通過New Application Request來通知RM中的AsM組建
(2) AsM一般會返回一個新生成的全局ID,除此之外,傳遞的信息還有集群的資源狀況,這樣Client就可以在需要時請求資源來運行任務的第一個container即AM。
(3) 之后,Client就可以構造並發送ASC了。ASC中包括了調度隊列,優先級,用戶認證信息,除了這些基本的信息之外,還包括用來啟動AM的CLC信息,一個CLC中包括jar包、依賴文件、安全token,以及運行任務過程中需要的其他文件。

經過上面這三步,一個Client就完成了一次任務的提交。之后,Client可以直接通過RM查詢任務的狀態,在必要時,可以要求RM殺死這個應用。如下圖:

3.2 RM<—>AM

RM在收到Client端發送的ASC后,它會查詢是否有滿足其資源要求的container來運行AM,找到后,RM會與那個container所在機器上的NM通信,來啟動AM。下面這個圖描述了這其中的細節。

(1) AM向RM注冊,這個過程包括handshaking過程,並且傳遞一些信息,包括AM監聽的RPC端口、用於監測任務運行狀態的URL等。
(2) RM中的Scheduler部件做回應。這個過程會傳遞AM所需的信息,比如這個集群的最大與最小資源使用情況等。AM利用這些信息來計算並請求任務所需的資源。
(3) 這個過程是AM向RM請求資源。傳遞的信息主要包含請求container的列表,還有可能包含這個AM已經釋放的container的列表。
(4) 在AM經過(3)請求資源之后,在稍微晚些時候,會把心跳包與任務進度信息發送給RM
(5) Scheduler在收到AM的資源請求后,會根據調度策略,來分配container以滿足AM的請求。
(6) 在任務完成后,AM會給RM發送一個結束消息,然后退出。

在上面(5)與(6)之間,AM在收到RM返回的container列表后,會與每個container所在機器的NM通信,來啟動這個container,下面就說說這個過程。

3.2 AM<—>NM


(1) AM向container所在機器的NM發送CLC來啟動container
(2)(3) 在container運行過程中,AM可以查詢它的運行狀態

4. API

通過上面的描述,開發者在開發YARN上的應用時主要需要關注以下接口:

5. 總結

用戶在使用hadoop1.0 API編寫的MapReduce可以不用修改直接運行在yarn上,不過隨着yarn的發展,向后兼容性還不知道怎么樣。不管怎樣,新的yarn平台絕對值得我們使用。

原文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM