Hadoop-0.20.2公平調度器算法解析

1. 目的

本文描述了hadoop中的公平調度的實現算法,公平調度器是由facebook貢獻的,適合於多用戶共享集羣的環境的調度器,其吞吐率高於FIFO,論文參見參考資料[1]。本文分析的Hadoop版本是0.20.2,在新版本(0.21.0)中,公平調度算法已經有了改進與增強。本文組織結構如下:1)目的    2)公平調度介紹  3)公平調度算法分析 4)新版hadoop中公平調度器的新特性 5)參考資料。

如果你想了解新版本Hadoop的Fair Scheduler算法,可閱讀這篇文章:Hadoop-0.21.0公平調度器算法分析

(注:本文介紹的Fair scheduler不夠系統化,如果想了解更系統化的Fair scheduler調度器,可閱讀我的最新書籍《Hadoop技術內幕:深入解析MapReduce架構設計與實現原理購買說明)第10章 “Hadoop多用戶作業調度器分析”以及第10.5節 “Fair Scheduler實現”。)

2. 公平調度介紹

公平調度器按資源池(pool)來組織作業,並把資源公平的分到這些資源池裏。默認情況下,每一個用戶擁有一個獨立的資源池,以使每個用戶都能獲得一份等同的集羣資源而不管他們提交了多少作業。按用戶的 Unix 羣組或作業配置(jobconf)屬性來設置作業的資源池也是可以的。在每一個資源池內,會使用公平共享(fair sharing)的方法在運行作業之間共享容量(capacity)。用戶也可以給予資源池相應的權重,以不按比例的方式共享集羣。

除了提供公平共享方法外,公平調度器允許賦給資源池保證(guaranteed)最小共享資源,這個用在確保特定用戶、羣組或生產應用程序總能獲取到足夠的資源時是很有用的。當一個資源池包含作業時,它至少能獲取到它的最小共享資源,但是當資源池不完全需要它所擁有的保證共享資源時,額外的部分會在其它資源池間進行切分。

主要特點如下:

Ø  支持多用戶多隊列

Ø  資源公平共享(公平共享量由優先級決定)

Ø  保證最小共享量

Ø  支持時間片搶佔

Ø  限製作業併發量,以防止中間數據塞滿磁盤

3. 公平調度算法分析

3.1  變量定義

Ø  描述job信息的變量(JobInfo)

jobWeight:作業的權重。實際計算時,map階段和reduce階段分開,分別記爲mapWeight,reduceWeight

jobDeficit:作業的缺額,即作業在理想調度器上所應得的計算時間與實際所獲得的計算時間的缺額,這個是測量作業的“不公平”待遇的度量標準。實際運算時將map階段和reduce階段分開,分別記爲mapDeficit和reduceDeficit。

runningTasks:作業正在運行的task數。實際計算時,map task和reduce task需分開,分別記爲:runningMaps和runningReduces

minSlots:作業在相應的pool中的最小slot保證量,實際計算時,map階段和reduce階段分開,分別記爲:minMaps和minReduces

jobFairShare:上次更新給該job分配的公平共享量,實際計算時,map階段和reduce階段分開,分別記爲mapFairShare和reduceFairShare

Ø  計算過程的中間變量

poolWeight:pool的權重,這個可由用戶自己設定,默認爲1。

tasksNum:某個作業正在運行任務與尚未運行的任務(包括Speculative 任務)數量和,有兩種task類型:map task和reduce task,計算時需要分開

priorityFactor:與作業優先級相關的因子,用於計算作業的權重,具體如下:

priority priorityFactor
VERY_HIGH 4.0
HIGH 2.0
NORMAL 1.0
LOW 0.5
Default 0.25

poolRunningJobsWeightSum:pool中已經開始運行的所有作業的權重之和

poolLowJobsWeightSum:在某個pool中,已經開始運行的,但尚需slot(tasksNum數量大於其最小共享量)的那些作業權重之和

systemJobsWeightSum:系統(可能有很多pool)中可以運行的所有作業的權重之和

timeDelta:兩次信息更新的時間間隔

3.2 相關算法

當出現一個空閒slot時,公平調度器會將此slot分配給缺額最大的作業。系統每隔500毫秒(UPDATE_INTERVAL)更新一次信息(有一個專門的更新線程對job信息進行更新),包括:作業缺額(作業的其他屬性,如權重、最小共享量、公平共享量等,均是爲計算缺額服務的)、權重、最小共享量、公平共享量等。

1) 作業權重計算方法

(1)默認情況下,權重是基於作業優先權的,但也可以基於作業的大小和年齡。權重的計算方法如下:

(2)根據優先權計算權重:

