hadoop三種調度類型

原文鏈接:https://blog.csdn.net/lifuxiangcaohui/article/details/27493569

先來先服務(FIFO)
Hadoop中默認的調度器FIFO,它先按照作業的優先級高低,再按照到達時間的先後選擇被執行的作業。
FIFO比較簡單,hadoop中只有一個作業隊列,被提交的作業按照先後順序在作業隊列中排隊,新來的作業插入到隊尾。一個作業運行完後,總是從隊首取下一個作業運行。這種調度策略的優點是簡單、易於實現,同時也減輕了jobtracker的負擔。但是它的缺點也是顯然的,它對所有的作業都一視同仁,沒有考慮到作業的緊迫程度,另外對小作業的運行不利。

公平調度策略
這種策略在系統中配置了任務槽,一個任務槽可以運行一個task任務,這些任務就是一個大的作業被切分後的小作業。當一個用戶提交多個作業時,每個作業可以分配到一定的任務槽以執行task任務(這裏的任務槽可以理解爲可以運行一個map任務或reduce任務)。如果把整個hadoop集羣作業調度跟操作系統的作業調度相比,第一種FIFO就相當於操作系統中早期的單道批處理系統,系統中每個時刻只有一道作業在運行,而公平調度相當於多道批處理系統,它實現了同一個時刻多道作業同時運行。由於linux是多用戶的,若有多個用戶同時提交多個作業會怎樣?在這種策略中給每個用戶分配一個作業池,然後給每個作業池設置一個最小共享槽個數,什麼是最小共享槽個數呢?先要理解一個最小什麼意思,最小是指只要這個作業池需要,調度器應該確保能夠滿足這個作業池的最小任務槽數的需求,但是如何才能確保在它需要的時候就有空的任務槽,一種方法是固定分配一定數量的槽給作業池不動,這個數量至少是最小任務槽值,這樣只要在作業池需要的時候就分配給它就行了,但是這樣在這個作業池沒有用到這麼多任務槽的時候會造成浪費,這種策略實際上是這樣做的,當作業池的需求沒有達到最小任務槽數時,名義上是自己的剩餘的任務槽會被分給其他有需要的作業池,當一個作業池需要申請任務槽的時候若系統中沒有了,這時候不會去搶佔別人的(也不知道搶誰的啊),只要當前一個空的任務槽釋放會被立即分配給這個作業池。
在一個用戶的作業池內,多個作業如何分配槽這個可以自行選擇瞭如FIFO。所以這種調度策略分爲兩級:
第一級,在池間分配槽,在多用戶的情況下,每個用戶分配一個作業池。
第二級,在作業池內,每個用戶可以使用不同的調度策略。

計算能力調度
計算能力調度和公平調度有點類似,公平調度策略是以作業池爲單位分配任務槽,而計算能力調度是以隊列爲單位分配tasktracker(集羣中一個節點),這種調度策略配置了多個隊列,每個隊列配置了最小額度的tasktracker數量,同公平調度策略類似,當一個隊列有空閒的tasktracker時,調度器會將空閒的分配給其他的隊列,當有空閒的tasktracker時,由於這時候可能有多個隊列沒有得到最小額度的tasktracker而又在申請新的,空閒的tasktracker會被優先分配到最飢餓的隊列中去,如何衡量飢餓程度呢?可以通過計算隊列中正在運行的任務數與其分得的計算資源之間的比值是否最低來判斷的,越低說明飢餓程度越高。
計算能力調度策略是以隊列的方式組織作業的,所以一個用戶的作業可能在多個隊列中,如果不對用戶做一定的限制,很可能出現在多個用戶之間出現嚴重不公平的現象。所以在選中新作業運行時候,還需要考慮作業所屬的用戶是否超過了資源的限制,如果超過,作業不會被選中。
對於在同一個隊列中,這種策略使用的是基於優先級的FIFO策略,但是不會搶佔。


 ———————————————— 
版權聲明:本文爲CSDN博主「技術人的突破」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lifuxiangcaohui/article/details/27493569

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