yarn之資源調(diào)度器

1: yarn ?資源調(diào)度的定義

2: yarn 資源調(diào)度的種類

在Yarn中有三種調(diào)度器可以選擇:FIFO Scheduler?杠览,Capacity Scheduler惜论,F(xiàn)airS cheduler个榕。

3:?FIFO Scheduler?

? ? 3.1?FIFO Scheduler 介紹

把應(yīng)用按提交的順序排成一個隊列妻柒,這是一個先進(jìn)先出隊列祝沸,在進(jìn)行資源分配的時候封恰,先給隊列中最頭上的應(yīng)用進(jìn)行分配資源麻养,待最頭上的應(yīng)用需求滿足后再給下一個分配

將所有的Applications放到隊列中,先按照作業(yè)的優(yōu)先級高低诺舔、再按照到達(dá)時間的先后鳖昌,為每個app分配資源备畦。如果第一個app需要的資源被滿足了,如果還剩下了資源并且滿足第二個app需要的資源许昨,那么就為第二個app分配資源懂盐,and so on。

優(yōu)點:簡單糕档,不需要配置莉恼。

缺點:不適合共享集群。如果有大的app需要很多資源速那,那么其他app可能會一直等待俐银。

圖1

上圖的示例:有一個很大的job1,它先提交端仰,并且占據(jù)了全部的資源捶惜。那么job2提交時發(fā)現(xiàn)沒有資源了,則job2必須等待job1執(zhí)行結(jié)束荔烧,才能獲得資源執(zhí)行吱七。

? ?3.2 使用FIFO Scheduler

? 默認(rèn)是 FIFO Scheduler, FIFO?Scheduler中沒有劃分隊列的概念茴晋。

yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler

? ? 3.3 配置參數(shù)

? ?FIFO Scheduler不需要配置

4:?Capacity Scheduler

? ?4.1?Capacity Scheduler 介紹

Capacity Scheduler主要是為了解決多租戶(multiple-tenants)的問題陪捷,也就是為了做資源隔離回窘,讓不同的組織使用各自的資源诺擅,不相互影響,同時提高整個集群的利用率和吞吐量啡直。Capacity Scheduler里面的核心概念或者資源就是隊列(queue)烁涌。概念理解上很簡單,分多個隊列酒觅,每個隊列分配一部分資源撮执,不同組織的應(yīng)用運行在各自的隊列里面,從而做到資源隔離舷丹。但為了提高資源(主要是CPU和內(nèi)存)利用率和系統(tǒng)吞吐量抒钱,在情況允許的情況下,允許隊列之間的資源搶占颜凯。

圖2

? ?4.2 使用Capacity Scheduler

?yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler谋币。

Capacity調(diào)度器默認(rèn)有一個預(yù)定義的隊列——root,所有的隊列都是它的子隊列。隊列的分配支持層次化的配置症概,使用.來進(jìn)行分割蕾额,比如yarn.scheduler.capacity.<queue-path>.queues.

demo

$HADOOP_HOME/etc/hadoop/capacity-scheduler.xml 增加如下配置:

<property>name>yarn.scheduler.capacity.root.queues</name>value>prod,dev</value></property>

<property><name>yarn.scheduler.capacity.root.dev.queues</name<value>eng,science</value></property>

<property><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>

<property><name>yarn.scheduler.capacity.root.dev.maximum-capacity</name><value>75</value></property>

? ?4.3 配置參數(shù)

? ? 4.3.1 隊列配置參數(shù)

? ? ?yarn.scheduler.capacity.root.accessible-node-labels

? ? ?yarn.scheduler.capacity.root.acl_administer_queue ??設(shè)置隊列的管理員的ACL控制,管理員可以控制隊列的所有應(yīng)用程序彼城。同樣诅蝶,它也具有繼承性退个。

? ? ?yarn.scheduler.capacity.root.acl_submit_applications?訪問控制列表ACL控制誰可以向該隊列提交任務(wù)。如果一個用戶可以向該隊列提交调炬,那么也可以提交任務(wù)到它的子隊列

? ? ?yarn.scheduler.capacity.root.capacity ?100 ??它是隊列的資源容量占比(百分比)语盈。應(yīng)保證每個隊列的容量得到滿足,而如果每個隊列應(yīng)用程序較少筐眷,可將剩余資源共享給其他隊列黎烈。同一層的所有隊列加起來必須是100%。

? ??yarn.scheduler.capacity.root.dataplatform.accessible-node-labels

? ? ?yarn.scheduler.capacity.root.dataplatform.acl_administer_queue?設(shè)置隊列的管理員的ACL控制匀谣,管理員可以控制隊列的所有應(yīng)用程序照棋。同樣,它也具有繼承性武翎。注意:ACL的設(shè)置是user1,user2 group1,group2這種格式烈炭。如果是*則代表任何人”Χ瘢空格表示任何人都不允許符隙。默認(rèn)是*.

