一、引言
yarn在hadoop的生態系統中擔任了資源管理和任務排程的角色。在討論其構造器之前先簡單了解一下yarn的架構。
二、fifo排程器
三、capacity排程器
上圖是capacity排程器的執行過程示意圖。capacity排程器也就是日常說的容器排程器。可以將它理解成乙個個的資源佇列。這個資源佇列是使用者自己去分配的。例如因為工作所需要把整個集群分成了ab兩個佇列,a佇列下面還可以繼續分,比如將a佇列再分為1和2兩個子佇列。那麼佇列的分配就可以參考下面的樹形結構:
—a[60%]
|—a.1[40%]
|—a.2[60%]
—b[40%]
上述的樹形結構可以理解為a佇列占用整個資源的60%,b佇列占用整個資源的40%。a佇列裡面又分了兩個子佇列,a.1佔據40%,a.2佔據60%,也就是說此時a.1和a.2分別占用a佇列的40%和60%的資源。雖然此時已經具體分配了集群的資源,但是並不是說a提交了任務之後只能使用它被分配到的60%的資源,而b佇列的40%的資源就處於空閒。只要是其它佇列中的資源處於空閒狀態,那麼有任務提交的佇列可以使用空閒佇列所分配到的資源,使用的多少是依據配來決定。引數的配置會在後文中提到。
capacity排程器具有以下的幾個特性:
1. 層次化的佇列設計,這種層次化的佇列設計保證了子佇列可以使用父佇列設定的全部資源。這樣通過層次化的管理,更容易合理分配和限制資源的使用。
2.容量保證,佇列上都會設定乙個資源的佔比,這樣可以保證每個佇列都不會占用整個集群的資源。
3. 安全,每個佇列又嚴格的訪問控制。使用者只能向自己的佇列裡面提交任務,而且不能修改或者訪問其他佇列的任務。
4.彈性分配,空閒的資源可以被分配給任何佇列。當多個佇列出現爭用的時候,則會按照比例進行平衡。
5.多租戶租用,通過佇列的容量限制,多個使用者就可以共享同乙個集群,同事保證每個佇列分配到自己的容量,提高利用率。
6.操作性,yarn支援動態修改調整容量、許可權等的分配,可以在執行時直接修改。還提供給管理員介面,來顯示當前的佇列狀況。管理員可以在執行時,新增乙個佇列;但是不能刪除乙個佇列。管理員還可以在執行時暫停某個佇列,這樣可以保證當前的佇列在執行過程中,集群不會接收其他的任務。如果乙個佇列被設定成了stopped,那麼就不能向他或者子佇列上提交任務了。
7.基於資源的排程,協調不同資源需求的應用程式,比如記憶體、cpu、磁碟等等。
(1)capacity:佇列的資源容量(百分比)。 當系統非常繁忙時,應保證每個佇列的容量得到滿足,而如果每個佇列應用程式較少,可將剩餘資源共享給其他佇列。注意,所有佇列的容量之和應小於100。
(2)maximum-capacity:佇列的資源使用上限(百分比)。由於存在資源共享,因此乙個佇列使用的資源量可能超過其容量,而最多使用資源量可通過該引數限制。(這也是前文提到的關於有任務執行的佇列可以占用的資源的最大百分比)
(3)user-limit-factor:每個使用者最多可使用的資源量(百分比)。比如,假設該值為30,則任何時刻,每個使用者使用的資源量不能超過該佇列容量的30%。
(6)state :佇列狀態可以為stopped或者 running,如果乙個佇列處於stopped狀態,使用者不可以將應用程式提交到該佇列或者它的子佇列中,類似的,如果root佇列處於stopped 狀態,使用者不可以向集群中提交應用程式,但正在執行的應用程式仍可以正常執行結束,以便佇列可以優雅地退出。
(8)acl_administer_queue:為佇列指定乙個管理員,該管理員可控制該佇列的所有應用程式,比如殺死任意乙個應用程式等。同樣,該屬性具有繼承性,如果乙個使用者可以向某個佇列中提交應用程式,則它可以向它的所有子佇列中提交應用程式。
四、fair排程器
上圖是fair排程器在乙個佇列中的執行過程示意圖。fair排程器也就是日常說的公平排程器。fair排程器是乙個佇列資源分配方式,在整個時間線上,所有的job平均的獲取資源。預設情況下,fair排程器只是對記憶體資源做公平的排程和分配。當集群中只有乙個任務在執行時,那麼此任務會占用整個集群的資源。當其他的任務提交後,那些釋放的資源將會被分配給新的job,所以每個任務最終都能獲取幾乎一樣多的資源。
公平排程器也可以在多個佇列間工作,如上圖所示,例如有兩個使用者a和b,他們分別擁有乙個佇列。當a啟動乙個job而b沒有任務提交時,a會獲得全部集群資源;當b啟動乙個job後,a的任務會繼續執行,不過佇列a會慢慢釋放它的一些資源,一會兒之後兩個任務會各自獲得一半的集群資源。如果此時b再啟動第二個job並且其它任務也還在執行時,那麼它將會和b佇列中的的第乙個job共享佇列b的資源,也就是佇列b的兩個job會分別使用集群四分之一的資源,而佇列a的job仍然會使用集群一半的資源,結果就是集群的資源最終在兩個使用者之間平等的共享。
(1)yarn.scheduler.fair.allocation.file: 「allocation」檔案的位置,「allocation」檔案是乙個用來描述queue以及它們的屬性的配置檔案。這個檔案必須為格式嚴格的xml檔案。如果為相對路徑,那麼將會在classpath下查詢此檔案(conf目錄下)。預設值為「fair-scheduler.xml」。
(2)yarn.scheduler.fair.user-as-default-queue:是否將與allocation有關的username作為預設的queue name,當queue name沒有指定的時候。如果設定成false(且沒有指定queue name) 或者沒有設定,所有的jobs將共享「default」 queue。預設值為true。
(3)yarn.scheduler.fair.preemption:是否使用「preemption」(優先權,搶占),預設為fasle,在此版本中此功能為測試性的。
(4)yarn.scheduler.fair.assignmultiple:是在允許在乙個心跳中,傳送多個container分配資訊。預設值為false。
(5)yarn.scheduler.fair.max.assign:如果assignmultuple為true,那麼在一次心跳中,最多傳送分配container的個數。預設為-1,無限制。
(6)yarn.scheduler.fair.locality.threshold.node:乙個float值,在0~1之間,表示在等待獲取滿足node-local條件的containers時,最多放棄不滿足node-local的container的機會次數,放棄的nodes個數為集群的大小的比例。預設值為-1.0表示不放棄任何排程的機會。
(7)yarn.scheduler.fair.locality.threashod.rack:同上,滿足rack-local。
五、總結
如果業務邏輯比較簡單或者剛接觸hadoop的時候建議使用fifo排程器;如果需要控制部分應用的優先順序同時又想要充分利用集群資源的情況下,建議使用capacity排程器;如果想要多使用者或者多佇列公平的共享集群資源,那麼就選用fair排程器。希望大家能夠根據業務所需選擇合適的排程器。
hadoop yarn資源排程
yarn是hadoop集群當中的資源管理系統模組,從hadoop2.0開始引入yarn模組,yarn可為各類計算框架提供資源的管理和排程,主要用於管理集群當中的資源 主要是伺服器的各種硬體資源,包括cpu,記憶體,磁碟,網路io等 以及排程執行在yarn上面的各種任務。總結一句話就是說 yarn主要...
Hadoop Yarn排程器的選擇和使用
一 引言 yarn在hadoop的生態系統中擔任了資源管理和任務排程的角色。在討論其構造器之前先簡單了解一下yarn的架構。二 fifo排程器 三 capacity排程器 上圖是capacity排程器的執行過程示意圖。capacity排程器也就是日常說的容器排程器。可以將它理解成乙個個的資源佇列。這...
Hadoop Yarn 三種資源排程器詳解
目前,hadoop作業排程器主要有三種 fifo capacity scheduler fair scheduler。hadoop3.1.3預設的資源排程器是capacity scheduler。hadoop最初設計目的是支援大資料批處理作業,如日誌挖掘 web索引等作業,為此,hadoop僅提供了...