Hadoop在standalone模式下只有FIFO Scheduler 和 Fair Scheduler锅纺;
Hadoop-yarn模式下有FIFO Scheduler榕酒,Capacity Scheduler 和 Fair Scheduler策略
FIFO Scheduler:
先進先出策略屉凯,就是按照application提交的順序來執(zhí)行的 ,這些application都會放在一個隊列里绣夺, 前一個執(zhí)行完了才會執(zhí)行下一個方援。
缺點:提交耗時長的任務(wù)后,會導(dǎo)致后面的任務(wù)長期處于饑餓狀態(tài)式镐。
Capacity Scheduler
hadoop默認的調(diào)度器
Capacity Scheduler為每個人分配一個隊列反镇,每個隊列占用的集群資源可以是相同的也可以是不同的,隊列內(nèi)部還是采用FIFO調(diào)度的策略娘汞。
如上圖所示歹茶,隊列A和B都各自占有不同的資源,但是A占用的比B更多,在任務(wù)執(zhí)行的時候辆亏,如果集群中恰好有空閑的資源风秤,比如B隊列中的資源,那么調(diào)度器就可以將B隊列中空閑的資源分配給隊列A扮叨,這種方式被稱為彈性隊列(queue elasticity)缤弦。
但是彈性隊列也有副作用,B隊列的資源被分配給A后彻磁,此時隊列B又有了新的任務(wù)碍沐,但是B隊列資源不夠,此時只能等A隊列中的任務(wù)執(zhí)行完衷蜓。為了方式一個對列占用過多的資源累提,yarn提供了一個可以設(shè)置的參數(shù),用來設(shè)置磁浇,某個隊列能夠占用的最大資源斋陪。(這個參數(shù)的設(shè)置需要權(quán)衡以達到最優(yōu) )
隊列支持層級關(guān)系,如下:
root
├── prod
└── dev
├── eng
└── science
配置如下
<?xml version="1.0"?>
<configuration>
#設(shè)置root隊列
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>prod,dev</value>
</property>
#設(shè)置子隊列
<property>
<name>yarn.scheduler.capacity.root.dev.queues</name>
<value>eng,science</value>
</property>
<property>
#設(shè)置pro隊列理論上占的資源比重 <name>yarn.scheduler.capacity.root.prod.capacity</name>
<value>40</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.capacity</name>
<value>60</value>
</property>
#設(shè)置dev隊列最大能占的資源比重(開始為60% 最大為75%)
<property>
<name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
<value>75</value>
</property>
<property>
#eng的兩個子隊列各占父隊列一半置吓。由于沒有設(shè)最大占用值无虚,所以可能出現(xiàn)占用整個父隊列的情況 <name>yarn.scheduler.capacity.root.dev.eng.capacity</name>
<value>50</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.science.capacity</name>
<value>50</value>
</property>
</configuration>
通過配置參數(shù)來設(shè)置job運行時所在的隊列:
mapreduce.job.queuename
指明隊列的時候不需要(也不能包含父隊列),比如eng不能寫成root.dev.eng
Fair Scheduler
公平調(diào)度是一種賦予作業(yè)(job)資源的方法衍锚,它的目的是讓所有的作業(yè)隨著時間的推移友题,都能平均的獲取等同的共享資源。所有的 job 具有相同的資源戴质。
當單獨一個作業(yè)在運行時度宦,它將使用整個集群。當有其它作業(yè)被提交上來時告匠,系統(tǒng)會將任務(wù)(task)空閑資源(container)賦給這些新的作業(yè)戈抄,以使得每一個作業(yè)都大概獲取到等量的CPU時間。
與Hadoop默認調(diào)度器維護一個作業(yè)隊列不同后专,這個特性讓小作業(yè)在合理的時間內(nèi)完成的同時又不"餓"到消耗較長時間的大作業(yè)呛凶。它也是一個在多用戶間共享集群的簡單方法。公平調(diào)度可以和作業(yè)優(yōu)先權(quán)搭配使用——優(yōu)先權(quán)像權(quán)重一樣用作為決定每個作業(yè)所能獲取的整體計算時間的比例行贪。同計算能力調(diào)度器類似漾稀,支持多隊列多用戶,每個隊列中的資源量可以配置建瘫, 同一隊列中的作業(yè)公平共享隊列中所有資源崭捍。
title: Hadoop任務(wù)調(diào)度策略
categories: Spark
tags:
- Spark
date: 2018-04-15
typora-root-url: Hadoop任務(wù)調(diào)度策略
Hadoop在standalone模式下只有FIFO Scheduler 和 Fair Scheduler;
Hadoop-yarn模式下有FIFO Scheduler啰脚,Capacity Scheduler 和 Fair Scheduler策略
FIFO Scheduler:
<img src='FIFO.png' width="50%">
先進先出策略殷蛇,就是按照application提交的順序來執(zhí)行的 实夹,這些application都會放在一個隊列里, 前一個執(zhí)行完了才會執(zhí)行下一個粒梦。
缺點:提交耗時長的任務(wù)后亮航,會導(dǎo)致后面的任務(wù)長期處于饑餓狀態(tài)。
Capacity Scheduler
hadoop默認的調(diào)度器
<img src="capacity.png" width="50%">
Capacity Scheduler為每個人分配一個隊列匀们,每個隊列占用的集群資源可以是相同的也可以是不同的缴淋,隊列內(nèi)部還是采用FIFO調(diào)度的策略。
如上圖所示泄朴,隊列A和B都各自占有不同的資源重抖,但是A占用的比B更多,在任務(wù)執(zhí)行的時候祖灰,如果集群中恰好有空閑的資源钟沛,比如B隊列中的資源,那么調(diào)度器就可以將B隊列中空閑的資源分配給隊列A局扶,這種方式被稱為彈性隊列(queue elasticity)恨统。
但是彈性隊列也有副作用,B隊列的資源被分配給A后三妈,此時隊列B又有了新的任務(wù)延欠,但是B隊列資源不夠,此時只能等A隊列中的任務(wù)執(zhí)行完沈跨。為了方式一個對列占用過多的資源,yarn提供了一個可以設(shè)置的參數(shù)兔综,用來設(shè)置饿凛,某個隊列能夠占用的最大資源。(這個參數(shù)的設(shè)置需要權(quán)衡以達到最優(yōu) )
隊列支持層級關(guān)系软驰,如下:
root
├── prod
└── dev
├── eng
└── science
配置如下
<?xml version="1.0"?>
<configuration>
#設(shè)置root隊列
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>prod,dev</value>
</property>
#設(shè)置子隊列
<property>
<name>yarn.scheduler.capacity.root.dev.queues</name>
<value>eng,science</value>
</property>
<property>
#設(shè)置pro隊列理論上占的資源比重 <name>yarn.scheduler.capacity.root.prod.capacity</name>
<value>40</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.capacity</name>
<value>60</value>
</property>
#設(shè)置dev隊列最大能占的資源比重(開始為60% 最大為75%)
<property>
<name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
<value>75</value>
</property>
<property>
#eng的兩個子隊列各占父隊列一半涧窒。由于沒有設(shè)最大占用值,所以可能出現(xiàn)占用整個父隊列的情況 <name>yarn.scheduler.capacity.root.dev.eng.capacity</name>
<value>50</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.science.capacity</name>
<value>50</value>
</property>
</configuration>
通過配置參數(shù)來設(shè)置job運行時所在的隊列:
mapreduce.job.queuename
指明隊列的時候不需要(也不能包含父隊列)锭亏,比如eng不能寫成root.dev.eng
Fair Scheduler
<img src="fair.png" width='50%'>
公平調(diào)度是一種賦予作業(yè)(job)資源的方法纠吴,它的目的是讓所有的作業(yè)隨著時間的推移,都能平均的獲取等同的共享資源慧瘤。所有的 job 具有相同的資源戴已。
當單獨一個作業(yè)在運行時,它將使用整個集群锅减。當有其它作業(yè)被提交上來時糖儡,系統(tǒng)會將任務(wù)(task)空閑資源(container)賦給這些新的作業(yè),以使得每一個作業(yè)都大概獲取到等量的CPU時間怔匣。
與Hadoop默認調(diào)度器維護一個作業(yè)隊列不同握联,這個特性讓小作業(yè)在合理的時間內(nèi)完成的同時又不"餓"到消耗較長時間的大作業(yè)。它也是一個在多用戶間共享集群的簡單方法。公平調(diào)度可以和作業(yè)優(yōu)先權(quán)搭配使用——優(yōu)先權(quán)像權(quán)重一樣用作為決定每個作業(yè)所能獲取的整體計算時間的比例金闽。同計算能力調(diào)度器類似纯露,支持多隊列多用戶,每個隊列中的資源量可以配置代芜, 同一隊列中的作業(yè)公平共享隊列中所有資源埠褪。