? ? yarn.scheduler.capacity.root.dataplatform.acl_submit_applications

? ??yarn.scheduler.capacity.root.dataplatform.capacity ?它是隊列的資源容量占比(百分比)。系統(tǒng)繁忙時垫毙,每個隊列都應(yīng)該得到設(shè)置的量的資源霹疫;當(dāng)系統(tǒng)空閑時,該隊列的資源則可以被其他的隊列使用综芥。同一層的所有隊列加起來必須是100%丽蝎。

? ??yarn.scheduler.capacity.root.dataplatform.maximum-am-resource-percent ?設(shè)置有多少資源可以用來運行app master,即控制當(dāng)前激活狀態(tài)的應(yīng)用膀藐。默認(rèn)是10%

? ??yarn.scheduler.capacity.root.dataplatform.maximum-capacity ?隊列資源的使用上限屠阻。由于系統(tǒng)空閑時,隊列可以使用其他的空閑資源额各,因此最多使用的資源量則是該參數(shù)控制国觉。默認(rèn)是-1,即禁用虾啦。隊列的資源使用上限(百分比)麻诀。由于存在資源共享,因此一個隊列使用的資源量可能超過其容量傲醉,而最多使用資源量可通過該參數(shù)限制

? ??yarn.scheduler.capacity.root.dataplatform.ordering-policy fair

? ??yarn.scheduler.capacity.root.dataplatform.ordering-policy.fair.enable-size-based-weight?false

? ??yarn.scheduler.capacity.root.dataplatform.priority 0

? ??yarn.scheduler.capacity.root.dataplatform.state ?RUNNING?隊列的狀態(tài)蝇闭,可以使RUNNING或者STOPPED.如果隊列是STOPPED狀態(tài),那么新應(yīng)用不會提交到該隊列或者子隊列需频。同樣丁眼,如果root被設(shè)置成STOPPED,那么整個集群都不能提交任務(wù)了≌蜒常現(xiàn)有的應(yīng)用可以等待完成苞七,因此隊列可以優(yōu)雅的退出關(guān)閉藐守。

? yarn.scheduler.capacity..minimum-user-limit-percent ?每個任務(wù)占用的最少資源。比如蹂风,你設(shè)置成了25%卢厂。那么如果有兩個用戶提交任務(wù),那么每個任務(wù)資源不超過50%惠啄。如果3個用戶提交任務(wù)慎恒,那么每個任務(wù)資源不超過33%。如果4個用戶提交任務(wù)撵渡,那么每個任務(wù)資源不超過25%融柬。如果5個用戶提交任務(wù),那么第五個用戶需要等待才能提交趋距。默認(rèn)是100粒氧,即不去做限制。

? ??yarn.scheduler.capacity.root.dataplatform.user-limit-factor ? ?每個用戶最多使用的隊列資源占比节腐,如果設(shè)置為50.那么每個用戶使用的資源最多就是50%外盯。

? ? ?4.3.2 ?capacity搶占配置參數(shù)

YARN Capacity Scheduler開啟搶占需要配置如下參數(shù):

yarn.resourcemanager.scheduler.monitor.enable? 這個選項通知RM來開啟monitoring policy;

yarn.resourcemanager.scheduler.monitor.policies?開啟搶占模式翼雀, 設(shè)置monitor policies為org.apache.hadoop.yarn.server.resourcemanager.monitor.capacity.ProportionalCapacityPreemptionPolicy

yarn.resourcemanager.monitor.capacity.preemption.monitoring_interval?

搶占發(fā)生的每輪時間間隔饱苟,默認(rèn)為3秒。每次調(diào)用搶占策略(preemption-policy)將會掃描目前正在使用的隊列狼渊、正在運行的任務(wù)以及container箱熬,根據(jù)這些信息來判斷哪個container將會被搶占。

yarn.resourcemanager.monitor.capacity.preemption.max_wait_before_kill?

這個時間是當(dāng)一個container被標(biāo)記為被搶占到強制殺死該container的時間間隔囤锉,單位為毫秒坦弟。默認(rèn)情況下护锤,在強制殺死該container的之前官地, 將等待15秒讓AM釋放資源。

yarn.resourcemanager.monitor.capacity.preemption.total_preemption_per_round?

每一輪最大的能夠搶占的資源的百分比烙懦,默認(rèn)為0.1驱入。例如,集群的內(nèi)存總量為100G氯析,如果設(shè)置為0.1亏较,那么每一輪搶占最多可以搶占10G的資源。

yarn.resourcemanager.monitor.capacity.preemption.max_ignored_over_capacity?

指定當(dāng)一個隊列使用的大小超過一個百分比時掩缓,這個隊列才可以會被搶占雪情。假設(shè)這個值為x,那么RM將會等到這個隊列的使用量達(dá)到configured_capacity*(1 + x)時才會搶占它你辣。默認(rèn)為0.1巡通。

