Superior Scheduler學習心得 原創


1、組件介紹:

1-整體系統架構和組件的位置

YarnSuperir scheduler是爲了和Hadoop DRM系統一起工作而專門設計的,類似於Yarn現有的開源Fair schedulerCapacity scheduler,Superior Scheduler遵循着Yarn Scheduler的插件接口,與Yarn RM組件一起提供資源調度功能,它有兩個主要的組件:

1Superior Yarn Scheduler Engine

通用的調度引擎,旨在支持更廣泛的場景,包括大數據、雲計算和集裝箱編配等。這個組件提供通用的資源建模、分配請求建模。它還提供了大量的內置先進的調度策略,包括多租戶在多個資源池、基於用戶共享,多個維度調度,預定,數據意識和技術意識調度,和affinity/anti-affinity調度等。Superior Scheduling Enginehadoop的一個獨立的模塊。它可以通過集成插入不同的DRM系統。

2Superior Yarn Scheduler Plugin

Yarn RMsuperior scheduling engine模塊之間的一座橋樑。它實現了完整的YARN scheduling pluginYARN RM的接口。它還使用Superior Scheduling Engine接口事件和數據傳遞給Superior並拿回分配決策。Superior YARN scheduling plugin利用現有的YARN Web 服務接口和來自client端的請求響應。Superior的一些特定特性只能通過RESTful接口暴漏出來。比如,隊列控制(打開/關閉/活動/激活),或查詢等待分配請求的詳細信息,包括等待容器總數和原因等。

 

 2HPSE的內部結構:

2-High-Performance Scheduler EngineHPSE

 

3-PluginEngine的內部結構

Yarn Plugin

(1)Yarn Plugin Interface:全面實施的入口接口,消息都是從這個接口進入Superior scheduler的。

(2)Superior Web Service:爲用戶提供RESTful,用於爲用戶提供特定特性的接口。

(3)Local Data Store:本地數據存儲,用於保持Yarn RM的一些查詢具體數據結構的問題,如AM嘗試的申請行爲和節點的拉起。

(4)Engine call back:調度引擎的例行回覆,勇於接受來自調度引擎分配和搶佔的調度結果

Superior scheduler Engine:

(1)Engine interfaceSuperior Scheduler Engine的接口,用於接收來自Plugin的信息。

(2)RM:維護資源池、資源、跟蹤總容量和可利用的資源。

(3)Queue Manager:管理隊列層次結構和維護所有分配對象的引用。

(4)Queue Policy Manager:管理策略樹的不同實例。

(5)Allocation Manager:管理全部分配、資源請求的要求,指定分配的策略等等。

(6)User Manager:在隊列中管理與用戶相關的策略。

(7)Scheduler Thread:繼續監聽隊列要求,保障隊列的請求得到響應。

 

3Superior SchedulerOther Scheduler工作時的區別:

Open-source Scheduler基於節點匹配算法(節點心跳更新觸發調度找到最高優先級容器請求),由於調度程序沒有可用資源的全局視圖,因此很難對調度器進行優化,例如無論是否繁忙,開源調度器都需要通過延遲調度來進行數據的局部性集羣調度,需要保留資源時也十分困難,因爲可能有其他節點有足夠的資源爲高優先級容器服務時,調度器不知道,尋找節點時的調度方法爲“最先滿足”。

       Superior Scheduler使用一個資源請求調度中心(調度器和調度線程),檢視所有的任務請求和資源情況後,優先處理高優先級的請求,根據請求的屬性找到匹配的資源,大大提高了調度的效率,擁有單獨的線程處理調度事件,減少心跳頻率,降低心跳風暴發生的可能,基於集合的算法快讀到達最好位置。尋找節點的方法是尋找所有的節點和考慮“最合適的”。

 

4-資源分配的方法比較

通過圖4可以看到,開源調度器工作時,  RM通過心跳獲取資源信息,掃描等待工作的隊列後,優先匹配最先滿足資源條件的工作,這會導致資源的浪費。(個人理解:如工作需要2G內存,該節點資源有8G內存,但是判斷時發現2G的任務可以在節點內跑,故直接分配。)

 

Superior調度器工作時,RM通過心跳將所有調度器節點狀態存放在映射中,然後專用調度線程檢查所有等待工作的隊列,根據各個工作需要的資源量去映射中尋找最匹配的資源節點,將其分配過去,非常節約資源和時間。

 

4Scheduler Thread 專用調度線程:

開源的Yarn調度器默認情況下使用基於心跳的調度,基本上YarnNodeManager會週期性的發送心跳信息到YarnResourceManager,他們生成NODE_UPDATA事件到Yarn的調度器,這些事件主要包括調度程序需要處理容器的完成任務狀態,處理完畢後,開源的調度器開始協調調度在同一個線程裏的節點,由於這裏只有一個線程來操作所有節點的更新和應用程序的提交事件,當線程花費時間在調度程序上時,它無法同時處理過程節點更新事件,這使得這些事件在大型的集羣環境下堆積起來,爲了解決這些堆積的問題,有一個典型的解決辦法是減緩心跳發送的間隔時間和控制心跳的請求量。這種設計可能會犧牲集羣的利用率存在潛在的缺點。由於Container完成事件的同時無法通知Yarn調度器,可以人爲的延遲調度的過程以分配新的Container去使用資源。

1、從節點更新事件處理分離出調度程序,使事件處理執行的更快。專用的調度線程去處理週期性的調度
2
、設計細粒度鎖定和複製“熱點”數據區域去提高所有數據更新和調度程序的並行度
3
、高性能的調度程序算法在去減少極端條件下的搜索空間

 

以上是自己對Superior Scheduler的一點點學習心得,如有錯誤歡迎大家指正,謝謝

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