Hadoop作業排程器

2022-04-10 10:39:05 字數 2597 閱讀 1369

隨著 mapreduce 的流行,其開源實現 hadoop 也變得越來越受推崇。在 hadoop 系統中,有乙個元件非常重要,那就是排程器。排程器是乙個可插拔的模組,使用者可以根據自己的實際應用要求設計排程器

1、排程器基本作用

hadoop排程器的基本作用就是根據節點資源(slot)使用情況和作業的要求,將任務排程到各個節點上執行

2、排程器考慮的因素

1、作業優先順序。作業的優先順序越高,它能夠獲取的資源(slot數目)也越多。hadoop 提供了5種作業優先順序,分別為 very_high、high、normal、 low、very_low,通過mapreduce.job.priority屬性來設定。

2、作業提交時間。顧名思義,作業提交的時間越早,就越先執行。

3、作業所在佇列的資源限制。排程器可以分為多個佇列,不同的產品線放到不同的佇列裡執行。不同的佇列可以設定乙個邊緣限制,這樣不同的佇列有自己獨立的資源,不會出現搶占和濫用資源的情況

3、排程器原理

任務排程器的原理是怎麼樣的?我們來先看一下任務排程原理圖,如下所示

在上圖中,taskscheduler 是 jobtracker 的乙個元件、乙個成員,它們之間是函式與呼叫的關係。而 client、jobtracker和tasktracker之間是通過網路rpc來互動。下面我們就來分析排程器的大致原理。

1、client 通過submitjob()函式向jobtracker提交乙個作業。

2、jobtracker通知 taskscheduler,呼叫其內部函式initjob()對這個作業進行初始化,建立一些內部的資料結構。

3、tasktracker 通過心跳來向 jobtracker 匯報它的資源情況,比如有多少個空閒的map slot和reduce slot。

4、如果 jobtracker 發現第乙個 tasktracker 有空閒的資源 ,jobtracker 就會呼叫 taskscheduler 的 assigntasks() 函式,返回一些task list給第乙個tasktracker。 這時tasktracker就會執行排程器分配的任務

4、hadoop自帶排程器

目前,hadoop 作業排程器主要有三種:fifo、capacity scheduler和fair scheduler。下面我們分別介紹。

1、先進先出排程器(fifo)

fifo 是 hadoop 中預設的排程器,也是一種批處理排程器。它先按照作業的優先順序高低,再按照到達時間的先後選擇被執行的作業。原理圖如下所示。

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

2、 容量排程器(capacity scheduler)

支援多個佇列,每個佇列可配置一定的資源量,每個佇列採用fifo排程策略,為了防止同乙個使用者的作業獨佔佇列中的資源,該排程器會對同一使用者提交的作業所佔資源量進行限定。排程時,首先按以下策略選擇乙個合適佇列:計算每個佇列中正在執行的任務數與其應該分得的計算資源之間的比值,選擇乙個該比值最小的佇列;然後按以下策略選擇該佇列中乙個作業:按照作業優先順序和提交時間順序選擇,同時考慮使用者資源量限制和記憶體限制。 原理圖如下所示

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

3、公平排程器(fair scheduler)

同計算能力排程器類似,支援多佇列多使用者,每個佇列中的資源量可以配置,同一佇列中的作業公平共享佇列中所有資源。原理圖如下所示

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

】。

Hadoop作業排程演算法

hadoop集群中有三種作業排程演算法,分別為 fifo 公平排程演算法和計算能力排程演算法 fifo比較簡單,hadoop 中只有乙個作業佇列,被提交的作業按照先後順序在作業佇列中排隊,新來的作業插入到隊尾。乙個作業執行完後,總是從隊首取下乙個作業執行。這種排程策略的優點是簡單 易於實現,同時也減...

Hadoop學習筆記(三) 作業排程器

作業排程器 早期的作業排程使用fifo first in first out 排程演算法,可以設定屬性mapred.job.priority或者jobclient的setjobpriority 方法來設定作業優先順序,可配置的優先順序有5個 very high,high,normal,low,ver...

Hadoop集群作業排程演算法

hadoop集群中有三種作業排程演算法,分別為 fifo 公平排程演算法和計算能力排程演算法 fifo比較簡單,hadoop 中只有乙個作業佇列,被提交的作業按照先後順序在作業佇列中排隊,新來的作業插入到隊尾。乙個作業執行完後,總是從隊首取下乙個作業執行。這種排程策略的優點是簡單 易於實現,同時也減...