yarn.resourcemanager.monitor.capacity.preemption.natural_termination_factor?

每一輪搶占的所需資源的百分比尘执,通過設(shè)置這個參數(shù)來減緩回收的速度,避免回收動作過于激進(jìn)宴凉。例如誊锭,設(shè)置這個參數(shù)為0.2,隊列A還需要從隊列B搶占5G資源弥锄,那么第一輪A將從B搶占5*0.2=1G丧靡,第二輪將搶占4*0.2=0.8G。默認(rèn)為0.2籽暇。

4.3.3 node label功能

? ? 1) node label功能介紹

? ??Node label是將相似特點的節(jié)點進(jìn)行分組的一種途徑温治,application可以指定在哪里運行。現(xiàn)在我們只支持node partition:

一個node只能有一個node partition, 所以一個集群通過node partition被分為多個互斥的子集群戒悠。默認(rèn)的罐盔,node都屬于DEFAULT分區(qū)(partition="")。

目前Node Labels支持以下特性:

Partition cluster - 每個node可以指定一個label救崔,所以集群將會被分為多個小的互斥的partition惶看。

ACL of node-labels on queues - 用戶能夠設(shè)置每個隊列可訪問的node label,所以只有某些node可以被特定隊列訪問六孵。

指定可以被隊列訪問的partition的資源百分比- 用戶可以設(shè)置像這樣的百分比:隊列A可以訪問具備lable=hbase label的node30%的資源纬黎。這樣的百分比設(shè)置將會與現(xiàn)存的資源管理器保持一致。

在資源請求中指定必需的Node Label劫窒,它將會被分配到具有相同label的node本今。如果沒有指定必需的node label,那么資源請求將會被分配到屬于DEFAULT partition的node主巍。

可運維性

Node Label和節(jié)點的標(biāo)簽映射可以在RM restart中恢復(fù)冠息。

Update node labels -更新node label-管理員可以在RM運行過程中更新node、隊列的labels孕索。

? ? 2) 啟用node lable功能

<property> <name>yarn.node-labels.enabled</name>

????<value>true</value></property>

<property> ? ?<name>yarn.node-labels.fs-store.root-dir</name> ? <value>hdfs://ns1/system/yarn/node-labels></property>

<property>

????<name>yarn.node-labels.manager-class</name>

????<value>org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager</value>

</property>

? ? 3) 配置node lable功能

參考資料:https://han-zw.iteye.com/blog/2326433

1) 為 node添加 label

創(chuàng)建標(biāo)簽列表: ?yarn?rmadmin?-addToClusterNodeLabels?normal,cpu

給節(jié)點打標(biāo)簽:?yarn?rmadmin?-replaceLabelsOnNode?s3.cxy7.com,normal

yarn?rmadmin?-replaceLabelsOnNode?s4.cxy7.com,cpu

查看HDFS上的標(biāo)簽文件:hadoop?fs?-ls?/system/yarn/node-labels


執(zhí)行?yarn rmadmin -replaceLabelsOnNode “node1[:port]=label1 node2=label2”逛艰,增加label1到node1,label2到node2.如果用戶沒有指定port搞旭,它將會添加到運行在node上的所有NodeManager散怖。

2)?添加隊列與標(biāo)簽的匹配關(guān)系,修改capacity-scheduler.xml

<!--?配置dev和product隊列可使用的標(biāo)簽資源占比?-->

??<property>?

????<name>yarn.scheduler.capacity.root.dev.accessible-node-labels.normal.capacity</name>??

????<value>100</value>

??</property>

??<property>?

????<name>yarn.scheduler.capacity.root.product.accessible-node-labels.cpu.capacity</name>??

????<value>100</value>

??</property>

??</property>

??<!--?配置dev隊列可使用的標(biāo)簽?-->

??<property>?

????<name>yarn.scheduler.capacity.root.dev.accessible-node-labels</name>??

????<value>normal</value>

??</property>

??<property>?

????<name>yarn.scheduler.capacity.root.dev.default-node-label-expression</name>??

????<value>normal</value>

??</property>

注意: yarn.scheduler.capacity.<queue-path>.default-node-label-expression?值類似于"hbase",它的意思是:如果提交到隊列的application肄渗,在其資源請求中沒有指定node label镇眷,它會使用hbase作為default-node-label-expression。默認(rèn)值為空翎嫡,所以application會從沒有node label的節(jié)點中獲取容器欠动。


4.3.4 其他配置參數(shù)

??yarn.scheduler.capacity.maximum-am-resource-percent ?設(shè)置最多有多少資源可以用來運行app master,即控制當(dāng)前激活狀態(tài)的應(yīng)用惑申。默認(rèn)是10%

