Hadoop作業排程機制
前幾天身份證竟然過期了,為了“重新做人”晚上就得飛奔回大山東補辦良民證,希望朝廷手下留情,不要把我抓起來,因為我要以黑戶的身份爬火車了。。。
迴歸正題:話說hadoop是處理大資料的,一堆煤炭被分成N量車來拉,那這些車是怎麼分配的呢?如果是兩隊煤炭同事需要拉又該怎麼分配這些車呢?這就是作業排程的問題了,和linux一樣,hadoop有自己的一套作業排程機制,下面一一道來。
先來先服務(FIFO)
Hadoop中預設的排程器FIFO,它先按照作業的優先順序高低,再按照到達時間的先後選擇被執行的作業。
FIFO比較簡單,hadoop中只有一個作業佇列,被提交的作業按照先後順序在作業佇列中排隊,新來的作業插入到隊尾。一個作業執行完後,總是從隊首取下一個作業執行。
這種排程策略的優點是簡單、易於實現,同時也減輕了jobtracker的負擔。但是它的缺點也是顯然的,它對所有的作業都一視同仁,沒有考慮到作業的緊迫程度,另外對小作業的執行不利。
這種策略在系統中配置了任務槽,一個任務槽可以執行一個task任務,這些任務就是一個大的作業被切分後的小作業。當一個使用者提交多個作業時,每個作業可以分配到一定的任務槽以執行task任務(這裡的任務槽可以理解為可以執行一個map任務或reduce任務)。
如果把整個hadoop叢集作業排程跟作業系統的作業排程相比,第一種FIFO就相當於作業系統中早期的單道批處理系統,系統中每個時刻只有一道作業在執行,而公平排程相當於多道批處理系統,它實現了同一個時刻多道作業同時執行。由於linux是多使用者的,若有多個使用者同時提交多個作業會怎樣?在這種策略中給每個使用者分配一個作業池,然後給每個作業池設定一個最小共享槽個數,什麼是最小共享槽個數呢?先要理解一個最小什麼意思,最小是指只要這個作業池需要,排程器應該確保能夠滿足這個作業池的最小任務槽數的需求,但是如何才能確保在它需要的時候就有空的任務槽,一種方法是固定分配一定數量的槽給作業池不動,這個數量至少是最小任務槽值,這樣只要在作業池需要的時候就分配給它就行了,但是這樣在這個作業池沒有用到這麼多工槽的時候會造成浪費,這種策略實際上是這樣做的,當作業池的需求沒有達到最小任務槽數時,名義上是自己的剩餘的任務槽會被分給其他有需要的作業池,當一個作業池需要申請任務槽的時候若系統中沒有了,這時候不會去搶佔別人的(也不知道搶誰的啊),只要當前一個空的任務槽釋放會被立即分配給這個作業池。
在一個使用者的作業池內,多個作業如何分配槽這個可以自行選擇瞭如FIFO。所以這種排程策略分為兩級:
第一級,在池間分配槽,在多使用者的情況下,每個使用者分配一個作業池。
第二級,在作業池內,每個使用者可以使用不同的排程策略。
計算能力排程和公平排程有點類似,公平排程策略是以作業池為單位分配任務槽,而計算能力排程是以佇列為單位分配tasktracker(叢集中一個節點),這種排程策略配置了多個佇列,每個佇列配置了最小額度的tasktracker數量,同公平排程策略類似,當一個佇列有空閒的tasktracker時,排程器會將空閒的分配給其他的佇列,當有空閒的tasktracker時,由於這時候可能有多個佇列沒有得到最小額度的tasktracker而又在申請新的,空閒的tasktracker會被優先分配到最飢餓的佇列中去,如何衡量飢餓程度呢?可以透過計算佇列中正在執行的任務數與其分得的計算資源之間的比值是否最低來判斷的,越低說明飢餓程度越高。
計算能力排程策略是以佇列的方式組織作業的,所以一個使用者的作業可能在多個佇列中,如果不對使用者做一定的限制,很可能出現在多個使用者之間出現嚴重不公平的現象。所以在選中新作業執行時候,還需要考慮作業所屬的使用者是否超過了資源的限制,如果超過,作業不會被選中。
對於在同一個佇列中,這種策略使用的是基於優先順序的FIFO策略,但是不會搶佔。
從以上的討論中可以看出,這些排程演算法各具針對性。如果正在執行一個大型 Hadoop 叢集,它具有多個客戶端和不同型別、不同優先順序的作業,那麼容量排程器是最好選擇,它可以確保訪問,並能重用未使用的容量並調整佇列中作業的優先順序。
儘管不太複雜,但無論是小型還是大型叢集,如果由同一個組織使用,工作負載數量有限,那麼公平排程器也能運轉得很好。公平排程可以將容量不均勻地分配給池(作業的),但是它較為簡單且可配置性較低。公平排程在存在多種作業的情況下非常有用,因為它能為小作業和大作業混合的情況提供更快的響應時間(支援更具互動性的使用模型)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30316686/viewspace-2098528/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hadoop - Azkaban 作業排程Hadoop
- Apache Oozie 教程:使用 Oozie 排程 Hadoop 作業ApacheHadoop
- 深入理解Yarn的架構及作業排程機制Yarn架構
- Hadoop作業的三種排程演算法Hadoop演算法
- Pod的排程機制
- Hadoop叢集三種作業排程演算法介紹Hadoop演算法
- 作業排程模擬程式
- 作業系統課程設計——處理機和程式排程演算法及記憶體分配回收機制作業系統演算法記憶體
- 作業系統4——處理機排程與死鎖作業系統
- oracle排程程式作業dbms_schedulerOracle
- oracle使用DBMS_SCHEDULER排程作業Oracle
- Oracle事件驅動的排程作業Oracle事件
- 【作業系統】--處理器排程作業系統
- 批處理作業排程問題
- Android 5.0的排程作業JobSchedulerAndroid
- Oracle 排程程式作業( dbms_scheduler )Oracle
- 作業系統排程演算法作業系統演算法
- Hadoop Yarn 框架原理及運作機制HadoopYarn框架
- iOS系統資源排程機制解析iOS
- Golang 的 協程排程機制 與 GOMAXPROCS 效能調優Golang
- 批處理作業排程-分支界限法
- 作業系統之排程演算法作業系統演算法
- 實驗二 作業模擬排程程式
- Net作業排程(二) -CrystalQuartz遠端管理quartz
- 0512作業系統之程式排程作業系統
- 多機器人協作排程問題機器人
- Hadoop排程器原理解析Hadoop
- 作業系統精髓設計原理 程式排程作業系統
- 作業系統(5)處理器排程管理作業系統
- Net作業排程(一) -Quartz.Net入門quartz
- Net作業排程(三) — Quartz.Net進階quartz
- 0512 作業系統程式排程實驗作業系統
- 基於事件驅動的Oracle作業排程事件Oracle
- 實現Quartz.NET的HTTP作業排程quartzHTTP
- async-await:協作排程 vs 搶佔排程AI
- Elastic-job實戰(分散式作業排程框架)AST分散式框架
- NET作業排程(定時任務)-Quartz.Netquartz
- 【作業系統】4.程序排程演算法作業系統演算法