Hadoop详解(十):Hadoop 作业调度机制
Hadoop 作為一個分布式計算平臺,從集群計算的角度分析,Hadoop可以將底層的計算資源整合后統一分配到集群中的計算節點,從而達到分布式和并行計算的目的,最終完成任務的高效執行。在調度機制中涉及的三個核心問題:
在目前的Hadoop 系統中,默認的調度器為FIFO調度,主要適合單隊列的批處理作業需求,針對多用戶多隊列的控制需求,雅虎開發并且向開源社區貢獻了容量調度器(Capacity Scheduler)和Facebook開發并貢獻了公平調度器(FAIR Scheduler)。
1. 作業調度概述
1.1 作業調度相關概念
- 作業管理:在調度系統中作業管理包括作業提交權限控制,作業運行狀態查看權限控制等。
- 用戶和分組:在Hadoop系統中以組為單位組織管理作業,每個用戶只能向固定分組中提交作業,只能使用固定分組中配置的資源。同時可以限制每個用戶提交的作業數、使用的資源等。
- 資源池:是Hadoop公平調度Fiar Scheduler中的概念,一個資源池可以對應一個用戶(User)、一個分組(Group)、或者一個隊列(Queue)。
- 隊列:隊列是Hadoop中提出的概念,一個隊列(Queue)可以由任意幾個分組(Group)和任意幾個用戶(User)組成。
- 資源槽位:是Hadoop分布式系統進行資源管理的基本單位,是集群計算資源的抽象化,每個資源槽位都代表可以運行的一個任務(Map任務和Reduce任務)。Hadoop集群中的每個計算節點都擁有一定數量的資源槽,具體數目需要每個用戶依據每個節點的內存、CPU等信息確定并配置,默認每個節點兩個資源槽位,表示每個計算節點可以并發運行兩個任務
- 作業調度和任務調度:第一級是作業調度,也就是作業選擇,作業調度器選取作業集合中的一個等待調度的作業。第二級是任務調度,也就是任務分配,由任務調度器在第一級選擇的作業中選取一個就緒的任務來運行。
- 心跳:主節點負責管理所有從節點的資源,而這種管理是通過主從節點之間的心跳信息來互相通信的,也就是從節點定時向主節點發送狀態信息————心跳信息來報告自己當前的狀況
- 本地化資源和非本地化資源:待調度資源的作業集合中有一個作業至少存一個任務的代處理數據存位于該計算節點上,那么就可以稱為這個計算節點是這個作業的本地化資源。
- 本地化調度和非本地化調度
1.2 作業調度流程
1.3 集群資源組織和管理
Hadoop系統作業調度是以計算槽位slot來組織集群計算資源的,計算槽位可以認為是Hadoop集群中計算資源的抽象,是集群資源管理的基本單位,計算槽位slot資源包括兩種類型:Map slot和Reduce Slot
2. FIFO 調度器
FIFO調度器是Hadoop默認的調度器,其調度策略簡單,容易實現,并且調度效率最高。
2.1 基本調度策略
類似于Linux操作系統中的FIFO先進先出進程調度算法,Hadoop FIFO調度器的調度策略是將用戶提交的作業按照先后順序放在一個隊列中,然后依據先后順序和優先級順序被依次調度執行,整體上遵循先進先出基本原則。
FIFO調度策略遵循以下基本原則:
- 所有用戶提交的作業會統一按照提交的先后順序排列在同一個隊列中。
- 支持優先級,包括VERY_HIGH、HIGH、NORMAL、LOW、VERY_LOW
- 在優先級相同的情況下,按照先來先服務的模式調度執行。
- 在優先級不同的情況下,優先級高的作業仙貝調度執行。
FIFO調度器有三種基本情況:
總結:FIFO調度器邏輯設計簡潔,對于單用戶集群系統來講比較適合,同時系統利用率高,響應時間也很短,但是對于多用戶共享集群資源的情況下就會出現不能區別不同用戶、不同作業類型的情況。
2.2 任務分配算法
3. 公平調度器
FIFO調度器的問題:FIOF調度器不支持多個隊列,也不支持多個用戶共享集群,這樣就造成了集群資源利用率過低,對于不同類型的作業不能保證公平調度器等問題,公平調度器FairScheduler就這樣產生了。
3.1 主要功能
- 實現了類似Linux內核的Fair-Share調度算法,以保證各個作業基本上能公平共享整個集群的資源。
- 支持多用戶、多隊列和劃分資源池。
- 支持資源池最小共享保證和最大作業限制。
- 共享權重可分配:通過調整共享權重使得高優先級作業、大作業共享更多的資源。
- 支持資源搶占:當一個資源池有空閑資源槽時,調度器會將其共享給需要資源調度的資源池。
- 實現了延遲調度:延遲調度機制可以調數據本地任務的效率。
3.2 基本調度策略
公平調度策略的核心概念是隨著時間的推移能平均獲取同等的共享資源。當單獨一個作業任務運行時,它將使用整個集群;當有其他作業被提交時,系統會將任務(task)空閑時間片(slot)賦給新的作業,以使得每一個作業都能獲取等量的CPU時間。
公平調度器中有一個資源池pool的概念,并通過資源池來組織作業,把資源公平地分配到這些資源池里面。在默認的情況下,每一個用戶都擁有一個獨立的資源池,以使得每一個用戶都能獲取一份同等的集群資源而不管其提交了多少作業。
在每一個資源池內,會使用公平共享的方式在運行的作業間共享資源。用戶可以給予資源池相應的權重,以不按比例的方式共享集群。除了提供公平共享的方法之外,公平調度器允許賦給資源池以保證最小的共享資源。
公平調度器也支持在可配置的超時時間后對允許的作業進行搶占。如果新的作業在一定時間內還獲取不到最小的共享資源,這個作業別允許去終結已運行的作業中任務以獲取運行所需要的資源。
4. 容量調度器
容量調度器是雅虎結合自己的集群業務類型,提出的一種多用戶調度器,這種調度器支持多用戶、多隊列,每一個隊列都可以單獨配置一定的資源量,每個隊列采用FIFO策略,可以看做是FIFO調度器的多隊列版本。
4.1 產生背景
公平調度器強調的是各個作業的公平共享原則,主要是保證資源池之間以公平地共享整個集群資源,然而整個集群的資源利用率的角度來看,公平調度并不能保證整個集群的資源的利用率最高,也就是雖然各種作業對資源的使用可以達到公平地原則,保證用戶都可以公平地分享整個集群的資源,但是仍然存在計算資源利用率不高的問題,容量調度器就是用來解決這個問題。
在容量調度器中,每個作業被提交到一個隊列中,每個隊列分配整個集群資源的容量(capacity)的一定比例,隊列中的作業以FIFO的方式占用整個隊列分配的資源(capacity)。調度的基本策略是首先選擇一個容量capacity實際占用率最低的隊列,這樣最需要資源的隊列優先調度,然后從FIFO隊列中選擇一個合適的作業。
4.2 主要功能
- 支持多用戶多隊列
- 層次化隊列機制
- 資源容量保證
- 作業權限控制
- 彈性資源分配
- 運行時的控制功能
- 基于資源的調度
- 作業內存控制
- 延遲調度機制
4.3 基本調度策略
容量調度器的計算能力調度示意圖如下:假定Hadoop集群中有100個計算資源槽位。調度器中配置了隊列P和隊列S,隊列P中配置容量為60;S隊列中配置容量為40。P中隊列最小配額為50%,也就是P隊列中可以同時運行兩個作業,每個作業分配30個計算資源;S隊列中最小配額為25%,也就是可以同時運行4個作業。在隊列之間也會共享空閑的計算資源。容量調度算法中最重要的就是在選擇作業的時候,會關注作業所屬的用戶是否已經超過了他所能使用的計算資源限制。
容量調度器還可以有效地對集群中資源中的內存資源進行管理,從而可以有效的支持內存密集型作業。如果一個作業對內存的資源需求比較高,那么調度算法就要保證將該作業的相關任務分派到具有充足內存資源的TaskTacker上執行,已避免由于內存不足造成無法執行。因此,在作業選擇的過程中,計算能力調度算法還需要檢查空閑TaskTracekr上的內存資源是否能夠滿足作業的內存需求。
總結
以上是生活随笔為你收集整理的Hadoop详解(十):Hadoop 作业调度机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop详解(九):Hadoop S
- 下一篇: Hadoop详解(十一):Yarn设计理