? yarn.scheduler.capacity.maximum-applications?設(shè)置系統(tǒng)中可以同時運行和等待的應(yīng)用數(shù)量具伍。默認(rèn)是10000.

?yarn.scheduler.capacity.node-locality-delay ?參見6?錯失的調(diào)度機會數(shù)铆遭,在這之后CapacityScheduler將會嘗試調(diào)度本地機架的容器。典型的沿猜,應(yīng)該設(shè)置為集群中節(jié)點的數(shù)量值枚荣。默認(rèn)設(shè)置值約等于一個機架的節(jié)點數(shù),為40.值為正整數(shù)啼肩。

?yarn.scheduler.capacity.queue-mappings ?配置項指定用戶/組到特定隊列的映射橄妆。你可以映射一個用戶或者一個用戶列表到隊列。語法:[u or g]:[name]:[queue_name][,next_mapping]*祈坠。這里害碾,u或者g表明這個映射是針對用戶還是租的。值u是針對用戶赦拘,g是針對組慌随。name 表示用戶名或者組名。要指定提交應(yīng)用程序的用戶躺同,可以用%user表示阁猜。queue_name表示應(yīng)用程序映射的隊列的名稱。要指定隊列名稱與用戶名稱相同蹋艺,可以用%user表示剃袍。要指定隊列名稱與用戶所屬的首要組名相同,可以用%primary_group表示捎谨。

?yarn.scheduler.capacity.queue-mappings-override.enable ?本人true 這個功能用于指定是否用戶指定的隊列可以被覆蓋民效。這是布爾值,默認(rèn)為false涛救。

?yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DominantResourceCalculator ?資源計算器畏邢。資源計算的實現(xiàn)用于在調(diào)度器中比較資源。默認(rèn)如org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator只使用內(nèi)存检吆,然而DominantResourceCalculator 用主導(dǎo)資源比較多維度資源舒萎,例如內(nèi)存,CPU等等咧栗。值為java類名


4.3.5 配置生效

修改隊列屬性逆甜、添加新隊列是非常簡單的虱肄。你需要編輯conf/capacity-scheduler.xml 并運行 yarn rmadmin -refreshQueues

$ vi $HADOOP_CONF_DIR/capacity-scheduler.xml

$ $HADOOP_YARN_HOME/bin/yarn rmadmin -refreshQueues

yarn rmadmin -refreshQueues使變更生效

備注:隊列不能刪除致板,只支持隊列的新增——更新隊列配置應(yīng)該是一個有效值,例如隊列容量在每一個層級應(yīng)該等于100%咏窿。

4.3.6 application 如何指定 node label

1) mapreduce ?

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.4.jar wordcount -D mapreduce.job.node-label-expression="fastcpu" -D mapreduce.job.queuename="etl-ywpt" /hadoop-hadoop-namenode-container-192-168-200-140.log /output

2) spark

./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster --driver-memory 3g --executor-memory 2g --conf spark.yarn.am.nodeLabelExpression=fastcpu --conf spark.yarn.executor.nodeLabelExpression=fastcpu jars/spark-examples.jar 10


5:?Fair Scheduler

5.1?Fair Scheduler介紹

??公平調(diào)度器FairScheduler基于內(nèi)存來安排公平調(diào)度策略斟或。不像Hadoop的默認(rèn)調(diào)度器,它只將任務(wù)構(gòu)造一個應(yīng)用隊列集嵌,公平調(diào)度器會在不餓死長周期作業(yè)的同時萝挤,優(yōu)先讓短周期作業(yè)先運行完成御毅。在一組用戶中共享集群也是合理的。最終怜珍,公平調(diào)度策略可以和應(yīng)用優(yōu)先級結(jié)合起來工作端蛆,優(yōu)先級是一組權(quán)重值,資源會按照這個權(quán)重比例來分配給每個應(yīng)用酥泛。

FairScheduler允許所有的應(yīng)用按照默認(rèn)配置運行今豆,同時也支持通過配置文件來限制每個用戶每個隊列的運行作業(yè)數(shù)。這對于一個用戶必須一次提交成百上千的應(yīng)用作業(yè)是有幫助的柔袁。限制運行的應(yīng)用作業(yè)數(shù)呆躲,不會導(dǎo)致任何的已提交作業(yè)失敗,只會讓這些作業(yè)在調(diào)度器隊列中等待直到某些用戶的更早的作業(yè)結(jié)束捶索。

5.2 使用Fair Scheduler

yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

5.3 配置Fair Scheduler

配置FairScheduler一般需要配置兩個文件插掂。首先調(diào)度器相關(guān)的選項可以在yarn-site.xml文件中配置。其次腥例,大多數(shù)情況下用戶希望創(chuàng)建一個分配文件來列出哪些隊列用來分配以及對應(yīng)的權(quán)重和容量辅甥。這個分配文件會每10秒鐘重新加載一次,從而支持運行時配置變更燎竖。

