Hadoop集羣三種做業調度算法介紹

Hadoop集羣中有三種做業調度算法,分別爲FIFO,公平調度算法和計算能力調度算法
先來先服務(FIFO)
Hadoop中默認的調度器FIFO,它先按照做業的優先級高低,再按照到達時間的前後選擇被執行的做業。
FIFO比較簡單,hadoop中只有一個做業隊列,被提交的做業按照前後順序在做業隊列中排隊,新來的做業插入到隊尾。一個做業運行完後,老是從隊首取 下一個做業運行。這種調度策略的優勢是簡單、易於實現,同時也減輕了jobtracker的負擔。可是它的缺點也是顯然的,它對全部的做業都一視同仁,沒 有考慮到做業的緊迫程度,另外對小做業的運行不利。
公平調度策略
這種策略在系統中配置了任務槽,一個任務槽能夠運行一個task任務,這些任務就是一個大的做業被切分後的小做業。當一個用戶提交多個做業時,每一個做業可 以分配到必定的任務槽以執行task任務(這裏的任務槽能夠理解爲能夠運行一個map任務或reduce任務)。若是把整個hadoop集羣做業調度跟操 做系統的做業調度相比,第一種FIFO就至關於操做系統中早期的單道批處理系統,系統中每一個時刻只有一道做業在運行,而公平調度至關於多道批處理系統,它 實現了同一個時刻多道做業同時運行。因爲linux是多用戶的,如有多個用戶同時提交多個做業會怎樣?在這種策略中給每一個用戶分配一個做業池,而後給每一個 做業池設置一個最小共享槽個數,什麼是最小共享槽個數呢?先要理解一個最小什麼意思,最小是指只要這個做業池須要,調度器應該確保可以知足這個做業池的最 小任務槽數的需求,可是如何才能確保在它須要的時候就有空的任務槽,一種方法是固定分配必定數量的槽給做業池不動,這個數量至少是最小任務槽值,這樣只要 在做業池須要的時候就分配給它就好了,可是這樣在這個做業池沒有用到這麼多任務槽的時候會形成浪費,這種策略其實是這樣作的,看成業池的需求沒有達到最 小任務槽數時,名義上是本身的剩餘的任務槽會被分給其餘有須要的做業池,當一個做業池須要申請任務槽的時候若系統中沒有了,這時候不會去搶佔別人的(也不 知道搶誰的啊),只要當前一個空的任務槽釋放會被當即分配給這個做業池。
在一個用戶的做業池內,多個做業如何分配槽這個能夠自行選擇瞭如FIFO。因此這種調度策略分爲兩級:
第一級,在池間分配槽,在多用戶的狀況下,每一個用戶分配一個做業池。
第二級,在做業池內,每一個用戶能夠使用不一樣的調度策略。
計算能力調度
計算能力調度和公平調度有點相似,公平調度策略是以做業池爲單位分配任務槽,而計算能力調度是以隊列爲單位分配tasktracker(集羣中一個節 點),這種調度策略配置了多個隊列,每一個隊列配置了最小額度的tasktracker數量,同公平調度策略相似,當一個隊列有空閒的 tasktracker時,調度器會將空閒的分配給其餘的隊列,當有空閒的tasktracker時,因爲這時候可能有多個隊列沒有獲得最小額度的 tasktracker而又在申請新的,空閒的tasktracker會被優先分配到最飢餓的隊列中去,如何衡量飢餓程度呢?能夠經過計算隊列中正在運行 的任務數與其分得的計算資源之間的比值是否最低來判斷的,越低說明飢餓程度越高。
計算能力調度策略是以隊列的方式組織做業的,因此一個用戶的做業可能在多個隊列中,若是不對用戶作必定的限制,極可能出如今多個用戶之間出現嚴重不公平的現象。因此在選中新做業運行時候,還須要考慮做業所屬的用戶是否超過了資源的限制,若是超過,做業不會被選中。
對於在同一個隊列中,這種策略使用的是基於優先級的FIFO策略,可是不會搶佔。linux

相關文章
相關標籤/搜索