yarn是一個分佈式的資源管理系統。html
它誕生的緣由是原來的MapReduce框架的一些不足:app
一、JobTracker單點故障隱患框架
二、JobTracker承擔的任務太多,維護Job狀態,Job的task的狀態等分佈式
三、在taskTracker端,使用map/reduce task表示資源過於簡單,沒有考慮cpu、內存等使用狀況。當把多個須要消耗大量內存的task調度到一塊兒時,很容易出現問題spa
演化後的基本組件xml
下面具體解釋:htm
yarn是一個資源管理的框架,而非計算的框架,理解這點很重要。對象
圖中的Application至關於1.x版本中的map/reduce job。blog
圖中的Container是一個邏輯概念,是一組資源(內存、cpu等)的統稱。生命週期
AM:每個Application對應一個AM。
ResourceManager:主要來作資源的協調者。有兩個重要的組件:
Scheduler:【資源調度】從全部運行着的Application收到資源請求後,構建一個全局的分配計劃。而後根據Application特殊的限制以及全局的一些限制條件分配資源。【資源監視】週期性的接受來自NM的資源使用率監控信息。注意這和job的執行狀況無關,只是監視資源。另外能夠爲AM提供其已完成的container的狀態信息。
Asm:接收資源請求,向Scheduler申請一個Container提供給AM,並啓動AM。向client提供AM運行狀態。總結一句話,就是用來管理全部AM的生命週期。
yarn工做流程:
總結的說就是兩步:client提交Job到AM,AM請求資源運行起來ASM;ASM接管,它計算split、申請資源、與NM配合運行task、監控task等。
一、Job client向AM提交job。
1)得到ApplicationID
2)將Application定義,以及所需jar包上傳到hdfs指定目錄(yarn-site.xml的yarn.app.mapreduce.am.staging-dir)
3)構造資源請求對象以及Application提交上下文信息,提交給AM
二、AM向Scheduler請求一個供ASM運行的Container,向其所在NM發送launchContainer信息,啓動Container
三、AM於NM協調,啓動ASM,並監控之
四、Job client從AM處得到ASM信息,並與之直接通訊
五、ASM計算splits併爲全部map構造資源請求
六、ASM作一些OutputCommitter的準備工做
七、ASM向Scheduler申請資源(一組Container)而後與NM一塊兒對Container執行一些必要的任務,例如資源本地化
八、ASM監視task,若是失敗從新申請Container,若是完成,運行OutputCommitter的cleanup以及commit動做
九、ASM退出
client想知道監控信息的途徑:
task的從AM獲取
AM的從AsM獲取
NM還有一項工做,監控task所使用的資源,若是超出所申請的Container範圍,則kill掉其任務進程
yarn是資源框架,計算框架運行於資源框架之上。map-reduce是計算模型,它實現了特定的ApplicationMaster,才得以在yarn上運行。若是是其餘的計算模型,還須要實現特定的ApplicationMaster,才能在yarn上運行。
引伸閱讀:http://www.aboutyun.com/thread-7678-1-3.html