5.3.1 yarn-site.xml 中配置

?yarn.scheduler.fair.allocation.file ??分配文件的路徑地址肆氓。分配文件是一個XML文件來描述隊列和隊列的屬性以及特定的策略。這個文件必須是一個XML格式的文件底瓣。如果配置一個相對路徑谢揪,那么該文件會在classpath中被搜索到。默認(rèn)是

捐凭。如:?/etc/hadoop/conf/fair-scheduler.xml

yarn.scheduler.fair.user-as-default-queue?是否使用用戶名關(guān)聯(lián)分配的默認(rèn)隊列名稱拨扶,如果是false或者未設(shè)置,所有的作業(yè)都有一個共享的默認(rèn)隊列茁肠,叫做default患民。默認(rèn)是true。如果隊列分配策略在分配文件中配置過垦梆,那么這個屬性會被忽略匹颤。簡而言之就是用用戶名作為隊列。

yarn.scheduler.fair.preemption ?開啟資源搶占托猩。?默認(rèn)false印蓖。

yarn.scheduler.fair.sizebasedweight ?以作業(yè)的規(guī)模大小作為調(diào)度的權(quán)值,默認(rèn)為false京腥。在一個隊列內(nèi)部分配資源時赦肃,默認(rèn)情況下,采用公平輪詢的方法將資源分配各各個應(yīng)用程序,而該參數(shù)則提供了另外一種資源分配方式:按照應(yīng)用程序資源需求數(shù)目分配資源他宛,即需求資源數(shù)量越多船侧,分配的資源越多。默認(rèn)情況下厅各,該參數(shù)值為false镜撩。設(shè)置為true時,應(yīng)用的權(quán)重通過1+請求資源內(nèi)存大小的自然對數(shù)來計算队塘。

yarn.scheduler.fair.assignmultiple ?是否允許在一次心跳中進(jìn)行多次容器分配琐鲁。默認(rèn)是false

yarn.scheduler.fair.max.assign ?如果上個屬性設(shè)置為true,這個屬性明確一次心跳中能分配的最大的容器數(shù)人灼。默認(rèn)是-1围段,表示沒有限制。

yarn.scheduler.fair.allow-undeclared-pools?該屬性默認(rèn)是true 投放,如果設(shè)置成true奈泪,yarn將會自動創(chuàng)建任務(wù)中指定的未定義過的資源池。設(shè)置成false之后灸芳,任務(wù)中指定的未定義的資源池將無效涝桅,該任務(wù)會被分配到default資源池中。

yarn.scheduler.fair.update-interval-ms ?鎖定調(diào)度器和重新計算資源分配和需求烙样,檢查是否有搶占的時間間隔屬性冯遂。默認(rèn)是500m

yarn.scheduler.fair.locality.threshold.node 當(dāng)應(yīng)用程序請求某個節(jié)點上資源時,它可以接受的可跳過的最大資源調(diào)度機會谒获。當(dāng)按照分配策略蛤肌,可將一個節(jié)點上的資源分配給某個應(yīng)用程序時,如果該節(jié)點不是應(yīng)用程序期望的節(jié)點批狱,可選擇跳過該分配機會暫時將資源分配給其他應(yīng)用程序裸准,直到出現(xiàn)滿足該應(yīng)用程序需的節(jié)點資源出現(xiàn)。通常而言赔硫,一次心跳代表一次調(diào)度機會炒俱,而該參數(shù)則表示跳過調(diào)度機會占節(jié)點總數(shù)的比例,默認(rèn)情況下爪膊,該值為-1.0权悟,表示不跳過任何調(diào)度機會。

?yarn.scheduler.increment-allocation-mb:內(nèi)存規(guī)整化單位推盛,默認(rèn)是1024峦阁,這意味著,如果一個Container請求資源是1.5GB小槐,則將被調(diào)度器規(guī)整化為ceiling(1.5 GB / 1GB) * 1G=2GB拇派。

yarn.scheduler.increment-allocation-vcores:虛擬CPU規(guī)整化單位荷辕,默認(rèn)是1凿跳,含義與內(nèi)存規(guī)整化單位類似件豌。

5.3.2 自定義中配置fair-scheduler.xml

? ? ? demo如下:

<?xml version=”1.0″?>

<allocations>

<queue name=”root”>

<minResources>51200mb,50vcores</minResources>

<maxResources>102400mb,100vcores</maxResources>

<maxRunningApps>100</maxRunningApps>

<weight>1.0</weight>

<schedulingMode>fair</schedulingMode>

<aclSubmitApps> </aclSubmitApps>

<aclAdministerApps> </aclAdministerApps>

<queue name=”default”>

<minResources>10240mb,10vcores</minResources>

<maxResources>30720mb,30vcores</maxResources>

<maxRunningApps>100</maxRunningApps>