(3)根據用戶自定義的weightAdjuster類調整權重

2) 更新權重

每個已經運行的作業權重更新公式:

3) 初始缺額計算

每個作業的初始缺額mapDeficitreduceDeficit設置爲0。

4) 更新作業的最小共享量

在每個pool中,將其擁有的slot按作業的權重分配給各個作業(由步驟(1)完成),分完之後將剩餘的slot按作業的權重和缺額分配給仍需slot的作業(由步驟(2)和(3)完成),如果還有slot剩餘,則將這些slot共享給其他pool。

初始化:

當前所有作業的最小共享量置零

pool的minMaps數或者minReduces數(由用戶在配置文件中設定)

重複以下幾步,直到slotsLeft=0:

(1)計算每個job的最小共享量:jobinfo.minMaps或jobinfo.minReduces

首先計算該作業可獲得的共享值:

根據當前pool的剩餘slot數,調整該共享值:

其中runnableNum表示作業尚需的slot數與正在運行的slot數之和,curMin表示作業的當前最小共享量(jobinfo.minMaps或jobinfo.minReduces),初始值爲0。

slotsToGive作爲最小共享量賦予相應的job。

修改值爲值減去slotsToGive

如果此輪循環中,slotsLeft值未變,即沒有slot分給任何作業,則將剩餘的slot共享給pool中所有job,即,執行(2)(3)並結束算法:

(2)將pool中的job按weight和deficit排序

(3)按順序依次計算每個job的最小共享量。

首先計算該作業可獲得的共享值:

根據當前pool的剩餘slot數,調整該共享值:

slotsToGive作爲最小共享量賦予相應的job。

修改slotsLeft值爲slotsLeft值減去slotsToGive

需要注意的是,當執行完(2)(3)後,slotsLeft可能仍大於0,這時候會將剩餘的slotsLeft個slot共享給其他pool。

5) 更新公平共享量

主要思想:基於作業權重和最小共享量計算公平共享量。首先,根據權重分配可用slot數,如果作業的最小共享量大於公平共享量,先要滿足最小共享量,更新可用slot數,重複以上步驟,直到所有作業的最小共享量小於或等於公平共享量,這樣,每個作業的最小共享量都得到了滿足,最後,所有作業平分剩下的slot數。

算法實現:

初始化:當前所有作業的公平共享量置零;slotsLeft={系統中map slot 或者reduce slot 總數};jobsLeft={系統中正在運行的作業}

(1)遍歷集合jobsLeft中的所有作業,計算每個作業的jobFairShare

如果作業的最小共享量(minSlots)大於公平共享量(jobFairShare),則:將最小共享量作爲公平共享量賦值給作業。

同時將此作業從集合jobsLeft中刪除。

(2)將剩下的slot按權重比例給集合jobsLeft中剩餘的作業:

jobFairShare作爲公平共享量賦值給作業。

6) 更新缺額

實際計算時,會分開:

7) 資源分配

當系統中產生一個空閒slot時,將此slot分配給缺額最大的作業。

4、新版hadoop中公平調度器的新特性

(1)增加搶佔功能:若某個作業在一定時間間隔內獲取的資源(sl0t)總小於minShare/2或者fairShare/2,則從多拿資源的作業那搶佔(kill task)。

(2)系統中有多個pool時,每個pool可以配置自己的調度方式:FIFO或者fair schduler(以前強制所有pool的調度方式都一樣,是要麼是FIFO,要麼是Fair scheduler)。

(3)支持delay scheduling(見參考文獻[5])。當空閒slot沒有locality的task可匹配時,調度器會選擇延遲一段時間直到選中一個locality的task或者超時,如果超時(該時間內仍沒有locality的task),則分配給非locality的task。

5、參考資料

(1)Fair scheduler論文:M. Zaharia, D. Borthakur, J. S. Sarma, K. Elmeleegy, S. Shenker, and I. Stoica, “Job scheduling for multi-user mapreduce clusters,” EECS Department, University of California, Berkeley, Tech. Rep., Apr 2009. 【下載】

(2)Hadoop主頁:http://hadoop.apache.org/

(3)Hadoop公平調度指南:http://hadoop.apache.org/common/docs/r0.20.2/fair_scheduler.html

(4)0.21.0版本中fair scheduler設計文檔:【下載】

(5)Delay Scheduling: A Simple Technique for AchievingLocality and Fairness in Cluster Scheduling. Matei Zaharia. University of California, Berkeley,【下載】

原創文章,轉載請註明: 轉載自董的博客

本文鏈接地址: http://dongxicheng.org/mapreduce/hadoop-fair-scheduler/

作者:Dong,作者介紹:http://dongxicheng.org/about/

本博客的文章集合:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章