hadoop調度器概念及區別

@Author  : Spinach | GHB
@Link    : http://blog.csdn.net/bocai8058

概述

Hadoop中常見的調度器有三種,分別爲:
FIFO調度器、公平調度器Fair Scheduler、容量調度器Capacity Scheduler(計算能力調度器)

它的作用是將系統中空閒的資源按一定策略分配給作業。在Hadoop中,調度器是一個可插拔的模塊,用戶可以根據自己的實際應用要求設計調度器。

基本作用和調度器考慮因素

  • Hadoop調度器的基本作用就是根據節點資源(slot)使用情況和作業的要求,將任務調度到各個節點上執行。
  • 考慮因素:
  1. 作業優先級。作業的優先級越高,它能夠獲取的資源(slot數目)也越多。Hadoop 提供了5種作業優先級,分別爲 VERY_HIGH、HIGH、NORMAL、 LOW、VERY_LOW,通過mapreduce.job.priority屬性來設置。
  2. 作業提交時間。顧名思義,作業提交的時間越早,就越先執行。
  3. 作業所在隊列的資源限制。調度器可以分爲多個隊列,不同的產品線放到不同的隊列裏運行。不同的隊列可以設置一個邊緣限制,這樣不同的隊列有自己獨立的資源,不會出現搶佔和濫用資源的情況。

默認FIFO調度器

FIFO是Hadoop中默認的調度器,也是一種批處理調度器。它先按照作業的優先級高低,再按照到達時間的先後選擇被執行的作業。原理圖如下所示。

比如,一個 TaskTracker 正好有一個空閒的 slot,此時 FIFO 調度器的隊列已經排好序,就選擇排在最前面的任務 job1,job1 包含很多 map task和reduce task。假如空閒資源是 map slot,我們就選擇 job1 中的 map task。假如 map task0 要處理的數據正好存儲在該 TaskTracker 節點上,根據數據的本地性,調度器把 map task0 分配給該TaskTracker。FIFO 調度器整體就是這樣一個過程。

容量調度器Capacity Scheduler(計算能力調度器)

支持多個隊列,每個隊列可配置一定的資源量,每個隊列採用FIFO調度策略,爲了防止同一個用戶的作業獨佔隊列中的資源,該調度器會對同一用戶提交的作業所佔資源量進行限定。調度時,首先按以下策略選擇一個合適隊列:計算每個隊列中正在運行的任務數與其應該分得的計算資源之間的比值,選擇一個該比值最小的隊列;然後按以下策略選擇該隊列中一個作業:按照作業優先級和提交時間順序選擇,同時考慮用戶資源量限制和內存限制。

比如我們分爲三個隊列:queueA、queueB和queueC,每個隊列的 job 按照到達時間排序。假如這裏有 100 個slot,queueA 分配 20% 的資源,可配置最多運行 15 個task,queueB 分配 50% 的資源,可配置最多運行 25 個task,queueC 分配 30% 的資源,可配置最多運行 25 個task。這三個隊列同時按照任務的先後順序依次執行,比如,job11、job21和job31分別排在隊列最前面,是最先運行,也是同時運行。

公平調度器Fair Scheduler

同計算能力調度器類似,支持多隊列多用戶,每個隊列中的資源量可以配置,同一隊列中的作業公平共享隊列中所有資源。

比如有三個隊列:queueA、queueB和queueC,每個隊列中的 job 按照優先級分配資源,優先級越高分配的資源越多,但是每個 job 都會分配到資源以確保公平。在資源有限的情況下,每個 job 理想情況下獲得的計算資源與實際獲得的計算資源存在一種差距, 這個差距就叫做缺額。在同一個隊列中,job的資源缺額越大,越先獲得資源優先執行。作業是按照缺額的高低來先後執行的,而且可以看到上圖有多個作業同時運行

公平調度器vs容量調度器

  1. 公平調度是以pool爲單位分配任務slots的,容量調度以queue的方式分配tasktracker的,當都只有一個job的時候,兩種調度器都可以利用整個集羣的資源;
  2. 在每個pool內部可以是以FIFO方式調度也可以是公平方式調度,但是在queue內部只能是以FIFO方式調度,這是公平調度和容量調度的一個區別;
  3. 雖然在queue內部可以設置優先級但是並不支持搶佔,在pool內部是支持搶佔的,就是可以爲某個pool(通常是生產上的用戶)分配最低的任務slot,當這個pool得不到最低的資源的時候他就會kill其他的job的task以使自己獲得最低的資源,這並不會引起其他的job的失敗,因爲job也是master-slaver的結構,也是容錯的。

整體總結:

  1. 公平調度:以pool爲單位分配任務;每個內部採用FIFO調度;queue可以設置優先級但不支持搶佔;
  2. 容量調度:以queue爲單位分配任務;每個內部可以採用FIFO調度也可以採用公平方式調度;pool內部支持搶佔;

引用:https://www.cnblogs.com/codeOfLife/p/5418460.html


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