當前位置:
首頁 > 知識 > Yarn資源調度過程詳細

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上進行資源的調度。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 千鋒JAVA開發學院 的精彩文章:

Swoft 快速上手小貼士
Docker簡單部署Ceph測試集群

TAG:千鋒JAVA開發學院 |