Link: http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/YARN.htmlhtml
YARN結構圖。圖中有兩個Application,所以有兩個ApplicationMaster。4個節點,其中一個節點運行ResourceManager,另外3個節點運行NodeManager。apache
Yarn的基本思想就是讓資源管理器和做業調度/監視器分別成爲守護進程。RM和NM構成了數據計算框架。緩存
一、ResourceManager屬於集羣級別,整個集羣只有一個RM,RM負責集羣中全部應用的資源管理,當多個做業同時提交時,RM在多個競爭的做業之間權衡優先級並進行資源的仲裁,當資源分配完畢後,RM就再也不關心每一個應用內部的資源分配,也不關注每一個應用的狀態。所以RM對於每一個應用來講,只進行一次資源分配,大大減輕了RM的負荷,使其擴展性大大加強。app
RM主要包含兩個部分:框架
(1)Yarn Scheduler。Scheduler根據不一樣應用對資源的需求狀況(Container, memory, cpu, disk, network etc),爲應用分配資源。它並不監控應用的狀態,不會重啓失敗的tasks。它基於應用程序的資源申請來執行資源調度,目前可以調度的資源包括CPU核數和內存。支持的調度器包括:FIFO調度器、Capacity調度器、自適應調度器、自學習調度器、動態優先級調度器等。分佈式
The Scheduler has a pluggable policy which is responsible for partitioning the cluster resources among the various queues, applications etc. The current schedulers such as the CapacityScheduler and the FairScheduler would be some examples of plug-insoop
(2)ApplicationManager。ApplicationManager負責管理已經提交的應用的集合。在應用提交後,首先檢查ApplicationMaster資源請求的合法性,而後肯定沒有其餘已經提交的應用使用了相同的ID。它還負責記錄和管理已經結束的應用。學習
ApplicationManager負責:spa
①接收提交的做業rest
②negotiating the first container for executing the application specific ApplicationMaster
③restarting the ApplicationMaster container on failure
二、NodeManager屬於節點(機器)級別,每一個機器有一個NM,它負責保持與RM的同步,跟蹤節點的健康情況,管理各個COntainer的生命週期,監控每一個Container的資源使用狀況,管理分佈式緩存,管理各個Container生成的日誌,提供不一樣Yarn應用可能須要的輔助服務。其中對於Container的管理是NodeManager的核心功能。
每一個機器的NM的行爲:
(1) 對它的containers負責,啓動並監控containers的資源使用狀況(cpu, memory, disk, network)。每一個container在給定的資源下執行鍼對於Application的進程(能夠是Unix Process或是Linux cgroup)
(2) 向RM發送報告
三、ApplicationMaster屬於應用級別,每一個應用對應一個AM,不一樣的計算礦建的AM的實現也是不一樣的。它負責向RM申請資源,在對應的NodeManager上啓動Container來執行任務,並在應用中不斷監控這些Container的狀態。
每一個應用的AM的行爲:
(1) 向RM請求資源(與RM的Scheduler協商)
(2) 與containers協做完成任務的執行和監視