yarn是MapReduce第二代,將jobtracker重構呈功能分離成單獨的組件。Yarn能夠看做一個集羣操做系統,他爲應用程序提供了基本的服務來更好的利用大的、動態的、並行的基礎設施資源。用任何語言編寫的應用程序都能順利用任意規模的Hadoop集羣的計算和存儲資源。node
yarn是一種分層的集羣架構,分層的本質是resourcemanager—RM。網絡
yarn由三個組件組成:ResourceManager(RM)、Applications Manager—ASM、NodeManager(NM)。架構
ResourceManager(RM)是一個全局的資源管理器,負責整個系統的資源管理和分配,簡稱RM。app
RM構成:框架
ApplicationMaster是應用程序管理器,簡稱AM。分佈式
AM是每一個用戶做業的主進程,負責管理做業生命週期,包括動態的增長或減小資源使用(container)、管理執行流程(map任務和reduce任務),處理故障和計算誤差以及執行其餘的本地優化。oop
AM的功能優化
NM是hadoop每一個節點上的資源和任務管理器,一方面,它會定時地向RM彙報本節點上的資源使用狀況和各個Container的運行狀態;另外一方面,它接收並處理來自AM的Container啓動/中止等各類請求。操作系統
Container(容器)是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,YARN會爲每一個任務分配一個Container,且該任務只能使用該Container中描述的資源。設計
單個節點上能夠有多個Container。系統中的每一個節點能夠認爲是有內存和CPU的最小容量的多個
Container組成。AM能夠請求任何Container來佔據最小容量的整數倍的資源。
註釋:Container是綁定到特定集羣節點的一組資源邏輯組合,能夠理解爲一個容器。
RM與NM經過心跳通訊,RM與每一個節點上的NM進程交互。NM負責本地資源的監控,故障報告以及container生命週期的管理(如啓動和殺死做業)。RM依賴NM來維護集羣的全局視圖。
在啓動時,NM向RM註冊,而後發送包含自身狀態的心跳,並等待來自RM的指令。NM的主要目標是管理RM分配給他的應用Container。
AM與RM、NM是經過可擴展網絡協議進行通訊的,AM向RM發出資源請求(包括本地化偏好—HDFS的使用、container屬性等),當一個資源被調度給一個AM時,RM爲該資源生成一個租約,供AM經過心跳獲取。Container經過特定協議與AM通訊來報告狀態和健康信息以及接受框架特定的指令。以下圖所示yarn的做業流程
客戶端提交做業申請
2)RM處理用戶請求
RM將用戶的請求打包爲task,放置調度隊列,根據當前yarn的調度模式進行調度(YARN提供的三種任務調度策略:FIFO Scheduler,Capacity Scheduler 和 Fair Scheduler)。
3)NodeManager從隊列中獲取task。
建立contianer容器啓動AM和下載資源文件。
4)AM向RM申請運行mapTask容器,RM將請求再打包爲task放置調度隊列。
其它NM獲取到task後會再建立contianer容器並下載資源文件,contianer中的mapTask任務由AM負責監控和調度。
5)AM向maptask發送程序啓動命令。
6)contianer運行mapTask
7)當各節點mapTask運行完畢後,AM重複4的步驟(此次申請運行reduceTask)。
程序運行完成後,AM向RM註銷本身。