<schedulingMode>fair</schedulingMode>

<weight>1.0</weight>

<aclSubmitApps>*</aclSubmitApps>

</queue>

<queue name=”businessA”>

<minResources>5120mb,5vcores</minResources>

<maxResources>20480mb,20vcores</maxResources>

<maxRunningApps>100</maxRunningApps>

<schedulingMode>fair</schedulingMode>

<weight>2.0</weight>

<aclSubmitApps>businessA,lxw1234 group_businessA,group_lxw1234</aclSubmitApps>

<aclAdministerApps>businessA,hadoop group_businessA,supergroup</aclAdministerApps>

</queue>

</queue>

</allocations>

參數(shù)如下:

(1)minResources:最少資源保證量,設(shè)置格式為“X mb, Y vcores”控嗜,當(dāng)一個隊列的最少資源保證量未滿足時茧彤,它將優(yōu)先于其他同級隊列獲得資源,對于不同的調(diào)度策略(后面會詳細(xì)介紹)疆栏,最少資源保證量的含義不同曾掂,對于fair策略,則只考慮內(nèi)存資源壁顶,即如果一個隊列使用的內(nèi)存資源超過了它的最少資源量珠洗,則認(rèn)為它已得到了滿足;對于drf策略若专,則考慮主資源使用的資源量许蓖,即如果一個隊列的主資源量超過它的最少資源量,則認(rèn)為它已得到了滿足调衰。

(2)maxResources:最多可以使用的資源量膊爪,fair scheduler會保證每個隊列使用的資源量不會超過該隊列的最多可使用資源量。

(3)maxRunningApps:最多同時運行的應(yīng)用程序數(shù)目嚎莉。通過限制該數(shù)目米酬,可防止超量Map Task同時運行時產(chǎn)生的中間輸出結(jié)果撐爆磁盤。

(4)minSharePreemptionTimeout:最小共享量搶占時間趋箩。如果一個資源池在該時間內(nèi)使用的資源量一直低于最小資源量赃额,則開始搶占資源。

(5)schedulingMode/schedulingPolicy:隊列采用的調(diào)度模式叫确,可以是fifo爬早、fair或者drf。

(6)aclSubmitApps:可向隊列中提交應(yīng)用程序的Linux用戶或用戶組列表启妹,默認(rèn)情況下為“*”筛严,表示任何用戶均可以向該隊列提交應(yīng)用程序。需要注意的是饶米,該屬性具有繼承性桨啃,即子隊列的列表會繼承父隊列的列表。配置該屬性時檬输,用戶之間或用戶組之間用“照瘾,”分割,用戶和用戶組之間用空格分割丧慈,比如“user1, user2 group1,group2”析命。

(7)aclAdministerApps:該隊列的管理員列表主卫。一個隊列的管理員可管理該隊列中的資源和應(yīng)用程序,比如可殺死任意應(yīng)用程序鹃愤。

管理員也可為單個用戶添加maxRunningJobs屬性限制其最多同時運行的應(yīng)用程序數(shù)目簇搅。此外,管理員也可通過以下參數(shù)設(shè)置以上屬性的默認(rèn)值:

(1)userMaxJobsDefault:用戶的maxRunningJobs屬性的默認(rèn)值软吐。

(2)defaultMinSharePreemptionTimeout:隊列的minSharePreemptionTimeout屬性的默認(rèn)值瘩将。

(3)defaultPoolSchedulingMode:隊列的schedulingMode屬性的默認(rèn)值。

(4)fairSharePreemptionTimeout:公平共享量搶占時間凹耙。如果一個資源池在該時間內(nèi)使用資源量一直低于公平共享量的一半姿现,則開始搶占資源。


6: 延時調(diào)度

當(dāng)應(yīng)用程序請求在某個特定的節(jié)點上運行時肖抱,如果該節(jié)點剛好處于忙碌狀態(tài)無法分配給應(yīng)用备典,一種選擇方式是就近選擇同一機架中的其他節(jié)點。但是在實際中發(fā)現(xiàn)意述,稍微等一小段時間提佣,很有可能就能夠分配到指定的節(jié)點,進(jìn)而提高集群效率欲险。這個特性叫延遲調(diào)度(delay scheduling)镐依。Capacity Scheduler和FairScheduler支持這個特性。

默認(rèn)情況下天试,集群中的NodeManager每一秒中都想RM發(fā)送心跳槐壳,心跳張包含節(jié)點當(dāng)前正在運行的Container以及可用于新Container的資源。因此每次心跳都是一個調(diào)度機會(scheduling opportunity)喜每。當(dāng)啟用延遲調(diào)度時务唐,對于有節(jié)點位置要求的資源請求,調(diào)度器不會簡單地使用第一次調(diào)度機會(犧牲數(shù)據(jù)locality)带兜,而是會嘗試等待直到最大次數(shù)的調(diào)度機會枫笛,一旦發(fā)現(xiàn)符合要求的調(diào)度機會,及分配給應(yīng)用刚照。如果直到最大次數(shù)還是沒有合適的節(jié)點資源刑巧,則放寬數(shù)據(jù)locality要求,退而求其次采用同一機架无畔。

