YARN Introduce
1. MapReduce1.0缺陷
- (1)存在單點故障
- (2)JobTracker「大包大攬」致使任務太重(任務多時內存開銷大,上限4000節點)
- (3)容易出現內存溢出(分配資源只考慮MapReduce任務數,不考慮CPU、內存)
- (4)資源劃分不合理(強制劃分爲slot ,包括Map slot和Reduce slot)
2. YARN體系結構
- MapReduce1.0既是一個計算框架,也是一個資源管理調度框架
- 到了Hadoop2.0之後,MapReduce1.0中的資源管理調度功能,被單獨分離出來造成了YARN,它是一個純粹的資源管理調度框架,而不是一個計算框架
- 被剝離了資源管理調度功能的MapReduce 框架就變成了MapReduce2.0,它是運行在YARN之上的一個純粹的計算框架,再也不本身負責資源調度管理服務,而是由YARN爲其提供資源管理調度服務
ResourceManager
- 處理客戶端請求
- 啓動/監控ApplicationMaster
- 監控NodeManager
- 資源分配與調度
ApplicationMaster
- 爲應用程序申請資源,並分配給內部任務
- 任務調度、監控與容錯
NodeManager
- 單個節點上的資源管理
- 處理來自ResourceManger的命令
- 處理來自ApplicationMaster的命令
2.1 ResourceManager
ResourceManager(RM)是一個全局的資源管理器,負責整個系統的資源管理和分配,主要包括兩個組件,即調度器(Scheduler)和應用程序管理器(Applications Manager)。node
調度器接收來自ApplicationMaster的應用程序資源請求,把集羣中的資源以「容器」的形式分配給提出申請的應用程序,容器的選擇一般會考慮應用程序所要處理的數據的位置,進行就近選擇,從而實現「計算向數據靠攏」。編程
容器(Container)做爲動態資源分配單位,每一個容器中都封裝了必定數量的CPU、內存、磁盤等資源,從而限定每一個應用程序可使用的資源量。app
調度器被設計成是一個可插拔的組件,YARN不只自身提供了許多種直接可用的調度器,也容許用戶根據本身的需求從新設計調度器。框架
應用程序管理器(Applications Manager)負責系統中全部應用程序的管理工做,主要包括應用程序提交、與調度器協商資源以啓動ApplicationMaster、監控ApplicationMaster運行狀態並在失敗時從新啓動等。oop
2.2 ApplicationMaster
ResourceManager接收用戶提交的做業,按照做業的上下文信息以及從NodeManager收集來的容器狀態信息,啓動調度過程,爲用戶做業啓動一個ApplicationMaster。設計
ApplicationMaster的主要功能是:3d
- (1)當用戶做業提交時,ApplicationMaster與ResourceManager協商獲取資源,ResourceManager會以容器的形式爲ApplicationMaster分配資源;
- (2)把得到的資源進一步分配給內部的各個任務(Map任務或Reduce任務),實現資源的「二次分配」;
- (3)與NodeManager保持交互通訊進行應用程序的啓動、運行、監控和中止,監控申請到的資源的使用狀況,對全部任務的執行進度和狀態進行監控,並在任務發生失敗時執行失敗恢復(即從新申請資源重啓任務);
- (4)定時向ResourceManager發送「心跳」消息,報告資源的使用狀況和應用的進度信息;
- (5)看成業完成時,ApplicationMaster向ResourceManager註銷容器,執行週期完成。
2.3 NodeManager
NodeManager是駐留在一個YARN集羣中的每一個節點上的代理,主要負責:代理
- 容器生命週期管理
- 監控每一個容器的資源(CPU、內存等)使用狀況
- 跟蹤節點健康情況
- 以「心跳」的方式與ResourceManager保持通訊
- 向ResourceManager彙報做業的資源使用狀況和每一個容器的運行狀態
- 接收來自ApplicationMaster的啓動/中止容器的各類請求
須要說明的是,NodeManager主要負責管理抽象的容器,只處理與容器相關的事情,而不具體負責每一個任務(Map任務或Reduce任務)自身狀態的管理,由於這些管理工做是由ApplicationMaster完成的,ApplicationMaster會經過不斷與NodeManager通訊來掌握各個任務的執行狀態。blog
2.4 集羣部署
在集羣部署方面,YARN的各個組件是和Hadoop集羣中的其餘組件進行統一部署的。
接口
3. YARN工做流程
- 步驟1:用戶編寫客戶端應用程序,向YARN提交應用程序,提交的內容包括ApplicationMaster程序、啓動ApplicationMaster的命令、用戶程序等
- 步驟2:YARN中的ResourceManager負責接收和處理來自客戶端的請求,爲應用程序分配一個容器,在該容器中啓動一個ApplicationMaster
- 步驟3:ApplicationMaster被建立後會首先向ResourceManager註冊
- 步驟4:ApplicationMaster採用輪詢的方式向ResourceManager申請資源
- 步驟5:ResourceManager以「容器」的形式向提出申請的ApplicationMaster分配資源
- 步驟6:在容器中啓動任務(運行環境、腳本)
- 步驟7:各個任務向ApplicationMaster彙報本身的狀態和進度
- 步驟8:應用程序運行完成後,ApplicationMaster向ResourceManager的應用程序管理器註銷並關閉本身
4. YARN與MR1.0對比
從MapReduce1.0框架發展到YARN框架,客戶端並無發生變化,其大部分調用API及接口都保持兼容,所以,原來針對Hadoop1.0開發的代碼不用作大的改動,就能夠直接放到Hadoop2.0平臺上運行。
整體而言,YARN相對於MapReduce1.0來講具備如下優點:
- 大大減小了承擔中心服務功能的ResourceManager的資源消耗
- ApplicationMaster來完成須要大量資源消耗的任務調度和監控
多個做業對應多個ApplicationMaster,實現了監控分佈化
MapReduce1.0既是一個計算框架,又是一個資源管理調度框架,可是,只能支持MapReduce編程模型。而YARN則是一個純粹的資源調度管理框架,在它上面能夠運行包括MapReduce在內的不一樣類型的計算框架,只要編程實現相應的ApplicationMaster
YARN中的資源管理比MapReduce1.0更加高效