【技術乾貨】華為雲FusionInsight MRS的自研超級排程器Superior Scheduler

華為雲官方部落格發表於2022-03-29

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提供了靈活的層級多租戶排程策略。並允許針對不同的資源池可以訪問的租戶/佇列,配置不同策略,如下所示。

策略名稱 描述
reserve 預留租戶資源。即使租戶沒有作業,其他租戶也不能使用該預留的資源。其值可以是百分比或絕對值。如果兩者都配置,排程系統動態計算轉換為資源絕對值,並取兩者的最大值。預設的reserve值為0。相對於定義一個專用資源池並指定具體機器的方式,reserve的策略可以認為提供了一種靈活的浮動預留功能,由於並不限定具體的機器,可以提高計算的資料親和性,也不會受具體機器故障的影響。
min 具有搶佔支援的最低保證資源。其他租戶可以使用這部分資源,但是本租戶享有優先使用權。其值可以是百分比或絕對值。如果兩者都配置,排程系統動態計算轉換為資源絕對值,並取兩者的最大值。預設值是0。
share 不支援搶佔的共享資源。本租戶要使用這部分資源時,需要等待其他租戶完成作業並釋放資源。其值是百分比或絕對值。
max 允許的最大資源數量。租戶無法獲得比允許的最大資源多的資源。其值是百分比或絕對值。如果兩者都配置,排程系統動態計算轉換為資源絕對值,並取兩者最大值。預設值不受限制。

租戶資源分配策略示意圖如圖所示:

同開源的排程器相比,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開源排程器對比分析如下:

領域 YARN開源排程器 Superior Scheduler
多租戶排程 在同構叢集上,只能選擇容量排程器(Capacity Scheduler)或公平排程器(Fair Scheduler)兩者之一,且叢集當前不支援公平排程器(Fair Scheduler)。容量排程器只支援百分比方式配置,而公平排程器只支援絕對值方式 支援異構叢集和多資源池;支援預留,以保證直接訪問資源
資料位置感知排程 從節點到作業的排程策略導致降低資料本地話命中率,潛在影響應用的執行效能 從作業到節點的排程策略。可具有更精確的資料位置感知,資料本地化排程的作業命中率比較高
基於機器負載的均衡排程 不支援 Superior Scheduler在排程時考慮機器的負載和資源分配情況,做到均衡排程
租戶內多使用者公平排程 不支援 租戶內使用者的公平排程,支援關鍵字default、others
作業等待原因 不支援 作業等待原因資訊可顯示為什麼作業需等待

相關文章