1. 程式人生 > >大資料(十六):Yarn的工作機制、資源排程器、任務的推測執行機制

大資料(十六):Yarn的工作機制、資源排程器、任務的推測執行機制

一、Yarn概述

        Yarn是一個資源排程平臺,負責為運算程式提供伺服器運算資源,相當於一個分散式的作業系統平臺,而MapReduce等運算程式則相當於運行於操作程式上的應用程式。

 

二、Yarn基本架構

        Yarn主要由ResourceManager、NodeManager、ApplicationMater和Container等元件構成

 

三、Yarn的工作機制

  1. MapReduce程式提交到客戶端所在的節點

  2. Yarnrunner向ResourceMananger申請一個Application
  3.  ResourceManager將該應用程式的資源路徑返回給yarnrunner。

  4. 該程式將執行所需資源提交到HDFS上。

  5. 程式資源提交完畢後,申請執行MRAppmaster

  6. ResourceManager將使用者的請求初始化成一個Task。

  7. 其中一個NodeManager領取到Task任務。

  8. 該NodeManager建立容器Container,併產生MRAppmaster。

  9. Container從HDFS上拷貝資源到本地

  10. MRAppmaster向ResourceManager申請執行MapTask資源。

  11. ResourceManager將執行MapTask任務分配給另外兩個NodeManager,另外兩個NodeManager分別領取任務並建立容器。

  12. MapReduce向兩個接收到任務的NodeManager傳送程式啟動指令碼,這兩個NodeManager分別啟動MapTask,MapTask對資料分割槽排序。

  13. MrAppMaster等待所有MapTask執行完畢,向ResourceManager申請容器,執行reduceTask。

  14. ReducerTask想MapTask獲取相應分割槽的資料

  15. 程式執行完畢後,MapReduce會向ResourceManager申請登出自己

 

三、資源排程器

        目前,Hadoop工作排程器主要有三種:FIFO、Capacity Scheduler和Fair Scheduler。Hadoop2.7.2預設的資源排程器是Capacity Scheduler。

1.先進先出排程器(FIFO)

 

2.容量排程器(Capacity Scheduler)

  1. 支援多個佇列,每個佇列可配置一定的資源量,每個佇列採取FIFO排程策略。

  2. 為了防止同一個使用者的工作獨佔佇列中的資源,該排程器會對同一使用者提交的作業所佔資源量進行限定

  3. 首先,計算每個佇列中正在執行的任務數與其應該分的資源之間的比值,選擇一個比值最小的佇列

  4. 其次,按照作業優先順序和提交時間順序,同時考慮使用者資源量限制和記憶體限制對佇列內任務排序

  5. 三個佇列同時按照任務的先後順序依次執行。

3.公平排程器(Fair Scheduler)

        支援多佇列多使用者,每個佇列中的資源量可以配置,同一佇列中的工作公平共享佇列中所有資源。

        比如有三個佇列:queueA,queueB,queueC,每個佇列中的job按照優先順序分配資源,優先順序越高分配到的資源越多,但是每個job都會分配到資源以保證公平。在資源有限的情況下,每個job理想勤快下獲取的計算資源與實際獲取的計算資源存在一種差值,這個差距就叫做缺額。在同一個佇列中,job的資源缺額越大,越先獲得資源越優先執行。作業是按照缺額的高低來先後執行的。

 

四、任務的推測執行

1.作業完成時間取決於最慢的任務完成時間

        一個作業由若干個Map任務和Reduce任務構成。因硬體老化、軟體bug等,某些任務可能執行的非常慢。

2.推測執行機制

        發現拖後腿的任務,比如某個任務執行速度遠慢於任務平均速度。為拖後腿任務啟動一個備份任務,同時執行。誰先執行完,則採用誰的結果。

3.執行推測任務的條件

  1. 每個Task只能有一個備份任務

  2. 當前job已完成的Task必須不小於5%

  3. 開啟推測執行引數設定。

<property>
    <name>mapreduce.map.sprculative</name>
    <value>true</value>
</property>
<property>
    <name>mapreduce.reduce.speculative</name>
    <value>true</value>
</property>

4.不能啟用推測執行機制的情況

  1. 任務存在嚴重的資料傾斜

  2. 特殊任務,比如任務向資料庫中寫入資料

5.演算法原理

  1. MR總是選擇(estimateEndTime-estimateEndTime`)差值最大的任務,並且為之啟動備份任務

  2. 為了防止大量任務同時啟動備份任務造成的資源浪費,MR為每個作業設定了同時啟動的備份任務數量上限。

  3. 推測執行機制實際上採用了經典的優化演算法:以空間換時間,它同時啟動多個相同任務處理相同資料,並讓這些任務競爭以縮短資料處理時間。這種方法需要佔用跟多的計算資源。在叢集資源緊張的情況下,應合理使用該機制,爭取在多用少量資源的情況下,減少作業的計算時間。