Yarn資源調度過程詳細
在MapReduce1.0中,我們都知道也存在和HDFS一樣的單點故障問題,主要是JobTracker既負責資源管理,又負責任務分配。
Yarn中可以添加多種計算框架,Hadoop,Spark,MapReduce,不同的計算框架在處理不同的任務時,資源利用率可能處於互補階段,有利於提高整個集群的資源利用率。
同時Yarn提供了一種共享集群的模式,隨著數據量的暴增,跨集群間的數據移動,需要花費更長的時間,且硬體成本會增大,共享集群模式可以讓多種框架共享數據和硬體資源。
Yarn基本架構
整個的調度流程為:
1.應用程序通client類向ResourceManager提交程序,Application運行所需要的入口類,出口類,運行的命令,運行所需要的cpu資源和內存資源,jar包資源。
2.ResourceManager通過內部的調度器,去集群中尋找資源,找到資源後與NodeManager進行通信,去啟動相應的ApplicationMaster,AM會按照事先的規劃將任務切分為許多的task任務。
3.ApplicationMaster之後向ResourceManager進行申請資源,RM會將資源進行動態的分配。
4.ApplicationMaster獲得資源後會再將資源進一步分配給內部的task.
5.之後,ApplicationMaster會向NodeManager進行請求,讓NM給啟動起來Task,NM會把Task封裝到Container中允許。
ResourceManager
整個集群只有一個,負責集群資源的統一管理和調度
處理客戶端請求
啟動監控ApplicationMaster
監控NodeManager
資源分配與調度
NodeManager
整個集群存在多個,負責單節點資源管理與使用
處理來自ResourceManager的命令
處理來自ApplicationMaster的命令
ApplicationMaster
每一個應用有一個,負責應用程序的管理
數據切分,申請資源,任務監控,任務容錯
Container
對任務環境的抽象
Yarn的容錯性
ResourceManager存在單點故障,基於Zookeeper實現HA,通常任務失敗後,RM將失敗的任務告訴AM,RM負責任務的重啟,AM來決定如何處理失敗的任務。RMAppMaster會保存已經運行完成的Task,重啟後無需重新運行。
Yarn資源調度框架與調度器
Yarn採用的雙層調度框架,RM將資源分配給AM,AM再將資源進一步分配給Task,資源不夠時會為TASK預留,直到資源充足。在Hadoop1.0中我們分配資源通過slot實現,但是在Yarn中,直接分配資源。
資源調度器有:FIFO,Fair scheduler,Capacity scheduler
Yarn支持CPU和內存兩種資源隔離,內存時決定生死的資源,CPU時影響快滿的資源,內存隔離採用的是基於線程監控和基於Cgroup的方案。
Tez
Tez俗稱DAG計算,多個計算作業之間存在依賴關係,並形成一個依賴關係的有向圖。
Tez是運行在Yarn上的DAG,動態的生成計算的關係流。
如上圖左所示的Top K問題,第一個Mapreduce實現wordcount的功能,第二個Mapreduce只用使用Reduce實現排序的問題,但是在Mapreduce中必須創建兩個MapReduce任務,但是在Tez優化後,可以直接再第一個reduce後,不進行輸出,直接輸出到第二個reduce中,優化了Mapreduce.
上圖中右為一個HiveQL實現的MapReduce,mapreduce為其創建了4個mapreduce任務,使用Tez可以只使用一個Mapreduce任務。
Tez on Yarn和,mapreduce on Yarn上的作業的流程基本一樣。
Tez的優化技術
產生一個Mapreduce任務就提交,影響任務的效率,Tez的優化策略是創建一個ApplicationMaster的緩存池,作業提交到AMppplserver中,預先啟動若干ApplicationMaster形成AM緩衝池。
同時ApplicationMaster啟動的時候也可以預先啟動幾個container,做為容器的緩衝池。
此外ApplicationMaster運行完成後,不會馬上註銷其下的container,而是將其預先分配給正要運行的任務。
Tez的好處就是避免產生較多的Mapreduce任務,產生不必要的網路和磁碟IO.
Strom
Strom是實時處理永不停止的任務,像流水一樣不斷的處理任務。
Strom非常類似與MapReduce1.0的架構,如上圖所示。
但是其任務的調度的流程與Mapreduce的不一樣。
主要的區別是Strom client可以直接操作 Strom ApplicationMaster
Spark
spark克服了MapReduce在迭代式計算和互動式計算方面的不足。
spark中引入了RDD,可以並行計算的數據集合,能夠被緩存到能存和硬碟中。
spark on Yarn 和MapReduce on Yarn 基本上類似
MapReduce2.0和Yarn
MR運行需要進行任務管理和資源管理調度,Yarn只是負責資源管理調度。Mapreduce只是運行在Yarn上的應用。
MapReduce2.0包括Yarn 和MRMapreduce,所以說Yarn是從MapReudce中獨立出來的一個模塊。但是現在Yarn已經成為多種計算框架的資源管理器。
MapReduce1.0與MapReduce2.0的區別
MapReduce1.0是可以直接運行的linux系統上的,因為其自帶了JobTracker服務和TaskTracker服務,它們可以自己進行資源管理與任務的分配。
MapReduce2.0中mapreduce是只有任務管理,所以其必須運行在Yarn上進行資源的調度。
※Swoft 快速上手小貼士
※Docker簡單部署Ceph測試集群
TAG:千鋒JAVA開發學院 |