Superior Scheduler:帶你了解FusionInsight MRS的超級調度器
摘要:Superior Scheduler是一個專門為Hadoop YARN分散式資源管理系統設計的調度引擎,是針對企業客戶融合資源池,多租戶的業務訴求而設計的高性能企業級調度器。
本文分享自華為雲社區《FusionInsight MRS的自研超級調度器Superior Scheduler原理簡介》,作者:一枚核桃。
Superior Scheduler是一個專門為Hadoop YARN分散式資源管理系統設計的調度引擎,是針對企業客戶融合資源池,多租戶的業務訴求而設計的高性能企業級調度器。
Superior Scheduler可實現開源調度器、Fair Scheduler以及Capacity Scheduler的所有功能。另外,相較於開源調度器,Superior Scheduler在企業級多租戶調度策略、租戶內多用戶資源隔離和共享、調度性能、系統資源利用率和支援大集群擴展性方面都做了針對性的增強。設計的目標是讓Superior Scheduler直接替代開源調度器。
類似於開源Fair Scheduler和Capacity Scheduler,Superior Scheduler通過YARN調度器插件介面與YARN Resource Manager組件進行交互,以提供資源調度功能。下圖為其整體系統架構:
Superior Scheduler的主要模組如下:
- Superior Scheduler Engine:具有豐富調度策略的高性能調度器引擎。
- Superior YARN Scheduler Plugin:YARN Resource Manager和Superior Scheduler Engine之間的橋樑,負責同YARN Resource Manager交互。
在調度原理上,開源的調度器都是基於計算節點心跳驅動的資源反向匹配作業的調度機制。具體來講,每個計算節點定期發送心跳到YARN的Resource Manager通知該節點狀態並同時啟動調度器為這個節點分配作業。這種調度機制把調度的周期同心跳結合在一起,當集群規模增大時,會遇到系統擴展性以及調度性能瓶頸。另外,因為採用了資源反向匹配作業的調度機制,開源調度器在調度精度上也有局限性,例如數據親和性偏於隨機,另外系統也無法支援基於負載的調度策略等。主要原因是調度器在選擇作業時,缺乏全局的資源視圖,很難做到最優選擇。
Superior Scheduler內部採用了不同的調度機制。Superior Scheduler的調度器引入了專門的調度執行緒,把調度同心跳剝離開,避免了系統心跳風暴問題。另外,Superior Scheduler調度流程採用了從作業到資源的正向匹配方法,這樣每個調度的作業都有全局的資源視圖,可以很大的提到調度的精度。相比開源調度器,Superior Scheduler在系統吞吐量、利用率、數據親和性等方面都有很大提升。
Superior Scheduler性能對比
Superior Scheduler除了提高系統吞吐量和利用率,還提供了以下主要調度功能:
- 多資源池
多資源池有助於在邏輯上劃分集群資源並在多個租戶/隊列之間共享它們。資源池的劃分可以基於異構的資源或完全按照應用資源隔離的訴求來劃分。對於一個資源池,不同隊列可配置進一步的策略。
- 每個資源池多租戶調度(reserve、min、share、max)
Superior Scheduler提供了靈活的層級多租戶調度策略。並允許針對不同的資源池可以訪問的租戶/隊列,配置不同策略,如下所示。
租戶資源分配策略示意圖如圖所示:
同開源的調度器相比,Superior Scheduler同時提供了租戶級百分比和絕對值的混配策略,可以很好的適應各種靈活的企業級租戶資源調度訴求。例如,用戶可以在一級租戶提供最大絕對值的資源保障,這樣租戶的資源不會因為集群的規模改變而受影響。但在下層的子租戶之間,可以提供百分比的分配策略,這樣可以儘可能提升一級租戶內的資源利用率。
- 異構和多維資源調度
Superior Scheduler支援CPU和記憶體資源的調度外,還支援擴展支援以下功能:
- 節點標籤可用於識別像GPU_ENABLED,SSD_ENBALED等節點的多維屬性,可以根據這些標籤進行調度。
- 資源池可用於對同一類別的資源進行分組並分配給特定的租戶/隊列。
- 租戶內多用戶公平調度
在葉子租戶里,多個用戶可以使用相同的隊列來提交作業。相比開源調度器,Superior Scheduler可以支援在同一租戶內靈活配置不同用戶的資源共享策略。例如可以為VIP用戶配置更多的資源訪問權重。
- 數據位置感知調度
Superior Scheduler採用「從作業到節點的調度策略」,即嘗試在可用節點之間調度給定的作業,使得所選節點適合於給定作業。通過這樣做,調度器將具有集群和數據的整體視圖。如果有機會使任務更接近數據,則保證了本地化。而開源調度器採用「從節點到作業的調度策略」,在給定節點中嘗試匹配適當的作業。
- Container調度時動態資源預留
在異構和多樣化的計算環境中,一些container需要更多的資源或多種資源,例如Spark作業可能需要更大的記憶體。當這些container與其他需要較小資源的container競爭時,可能沒有機會在合理的時間內獲得所需的資源而處於飢餓狀態。由於開源的調度器是基於資源反向匹配作業的調度方式,會為這些作業盲目的進行資源預留以防進入飢餓狀態。這就導致了系統資源的整體浪費。Superior Scheduler與開源特性的不同之處在於:
- 基於需求的匹配:由於Superior Scheduler採用「從作業到節點的調度」,能夠選擇合適的節點來預留資源提升這些特殊container的啟動時間,並避免浪費。
- 租戶重新平衡:啟用預留邏輯時,開源調度器並不遵循配置的共享策略。Superior Scheduler採取不同的方法。在每個調度周期中,Superior Scheduler將遍歷租戶,並嘗試基於多租戶策略重新達到平衡,且嘗試滿足所有策略(reserve,min,share等),以便可以釋放預留的資源,將可用資源流向不同租戶下的其他本應得到資源的container。
- 動態隊列狀態控制(Open/Closed/Active/Inactive)
支援多個隊列狀態,有助於管理員操作和維護多個租戶。
- Open狀態(Open/Closed):如果是Open(默認)狀態,將接受提交到此隊列的應用程式,如果是Closed狀態,則不接受任何應用程式。
- Active狀態(Active/Inactive):如果處於Active(默認)狀態,租戶內的應用程式是可以被調度和分配資源。如果處於Inactive狀態則不會進行調度。
- 應用等待原因
如果應用程式尚未啟動,則提供作業等待原因資訊。
Superior Scheduler和YARN開源調度器對比分析如下: