Yarn是隨着hadoop發展而催生的新框架,全稱是Yet Another Resource Negotiator,能夠翻譯爲「另外一個資源管理器」。yarn取代了之前hadoop中jobtracker(後面簡寫JT)的角色,由於之前JT的 任務太重,負責任務的調度、跟蹤、失敗重啓等過程,並且只能運行mapreduce做業,不支持其餘編程模式,這也限制了JT使用範圍,而yarn應運而 生,解決了這兩個問題。html
爲了表述清楚,你們能夠先看hadoop版本說明這篇文章,我這裏要說的是hadoop2.0,也就是新增了yarn以後的版本。apache
Yarn把jobtracker的任務分解開來,分爲:編程
除了上面兩個之外,tasktracker被NodeManager(簡寫NM)替代,RM與NM構成了集羣的計算平臺。這種設計容許NM上長期運 行一些輔助服務,這些輔助服務通常都是應用相關的,經過配置項指定,在NM啓動時加載。例如在yarn上運行mapreduce程序時,shuffle就 是一個由NM加載起來的輔助服務。須要注意的是,在hadoop 0.23以前的版本,shuffle是tasktracker的一部分。api
與每一個應用相關的AM是一個框架類庫,它與RM溝通協商如何分配資源,與NM協同執行而且監測應用的執行狀況。在yarn的設計 中,mapreduce只是一種編程模式,yarn還容許像MPI(message passing interface),Spark等應用構架部署在yarn上運行。安全
上圖是一個典型的YARN集羣。能夠看到RM有兩個主要服務:網絡
在hadoop1.0時,資源分配的單位是slot,再具體分爲map的slot與reduce的slot,並且這些slot的個數是在任務運行前 事先定義的,在任務運行過程當中不能改變,很明顯,這會形成資源的分配不均問題。在haodop2.0中,yarn採用了container的概念來分配資 源。每一個container由一些能夠動態改變的屬性組成,到如今爲止,僅支持內存、cpu兩種。可是yarn的這種資源管理方式是通用的,社區之後會加 入更多的屬性,好比網絡帶寬,本地硬盤大小等等。併發
在這小節裏,主要介紹yarn各個組件,以及他們之間是如何通訊的。框架
上面這個圖是Client向RM提交任務時的流程。
(1) Client經過New Application Request來通知RM中的AsM組建
(2) AsM通常會返回一個新生成的全局ID,除此以外,傳遞的信息還有集羣的資源情況,這樣Client就能夠在須要時請求資源來運行任務的第一個container即AM。
(3) 以後,Client就能夠構造併發送ASC了。ASC中包括了調度隊列,優先級,用戶認證信息,除了這些基本的信息以外,還包括用來啓動AM的CLC信息,一個CLC中包括jar包、依賴文件、安全token,以及運行任務過程當中須要的其餘文件。oop
通過上面這三步,一個Client就完成了一次任務的提交。以後,Client能夠直接經過RM查詢任務的狀態,在必要時,能夠要求RM殺死這個應用。以下圖:.net
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,下面就說說這個過程。
(1) AM向container所在機器的NM發送CLC來啓動container
(2)(3) 在container運行過程當中,AM能夠查詢它的運行狀態
經過上面的描述,開發者在開發YARN上的應用時主要須要關注如下接口:
Client使用這個協議來與RM通訊,來啓動一個新應用,檢查任務的運行狀態或殺死任務
AM使用這個協議來向RM註冊/撤銷,請求資源來運行任務。
AM使用這個協議來與NM通訊,來啓動/中止container,查詢container的狀態。
用戶在使用hadoop1.0 API編寫的MapReduce能夠不用修改直接運行在yarn上,不過隨着yarn的發展,向後兼容性還不知道怎麼樣。無論怎樣,新的yarn平臺絕對值得咱們使用。