YARN中用的作業調度算法:DRF(Dominant Resource Fairness)


     在Mesos和YARN中,都用到了dominant resource fairness算法(DRF),它不同於hadoop基於slot-based實現的fair scheduler和capacity scheduler,論文閱讀:Dominant Resource Fairness: Fair Allocation of Multiple Resource Types
考慮在一個包括多種資源類型(主要考慮CPU和MEM)的系統的公平資源分配問題,其中不同用戶對資源有不同的需求。為了解決這個問題,伯克利的幾位大牛提出了Dominant Resource Fairness(DRF),一種針對不同資源類型的max-min fairness。並且在Mesos的設計和實現中評估了DRF,顯示了它可以比slot-based 公平調度算法得到更好的吞吐量。

    DRF是一種通用的多資源的max-min fairness分配策略。DRF背后的直觀想法是在多環境下一個用戶的資源分配應該由用戶的dominant share(主導份額的資源)決定,dominant share是在所有已經分配給用戶的多種資源中,占據最大份額的一種資源。簡而言之,DRF試圖最大化所有用戶中最小的dominant share。
舉個例子,假如用戶A運行CPU密集的任務而用戶B運行內存密集的任務,DRF會試圖均衡用戶A的CPU資源份額和用戶B的內存資源份額。在單個資源的情形下,那么DRF就會退化為max-min fairness。
DRF有四種主要特性,分別是:sharing incentive、strategy-proofness、Pareto efficiency和envy-freeness。
DRF是通過確保系統的資源在用戶之間是靜態和均衡地進行分配來提供sharing incentive,用戶不能獲得比其他用戶更多的資源。此外,DRF是strategy-proof,用戶不能通過謊報其資源需求來獲得更多的資源。DRF是Pareto-efficient,在滿足其他特性的同時,分配所有可以利用的資源,不用取代現有的資源分配。最后,DRF是envy-free,用戶不會更喜歡其他用戶的資源分配。

    考慮一個有9個cpu和18GB的系統,有兩個用戶:用戶A的每個任務都請求(1CPU,4GB)資源;用戶B的每個任務都請求(3CPU,1GB)資源。如何為這種情況構建一個公平分配策略?

    對於用戶A,每個任務需要消耗的資源為<1/9,4/18>=<1/9,2/9>,所以A的dominant shares為內存,比例為2/9

    對於用戶B,每個任務需要消耗的資源為<3/9,1/18>=<1/3,1/18>,所以B的dominant shares為cpu,比例為1/3

YARN中用的作業調度算法:DRF(Dominant <wbr>Resource <wbr>Fairness)

通過列不等式方程可以解得給用戶A分配3份資源,用戶B分配2份資源是一個很好的選擇。

DRF的算法偽代碼為:

YARN中用的作業調度算法:DRF(Dominant <wbr>Resource <wbr>Fairness)

使用DRF的思路,分配的過程如下表所示,注意,每一次選擇為哪個資源分配的決定,取決於上次分配之后,目前dominant share最小的那個用戶可以得到下一次的資源分配。

YARN中用的作業調度算法:DRF(Dominant <wbr>Resource <wbr>Fairness)

YARN中用的作業調度算法:DRF(Dominant <wbr>Resource <wbr>Fairness)

每次迭代都要選擇一個用戶為其分配資源,用戶的選擇辦法:選擇當前Si最小的用戶。

Si:已經分配給用戶i的主資源占這種資源總量的比例

    在這個例子中,用戶A的CPU占總CPU 1/9,MEM占總MEM的 2/9,而用戶B的CPU占1/3,MEM占2/9,所以A的主資源為內存,B的主資源為CPU。基於這點,DRF會最大化A的內存的最小化分配,並會最大化B的CPU的最小分配。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM