目錄
介紹
FIFO Scheduler
Capacity Scheduler
Fair Scheduler
總結
-
介紹
理想情況下,我們應用對Yarn資源的請求應該立刻得到滿足,但現實情況資源往往是有限的,特别是在一個很繁忙的叢集,一個應用資源的請求經常需要等待一段時間才能的到相應的資源。在Yarn中,負責給應用配置設定資源的就是Scheduler。其實排程本身就是一個難題,很難找到一個完美的政策可以解決所有的應用場景。為此,Yarn提供了多種排程器和可配置的政策供我們選擇。
在Yarn中有三種排程器可以選擇:FIFO Scheduler ,Capacity Scheduler,Fair Scheduler。
-
FIFO Scheduler
FIFO Scheduler把應用按送出的順序排成一個隊列,這是一個先進先出隊列,在進行資源配置設定的時候,先給隊列中最頭上的應用進行配置設定資源,待最頭上的應用需求滿足後再給下一個配置設定,以此類推
-
Capacity Scheduler
Capacity 排程器允許多個組織共享整個叢集,每個組織可以獲得叢集的一部分計算能力。通過為每個組織配置設定專門的隊列,然後再為每個隊列配置設定一定的叢集資源,這樣整個叢集就可以通過設定多個隊列的方式給多個組織提供服務了。除此之外,隊列内部又可以垂直劃分,這樣一個組織内部的多個成員就可以共享這個隊列資源了,在一個隊列内部,資源的排程是采用的是先進先出(FIFO)政策。
容量排程器 Capacity Scheduler 最初是由 Yahoo 最初開發設計使得 Hadoop 應用能夠被多使用者使用,且最大化整個叢集資源的吞吐量,現被 IBM BigInsights 和 Hortonworks HDP 所采用。
Capacity Scheduler 被設計為允許應用程式在一個可預見的和簡單的方式共享叢集資源,即"作業隊列"。Capacity Scheduler 是根據租戶的需要和要求把現有的資源配置設定給運作的應用程式。Capacity Scheduler 同時允許應用程式通路還沒有被使用的資源,以確定隊列之間共享其它隊列被允許的使用資源。管理者可以控制每個隊列的容量,Capacity Scheduler 負責把作業送出到隊列中。
-
Fair Scheduler
在Fair排程器中,我們不需要預先占用一定的系統資源,Fair排程器會為所有運作的job動态的調整系統資源。如下圖所示,當第一個大job送出時,隻有這一個job在運作,此時它獲得了所有叢集資源;當第二個小任務送出後,Fair排程器會配置設定一半資源給這個小任務,讓這兩個任務公平的共享叢集資源。
需要注意的是,在下圖Fair排程器中,從第二個任務送出到獲得資源會有一定的延遲,因為它需要等待第一個任務釋放占用的Container。小任務執行完成之後也會釋放自己占用的資源,大任務又獲得了全部的系統資源。最終效果就是Fair排程器即得到了高的資源使用率又能保證小任務及時完成
公平排程器 Fair Scheduler 最初是由 Facebook 開發設計使得 Hadoop 應用能夠被多使用者公平地共享整個叢集資源,現被 Cloudera CDH 所采用。
Fair Scheduler 不需要保留叢集的資源,因為它會動态在所有正在運作的作業之間平衡資源。
-
總結
FIFO Scheduler : 先進先出(先來後到的順序)
Capacity Scheduler:容量排程
Fair Scheduler:公平排程
先進先出:優先送出的,優先執行,後面送出的等待。(火車過隧道)。
容量排程:允許看建立多個任務對列,多個任務對列可以同時執行。但是一個隊列内部還是先進先出。CDH預設的排程器。
公平排程:第一個程式在啟動時可以占用其他對列的資源(100%占用),當其他對列有任務送出時,占用資源的對列需要将資源還給該任務。還資源的時候,效率比較慢。