最大opportunity數(shù)的配置啊楚,在Capacity Scheduler中使用yarn.scheduler.capacity.node-locality-delay配置,取值為正整數(shù)浑彰。Fair Scheduler略有不同恭理,配置的是yarn.scheduler.fair.lcality.threshold.node屬性,例如設(shè)為0.5郭变,代表要等待集群中一半的節(jié)點發(fā)送心跳提供scheduling opportunity颜价,才決定是否放寬要求采用同一機架上的其他節(jié)點涯保。對應(yīng)的yarn.scheduler.fair.lcality.threshold.rack配置放棄同一機架要求采用不同機架上的機器之前,需要等待多少節(jié)點發(fā)送心跳周伦。

延時調(diào)度參考資料:?原文:https://blog.csdn.net/bingduanlbd/article/details/52000151


7: capacity 和 fair Sechdule 兩種區(qū)別

? ? ?7.1 ?capacity 和 fair Sechdule的區(qū)別

capacity Vs fair

兩者的調(diào)度策略不同:

參考資料:http://www.reibang.com/p/fa16d7d843af

在 Capacity Scheduler 中夕春,在比較資源占用率時,不同的資源比較器對資源定義是不一樣的横辆。默認(rèn)的是 DefaultResourceCalculator撇他,它只考慮內(nèi)存資源茄猫。另外一種是 DominantResourceCalculator狈蚤,采用了 DRF 比較算法,同時考慮內(nèi)存和 cpu 兩種資源划纽。通過參數(shù)yarn.scheduler.capacity.resource-calculator來設(shè)置脆侮。

Fair Scheduler 與 Capacity Scheduler 一樣也是依次選擇隊列、應(yīng)用勇劣,最后選擇 Container靖避,其中選擇隊列和應(yīng)用策略相同,采用了 FairShareComparator 比較器對隊列或者應(yīng)用程序進(jìn)行排序比默,然后從頭從頭開始選擇幻捏。

在介紹具體實現(xiàn)前還需介紹以下兩個定義:

最小共享量:管理員可給每個隊列配置一個最小共享量,調(diào)度器在分配資源時命咐,需要保證每個隊列中的作業(yè)至少獲取該數(shù)目的資源篡九。一個常見的應(yīng)用場景是,對產(chǎn)品隊列設(shè)置最小共享量醋奠,而測試隊列不設(shè)置榛臼,這樣,當(dāng)可用資源有限時時窜司,優(yōu)先保證產(chǎn)品隊列有資源可用沛善。

公平共享量:當(dāng)集群中存在多個隊列時,某些隊列中的資源可能用不了塞祈,這時候調(diào)度器會自動將這些隊列中剩余的資源共享給其他需要的隊列金刁,其他這些隊列獲取的共享資源多少主要由其隊列 weight決定,隊列 weight越大议薪,獲取的資源越多尤蛮。 一個隊列的最小共享量加上其獲取的共享資源數(shù)目,就是公平共享量笙蒙。

假設(shè)為 s1抵屿,s2,公平調(diào)度算法流程如下:

若 s1緊需資源(使用資源量小于最小資源保證即緊需資源)捅位,s2 緊需資源轧葛,把資源給 s1

若 s2緊需資源搂抒,s1 不緊需資源,把資源給 s2

若 s1尿扯、s2 都緊需資源求晶,把資源給 minShareRatio 更小的,minShareRatio1 = 已使用內(nèi)存/ 最小資源保證

若 s1衷笋、s2 都不緊需資源芳杏, 把資源給 useToWeightRatio 更小的, useToWeightRatio = 已使用內(nèi)存 / 權(quán)重

若 s1、s2 都不緊需資源且useToWeightRatio相同辟宗,把資源給更早啟動的

知道了比較算法爵赵,也就知道如何選出隊列和應(yīng)用程序了。選出應(yīng)用程序之后泊脐,選擇 Container 的邏輯與Capacity Scheduler 一致空幻。

7.2 ?capacity 和?fair Sechdule 搶占的區(qū)別

? ? ?capacity 和?fair Sechdule 都支持資源搶占。

? ? fair Sechdule

我們在yarn的管理頁面里面容客,經(jīng)筹躅酰可以看到隊列的Instantaneous Fair Share以及Steady Fair Share值.想要對Yarn的FairScheduler隊列資源管理、以及搶占規(guī)則有正確的理解缩挑,必須知道Yarn的Fair Share的含義

