這篇文章繼續討論分散式架構中的調度演算法,為瞭解決單體調度面臨的問題,我們引入兩層調度。我們會討論兩層調度的工作原理,兩種使用了兩層調度的解決方案:Apache Mesos和Hadoop YARN。 ...
調度框架:兩層調度
為什麼會有兩層調度?
單體調度的核心是所有節點的資源以及用戶的任務均由中央伺服器統一管理和調度,這樣中央伺服器容易成為單點瓶頸。
為了提升調度效率並支持多種類型的任務,我們可以嘗試把資源和任務分開調度,也就是說一層調度器負責資源管理和分配,另一層調度器負責任務與資源的匹配。
兩層調度結構對應的是兩層調度器,資源的使用情況同時由中央調度器和第二層調度器管理,中央調度器從整體上進行資源的管理和分配,將資源分配到第二層調度器,再由第二層調度器負責將資源與具體的任務匹配。
兩層調度的詳細結構圖如下。
兩層調度器中的第一層調度器仍是一個經過簡化的中央調度器,通常放在分散式集群管理系統中,而第二層調度則是由各個應用程式框架完成。兩層調度器的職責:
- 第一層調度器負責管理資源並向框架分配資源。
- 第二層調度器接收分散式集群管理系統中第一層調度器分配的資源,然後根據任務和接收到的資源進行分配。
常見的常用了兩層調度結構的集群管理系統有:
- Apache Mesos
- Hadoop YARN
Mesos中的兩層調度設計
Mesos本身實現的調度器是第一層調度,負責資源管理,第二層調度交給了應用框架來完成。
以Mesos為基礎的分散式資源管理與調度框架包括兩部分:
- 資源管理集群,由一個Master節點和多個Slave節點組成的集中式系統,它由一個Master節點,負責管理Slave節點,並對接上層框架,Slave節點向Master節點周期彙報資源狀態信息,並執行框架提交的任務。
- 框架,負責應用管理和調度的“組件“,它主要由調度器和執行器組成,調度器可以從Master節點獲取集群節點的信息,執行器在Slave節點上執行任務。
Mesos兩層調度的基本原理:
- 框架向Mesos Master註冊。
- Mesos Slave節點定期向Mesos Master上報本節點的空閑資源。
- Mesos Master的Scheduler進程收集所有節點的空閑資源信息,並以Resource Offer的方式將空閑的資源發送給註冊的框架。
- 框架的Scheduler接收到Mesos發送的資源後,進行任務調度和匹配,匹配成功後,將匹配結構下發給Mesos Master,並由Mesos Master轉發給相應節點的執行器執行任務。
Resource Offer機制是指Mesos Master主動將節點空閑資源以類似發放的方式發給每個框架,如果框架需要則使用,不需要則返回。
通過Resource Offer機制,第一層調度將資源主動告知第二層調度,然後第二層調度進行具體的任務分配,從而實現了任務調度與資源管理的分離,Mesos Master通過資源分配演算法決定給各個Framework提供多少資源,而Framework決定了接受哪些資源,以及哪些任務使用這些資源運行。
在調度中,常見的資源分配演算法包括:
- 最大最小公平演算法
- 主導資源公平演算法
最大最小公平演算法是一種在兼顧公平的前提上,儘可能讓更多滿意的資源分配演算法。這個演算法有3個主要原則:
- 按照用戶對資源資源需求量遞增的順序進行空閑資源分配。
- 不存在用戶得到的資源超過了自己需求的情況。
- 對於分配資源不滿足需求的用戶,所獲得的資源是相等的。
主導資源公平演算法在考慮絕對公平的前提下,還考慮了用戶對不同類型的需求,以可能得合理分配資源,即主導資源公平演算法可以儘可能的滿足更多用戶。
最大最小公平演算法適用於單一類型的資源分配場景,而主導資源公平演算法適用於多種類型的混合場景。並且最大最小演算法從公平的角度出發。為了每個用戶分配不多於與需求量的資源,而主導資源公平演算法從任務出發,目的在於充分儘量利用資源使得能夠執行的任務越多越好。
作者:李潘 出處:http://wing011203.cnblogs.com/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。