hadoop調度器的作用是將系統中空閑的資源按一定策略分配給作業。調度器是一個可插拔的模塊,用戶可以根據自己的實際應用要求設計調度器。Hadoop中常見的調度器有三種,分別為:
1.基於隊列的FIFO(先進先出)
hadoop默認的資源調度器。優點:簡單明了。缺點:忽略了不同作業的需求差異。
2.計算能力調度器Capacity Scheduler
支持多個隊列,每個隊列可配置一定的資源量,每個隊列采用FIFO調度策略,為了防止同一個用戶的作業獨占隊列中的資源,該調度器會對同一用戶提交的作業所占資源量進行限定。選擇占用最小、優先級高的先執行
調度時,首先按以下策略選擇一個合適隊列:計算每個隊列中正在運行的任務數與其應該分得的計算資源之間的比值,選擇一個該比值最小的隊列;然后按以下策略選擇該隊列中一個作業:按照作業優先級和提交時間順序選擇,同時考慮用戶資源量限制和內存限制。
3.公平調度器Fair Scheduler
公平調度是一種賦予作業(job)資源的方法,它的目的是讓所有的作業隨着時間的推移,都能平均的獲取等同的共享資源。所有的 job 具有相同的資源
當單獨一個作業在運行時,它將使用整個集群。當有其它作業被提交上來時,系統會將任務(task)空閑資源(container)賦給這些新的作業,以使得每一個作業都大概獲取到等量的CPU時間。
與Hadoop默認調度器維護一個作業隊列不同,這個特性讓小作業在合理的時間內完成的同時又不"餓"到消耗較長時間的大作業。它也是一個在多用戶間共享集群的簡單方法。公平調度可以和作業優先權搭配使用——優先權像權重一樣用作為決定每個作業所能獲取的整體計算時間的比例。同計算能力調度器類似,支持多隊列多用戶,每個隊列中的資源量可以配置, 同一隊列中的作業公平共享隊列中所有資源。
總結(轉):
隨着Hadoop版本的演化,Fair Scheduler和Capacity Scheduler的功能越來越完善, 包括層級隊列組織方式、資源搶占、批量調度等,也正因如此,兩個調度器同質化越來越嚴重, 目前看了,兩個調度器從設計到支持的特性等方面非常接近, 而由於Fair Scheduler支持多種調度策略,現在看來,可以認為Fair Scheduler具備了Capacity Scheduler具有的所有功能。
下表從多個方面對比了Hadoop 2.0(YARN)中這兩個調度器的異同,通過這個表讀者能更好地理解Capacity Scheduler與Fair Scheduler的相同點和不同點。
其中,FIFO、FAIR和DRF分別是指 先來先服務、公平調度 和 主資源公平調度,具體含義如下:
FIFO:先按照優先級高低調度,如果優先級相同,則按照提交時間先后順序調度,如果提交時間相同,則按照(隊列或者應用程序)名稱大小(字符串比較)調度
FAIR:按照內存資源使用量比率調度,即按照used_memory/minShare大小調度(核心思想是按照該調度算法決定調度順序,但還需考慮一些邊界情況)
DRF:借鑒了Mesos中的設計策略,按照主資源公平調度算法進行調度,具體已經在Apache Mesos調度器機制進行了介紹
實際上,Hadoop的調度器遠不止以上三種,最近,出現了很多針對新型應用的Hadoop調度器。
4.適用於異構集群的調度器LATE
現有的Hadoop調度器都是建立在同構集群的假設前提下,LATE建立在集群異構的情況。
5.適用於實時作業的調度器Deadline Scheduler和Constraint-based Scheduler
這種調度器主要用於有時間限制的作業(Deadline Job),即給作業一個deadline時間, 讓它在該時間內完成。實際上,這類調度器分為兩種,軟實時(允許作業有一定的超時)作業調度器 和 硬實時(作業必須嚴格按時完成)作業調度器。
- Deadline Scheduler主要針對的是軟實時作業,該調度器根據作業的運行進度和剩余時間動態調整作業獲得的資源量,以便作業盡可能的在deadline時間內完成。
- Constraint-based Scheduler主要針對的是硬實時作業,該調度器根據作業的deadline和當前系統中的實時作業運行情況,預測新提交的實時作業能不能在deadline時間內完成,如果不能,則將作業反饋給用戶,讓他重調整作業的deadline。