Steady FairShare是一個隊列的理想值但两,這個值是由集群資源和weigths計算出來的,并不會被經(jīng)常計算供置,只是在集群啟動或者集群的總資源發(fā)生增減的時候才會被重新計算谨湘。每個隊列的Steady FairShare的計算公式是`totalResources(集群總資源)/weights(所有隊列的weight總和)weight(某個隊列的weight)`*

Instantaneous FairShare計算集群中每個active隊列的FairShare。Steady FairShare是計算集群中所有的隊列士袄。這兩者的區(qū)別為:

空隊列也就是沒有分配任何資源的隊列不會計算Instantaneous FairShare悲关,其值為0。

如果集群中所有的隊列都是active娄柳,則Steady FairShare和Instantaneous FairShare相等寓辱。

每個隊列的Instantaneous FairShare的計算公式是`totalResources(集群總資源)/activeWeights(active隊列的weight總和)activeWeight(active隊列的weight)`*

搶占邏輯:

* 基于已經(jīng)計算好的需要搶占的資源(toPreempt()方法)進(jìn)行資源搶占。每一輪搶占赤拒,我們從root 隊列開始秫筏,

? * 一級一級往下進(jìn)行,直到我們選擇了一個候選的application.當(dāng)然挎挖,搶占分優(yōu)先級進(jìn)行这敬。

? * 依據(jù)每一個隊列的policy,搶占方式有所不同蕉朵。對于fair policy或者drf policy, 會選擇超過

? * fair share(這里的fair scheduler都是指Instantaneous Fair Share)

? * 最多的ChildSchedulable進(jìn)行搶占崔涂,但是,如果是fifo policy,則選擇最后執(zhí)行的application進(jìn)行

? * 搶占始衅。當(dāng)然冷蚂,同一個application往往含有多個container缭保,因此同一個application內(nèi)部container

? * 的搶占也分優(yōu)先級

yarn.scheduler.fair.waitTimeBeforeKill,默認(rèn)是15000ms蝙茶。等待時間超過此值時艺骂,將搶占隊列中的containerkill掉。

yarn.scheduler.fair.preemptionInterval隆夯,默認(rèn)是5000ms钳恕,兩次搶占檢查的時間間隔

7.3 ?container 被搶占kill的過程

1)為了盡可能避免資源浪費,YARN優(yōu)先選擇優(yōu)先級低的Container作為資源搶占對象蹄衷,且不會立刻殺死Container忧额,而是將釋放資源的任務(wù)留給應(yīng)用程序自己:ResourceManager將待殺死的Container列表發(fā)送給對應(yīng)的ApplicationMaster,以期望它采取一定的機制自行釋放這些Container占用的資源宦芦,比如先進(jìn)行一些狀態(tài)保存工作后宙址,再將對應(yīng)的Container殺死轴脐,以避免計算浪費调卑,如果一段時間后,ApplicationMaster尚未主動殺死這些Container大咱,則ResourceManager再強制殺死這些Container

2)NodeManager也可以在ResourceManager的指示下恬涧,殺掉Container。當(dāng)處于下面的幾種場景中時碴巾,NodeManager就可能Kill掉一個Container:

ResourceManager告訴它溯捆,Application已經(jīng)完成了

Scheduler決定搶占這個Container,并將它分配給另一個Application或者用戶

NodeManager檢測到厦瓢,這個Container使用的資源已經(jīng)超過了ContainerToken中指定的那些資源的限制

yarn.resourcemanager.scheduler.classorg.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末提揍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子煮仇,更是在濱河造成了極大的恐慌劳跃,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浙垫,死亡現(xiàn)場離奇詭異刨仑,居然都是意外死亡,警方通過查閱死者的電腦和手機夹姥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門杉武,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辙售,你說我怎么就攤上這事轻抱。” “怎么了旦部?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵祈搜,是天一觀的道長封拧。 經(jīng)常有香客問我,道長夭问,這世上最難降的妖魔是什么泽西? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮缰趋,結(jié)果婚禮上捧杉,老公的妹妹穿的比我還像新娘。我一直安慰自己秘血,他們只是感情好味抖,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著灰粮,像睡著了一般仔涩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粘舟,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天熔脂,我揣著相機與錄音,去河邊找鬼柑肴。 笑死霞揉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晰骑。 我是一名探鬼主播适秩,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼硕舆!你這毒婦竟也來了秽荞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤抚官,失蹤者是張志新(化名)和其女友劉穎扬跋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耗式,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡胁住,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了刊咳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彪见。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖娱挨,靈堂內(nèi)的尸體忽然破棺而出余指,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布酵镜,位于F島的核電站碉碉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏淮韭。R本人自食惡果不足惜垢粮,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望靠粪。 院中可真熱鬧蜡吧,春花似錦、人聲如沸占键。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畔乙。三九已至君仆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牲距,已是汗流浹背返咱。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嗅虏,地道東北人洛姑。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像皮服,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子参咙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361