Yarn是一個分佈式的資源管理系統,用以提升分佈式的集羣環境下的資源利用率,這些資源包括內存、IO、網絡、磁盤等。其產生的緣由是爲了解決原MapReduce框架的不足。程序員
最初MapReduce的committer們還能夠週期性的在已有的代碼上進行修改,但是隨着代碼的增長以及原MapReduce框架設計的不足,在原MapReduce框架上進行修改變得愈來愈困難,面試
因此MapReduce的committer們決定從架構上從新設計MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具備更好的擴展性、可用性、可靠性、向後兼容性和更高的資源利用率以及能支持除了MapReduce計算框架外的更多的計算框架。網絡
一、MapReduce框架的不足架構
如今比較流行的說法是jobtracker的問題,好比單點故障,任務太重。但除了Jobtracker,同時還有一個TaskTracker。咱們看下圖:app
JobTacker概述框架
JobTacker其承擔的任務有:接受任務、計算資源、分配資源、與DataNode進行交流。分佈式
在hadoop中每一個應用程序被表示成一個做業,每一個做業又被分紅多個任務,JobTracker的做業控制模塊則負責做業的分解和狀態監控。oop
*最重要的是狀態監控:主要包括TaskTracker狀態監控、做業狀態監控和任務狀態監控。主要做用:容錯和爲任務調度提供決策依據。學習
TaskTracker概述大數據
TaskTracker是JobTracker和Task之間的橋樑:一方面,從JobTracker接收並執行各類命令:運行任務、提交任務、殺死任務等;另外一方面,將本地節點上各個任務的狀態經過心跳週期性彙報給JobTracker。TaskTracker與JobTracker和Task之間採用了RPC協議進行通訊
資源slot概述
slot不是CPU的Core,也不是memory chip,它是一個邏輯概念,一個節點的slot的數量用來表示某個節點的資源的容量或者說是能力的大小,於是slot是 Hadoop的資源單位。
hadoop中什麼是slots
因此JobTracker須要完成的任務太多,既要維護job的狀態又要維護job的task的狀態,形成過多的資源消耗
在taskTracker端,用map/reduce task做爲資源的表示過於簡單,沒有考慮到CPU、內存等資源狀況,當把兩個須要消耗大內存的task調度到一塊兒,很容易出現OOM
把資源強制劃分爲map/reduce slot,當只有map task時,reduce slot不能用;當只有reduce task時,map slot不能用,容易形成資源利用不足。
二、Yarn
首先讓咱們看一看Yarn的架構
1.ResourceManager概述
是全局的,負責對於系統中的全部資源有最高的支配權。ResourceManager做爲資源的協調者有兩個主要的組件:Scheduler和ApplicationsManager(AsM)。
Scheduler負責分配最少但知足application運行所需的資源量給Application。Scheduler只是基於資源的使用狀況進行調度,並不負責監視/跟蹤application的狀態,固然也不會處理失敗的task。
ApplicationsManager負責處理client提交的job以及協商第一個container以供applicationMaster運行,而且在applicationMaster失敗的時候會從新啓動applicationMaster。
2.NodeManager概述
NM主要負責啓動RM分配給AM的container以及表明AM的container,而且會監視container的運行狀況。
在啓動container的時候,NM會設置一些必要的環境變量以及將container運行所需的jar包、文件等從hdfs下載到本地,也就是所謂的資源本地化;當全部準備工做作好後,纔會啓動表明該container的腳本將程序啓動起來。
啓動起來後,NM會週期性的監視該container運行佔用的資源狀況,如果超過了該container所聲明的資源量,則會kill掉該container所表明的進程。
3.ApplicationMaster概述
因爲NodeManager 執行和監控任務須要資源,因此經過ApplicationMaster與ResourceManager溝通,獲取資源。換句話說,ApplicationMaster起着中間人的做用。
轉換爲更專業的術語:AM負責向ResourceManager索要NodeManager執行任務所須要的資源容器,更具體來說是ApplicationMaster負責從Scheduler申請資源,以及跟蹤這些資源的使用狀況以及任務進度的監控。
因此咱們看到JobTracker的功能被分散到各個進程中包括ResourceManager和NodeManager:
好比監控功能,分給了NodeManager,和Application Master。
ResourceManager裏面又分爲了兩個組件:調度器及應用程序管理器。
也就是說Yarn重構後,JobTracker的功能,被分散到了各個進程中。同時因爲這些進程能夠被單獨部署因此這樣就大大減輕了單點故障,及壓力。
最後要提醒在yarn上寫應用程序並不一樣於咱們熟知的MapReduce應用程序,必須牢記yarn只是一個資源管理的框架,並非一個計算框架,計算框架能夠運行在yarn上。咱們所能作的就是向RM申請container,而後配合NM一塊兒來啓動container。
結語
感謝您的觀看,若有不足之處,歡迎批評指正。
爲了幫助你們讓學習變得輕鬆、高效,給你們免費分享一大批資料,幫助你們在成爲大數據工程師,乃至架構師的路上披荊斬棘。在這裏給你們推薦一個大數據學習交流圈:658558542 歡迎你們進羣交流討論,學習交流,共同進步。
當真正開始學習的時候不免不知道從哪入手,致使效率低下影響繼續學習的信心。
但最重要的是不知道哪些技術須要重點掌握,學習時頻繁踩坑,最終浪費大量時間,因此有有效資源仍是頗有必要的。
最後祝福全部遇到瓶疾且不知道怎麼辦的大數據程序員們,祝福你們在日後的工做與面試中一切順利。