Apache Hadoop YARN (Yet Another Resource Negotiator,另外一種資源協調者)是一種新的 Hadoop 資源管理器,它是一個通用資源管理系統和調度平臺,可爲上層應用提供統一的資源管理和調度,它的引入爲集羣在利用率、資源統一管理和數據共享等方面帶來了巨大好處。能夠把 yarn 理解爲至關於一個分佈式的操做系統平臺,而 mapreduce 等運算程序則至關於運行於操做系統之上的應用程序,Yarn 爲這些程序提供運算所需的資源(內存、CPU)。架構
YARN 是一個資源管理、任務調度的框架,主要包含三大模塊:ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM).app
1).ResourceManager 負責全部資源的監控、分配和管理;框架
2).ApplicationMaster 負責每個具體應用程序的調度和協調;分佈式
3).NodeManager 負責每個節點的維護。對於全部的 applications,RM 擁有絕對的控制權和對資源的分配權。而每一個 AM 則會和RM 協商資源,同時和 NodeManager 通訊來執行和監控 task。oop
1)client 向 RM 提交應用程序,其中包括啓動該應用的 ApplicationMaster 的必須信息,例如 ApplicationMaster 程序、啓動 ApplicationMaster 的命令、用戶程序等。操作系統
2)ResourceManager 啓動一個 container 用於運行 ApplicationMaster。啓動中的 ApplicationMaster 向 ResourceManager 註冊本身,啓動成功後與 RM 保持心跳。blog
3)ApplicationMaster 向 ResourceManager 發送請求,申請相應數目的 container。隊列
4)ResourceManager 返回 ApplicationMaster 的申請的 containers 信息。申請成功的內存
container,由 ApplicationMaster 進行初始化。container 的啓動信息初始化後,AMci
與對應的 NodeManager 通訊,要求 NM 啓動 container。AM 與 NM 保持心跳,從而對 NM上運行的任務進行監控和管理。
5) container 運行期間,ApplicationMaster 對 container 進行監控。container 經過 RPC
協議向對應的 AM 彙報本身的進度和狀態等信息。
6) 應用運行期間,client 直接與 AM 通訊獲取應用的狀態、進度更新等信息。
7) 應用運行結束後,ApplicationMaster 向 ResourceManager 註銷本身,並容許屬於它的container 被收回。
Yarn中,負責給應用分配資源的就是Scheduler,三種調度器能夠選擇:FIFO Scheduler ,Capacity Scheduler,FairScheduler。
FIFO Scheduler 把應用按提交的順序排成一個隊列,這是一個 先進先出隊列,在進行
資源分配的時候,先給隊列中最頭上的應用進行分配資源,待最頭上的應用需求知足後再給下一個分配,以此類推。
Capacity 調度器容許多個組織共享整個集羣,每一個組織能夠得到集羣的一部分計算能力。經過爲每一個組織分配專門的隊列,而後再爲每一個隊列分配必定的集羣資源,這樣整個集羣就能夠經過設置多個隊列的方式給多個組織提供服務了。除此以外,隊列內部又能夠垂直劃分,這樣一個組織內部的多個成員就能夠共享這個隊列資源了,在一個隊列內部,資源的調度是採用的是先進先出(FIFO)策略。
在 Fair 調度器中,咱們不須要預先佔用必定的系統資源,Fair 調度器會爲全部運行的job 動態的調整系統資源。以下圖所示,當第一個大 job 提交時,只有這一個 job 在運行,此時它得到了全部集羣資源;當第二個小任務提交後,Fair 調度器會分配一半資源給這個小任務,讓這兩個任務公平的共享集羣資源。