(136)生產(chǎn)環(huán)境多隊(duì)列創(chuàng)建&好處
生產(chǎn)環(huán)境下怎么創(chuàng)建隊(duì)列?
- 調(diào)度器默認(rèn)只會(huì)開(kāi)一個(gè)default隊(duì)列,這個(gè)肯定是不滿足生產(chǎn)要求的;
- 可以按照框架來(lái)劃分隊(duì)列。比如說(shuō)hive/spark/flink的任務(wù)分別放在不同的隊(duì)列里,不過(guò)這么做的效率不高,企業(yè)用的不是很多。
- 按照業(yè)務(wù)模塊來(lái)劃分隊(duì)列。比如說(shuō)登錄注冊(cè)的業(yè)務(wù),單獨(dú)一個(gè)隊(duì)列,購(gòu)物車(chē)單獨(dú)一個(gè)隊(duì)列,下單功能單獨(dú)一個(gè)隊(duì)列,等等;
創(chuàng)建多隊(duì)列的好處?
- 擔(dān)心單一程序耗盡集群所有資源;
- 實(shí)現(xiàn)任務(wù)的降級(jí)使用。特殊時(shí)期可以保證重要的隊(duì)列資源更充足。比如說(shuō)雙十一的時(shí)候,就給下單的那個(gè)隊(duì)列,多補(bǔ)充資源。
降級(jí)怎么理解呢,就是隊(duì)列之間區(qū)分優(yōu)先級(jí),資源的分配是按照隊(duì)列所屬的業(yè)務(wù)的優(yōu)先級(jí)來(lái)進(jìn)行的。
(137)容量調(diào)度器多隊(duì)列提交案例
僅做了解。
需求1:default隊(duì)列占總內(nèi)存的40%,最大資源容量占總資源60%,hive隊(duì)列占總內(nèi)存的60%,最大資源容量占總資源80%。
需求2:配置隊(duì)列優(yōu)先級(jí)。
如何創(chuàng)建多個(gè)隊(duì)列
接下來(lái)就需要在capacity-scheduler.xml中配置容量調(diào)度器的各項(xiàng)參數(shù)。直接抄教程的示例了:
<!-- 指定多隊(duì)列,增加hive隊(duì)列 -->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,hive</value>
<description>
The queues at the this level (root is the root queue).
</description>
</property>
<!-- 降低default隊(duì)列資源額定容量為40%,默認(rèn)100% -->
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>40</value>
</property>
<!-- 降低default隊(duì)列資源最大容量為60%,默認(rèn)100% -->
<property>
<name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
<value>60</value>
</property>
(2)為新加隊(duì)列添加必要屬性:
<!-- 指定hive隊(duì)列的資源額定容量 -->
<property>
<name>yarn.scheduler.capacity.root.hive.capacity</name>
<value>60</value>
</property>
<!-- 用戶最多可以使用隊(duì)列多少資源,1表示 -->
<property>
<name>yarn.scheduler.capacity.root.hive.user-limit-factor</name>
<value>1</value>
</property>
<!-- 指定hive隊(duì)列的資源最大容量 -->
<property>
<name>yarn.scheduler.capacity.root.hive.maximum-capacity</name>
<value>80</value>
</property>
<!-- 啟動(dòng)hive隊(duì)列 -->
<property>
<name>yarn.scheduler.capacity.root.hive.state</name>
<value>RUNNING</value>
</property>
<!-- 哪些用戶有權(quán)向隊(duì)列提交作業(yè) -->
<property>
<name>yarn.scheduler.capacity.root.hive.acl_submit_applications</name>
<value>*</value>
</property>
<!-- 哪些用戶有權(quán)操作隊(duì)列,管理員權(quán)限(查看/殺死) -->
<property>
<name>yarn.scheduler.capacity.root.hive.acl_administer_queue</name>
<value>*</value>
</property>
<!-- 哪些用戶有權(quán)配置提交任務(wù)優(yōu)先級(jí) -->
<property>
<name>yarn.scheduler.capacity.root.hive.acl_application_max_priority</name>
<value>*</value>
</property>
<!-- 任務(wù)的超時(shí)時(shí)間設(shè)置:yarn application -appId appId -updateLifetime Timeout
參考資料:https://blog.cloudera.com/enforcing-application-lifetime-slas-yarn/ -->
<!-- 如果application指定了超時(shí)時(shí)間,則提交到該隊(duì)列的application能夠指定的最大超時(shí)時(shí)間不能超過(guò)該值。
-->
<property>
<name>yarn.scheduler.capacity.root.hive.maximum-application-lifetime</name>
<value>-1</value>
</property>
<!-- 如果application沒(méi)指定超時(shí)時(shí)間,則用default-application-lifetime作為默認(rèn)值 -->
<property>
<name>yarn.scheduler.capacity.root.hive.default-application-lifetime</name>
<value>-1</value>
</property>
如果任務(wù)超過(guò)了設(shè)定的超時(shí)時(shí)間,那么到時(shí)候就會(huì)被直接殺死,-1表示不設(shè)置。
參數(shù)設(shè)置完成后,重啟yarn,或者是執(zhí)行yarn rmadmin -refreshQueues
刷新隊(duì)列配置。就可以看到兩條隊(duì)列了。
如何向指定隊(duì)列提交任務(wù)
那如何向指定隊(duì)列提交任務(wù)呢?
以向hive隊(duì)列提交任務(wù)為例,就是執(zhí)行
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -D mapreduce.job.queuename=hive /input /output
就是加入了-D
參數(shù),指定了隊(duì)列名。
如果不指定隊(duì)列名的話,默認(rèn)是都提交到default隊(duì)列。
除了上述方式之外,也可以在jar包代碼里寫(xiě)死要提交的隊(duì)列名,如:
public class WcDrvier {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
Configuration conf = new Configuration();
conf.set("mapreduce.job.queuename","hive");
//1. 獲取一個(gè)Job實(shí)例
Job job = Job.getInstance(conf);
。。。 。。。
//6. 提交Job
boolean b = job.waitForCompletion(true);
System.exit(b ? 0 : 1);
}
}
這樣,這個(gè)任務(wù)在提交的時(shí)候,就會(huì)直接提交到hive隊(duì)列。
(138)容量調(diào)度器任務(wù)優(yōu)先級(jí)
資源緊張的時(shí)候,高優(yōu)先級(jí)的任務(wù)將先獲取到資源。
默認(rèn)情況下,Yarn將所有任務(wù)的優(yōu)先級(jí)限制為0,如果想使用任務(wù)的優(yōu)先級(jí)功能,則需要做一些設(shè)置。
首先修改yarn-site.xml文件,增加以下參數(shù):
<property>
<name>yarn.cluster.max-application-priority</name>
<value>5</value>
</property>
分發(fā)配置,并重啟Yarn:
[atguigu@hadoop102 hadoop]$ xsync yarn-site.xml
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
然后通過(guò)連續(xù)提交下面任務(wù),來(lái)模擬資源緊張的環(huán)境:
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 5 2000000
再次提交高優(yōu)先級(jí)任務(wù):
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi -D mapreduce.job.priority=5 5 2000000
通過(guò)-D
設(shè)置了新提交的任務(wù)優(yōu)先級(jí)是5,高于當(dāng)前在運(yùn)行的所有任務(wù),這個(gè)任務(wù)馬上就獲取到了資源:
上面的例子是在任務(wù)提交時(shí)設(shè)置任務(wù)的優(yōu)先級(jí),也可以通過(guò)以下命令修改正在執(zhí)行的任務(wù)的優(yōu)先級(jí):
yarn application -appID <ApplicationID> -updatePriority 優(yōu)先級(jí)
(139)公平調(diào)度器案例
公平調(diào)度器,中大型公司主要使用的。
需求:在默認(rèn)的default隊(duì)列基礎(chǔ)之上,再創(chuàng)建兩個(gè)隊(duì)列,分別是test和atguigu(以用戶所屬組命名)。期望實(shí)現(xiàn)下面效果:
- 提交任務(wù)時(shí)若指定隊(duì)列,則提交至指定隊(duì)列運(yùn)行;
- 提交任務(wù)時(shí)未指定隊(duì)列,test用戶提交的任務(wù)到test隊(duì)列運(yùn)行,atguigu用戶提交的任務(wù)到atguigu隊(duì)列運(yùn)行
公平調(diào)度器的配置涉及到兩個(gè)文件,一個(gè)是yarn-site.xml,另一個(gè)是公平調(diào)度器隊(duì)列分配文件fair-scheduler.xml(文件名可自定義)。
(1)配置文件參考資料:
https://hadoop.apache.org/docs/r3.1.3/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
(2)任務(wù)隊(duì)列放置規(guī)則參考資料:
https://blog.cloudera.com/untangling-apache-hadoop-yarn-part-4-fair-scheduler-queue-basics/
修改yarn-site.xml文件,如下:
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
<description>配置使用公平調(diào)度器</description>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/opt/module/hadoop-3.1.3/etc/hadoop/fair-scheduler.xml</value>
<description>指明公平調(diào)度器隊(duì)列分配配置文件</description>
</property>
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>false</value>
<description>禁止隊(duì)列間資源搶占</description>
</property>
"禁止隊(duì)列間資源搶占"這個(gè)功能就是之前提到過(guò)的,不同隊(duì)列間的資源借調(diào),這里是直接關(guān)掉了。
創(chuàng)建并配置fair-scheduler.xml:
<?xml version="1.0"?>
<allocations>
<!-- 單個(gè)隊(duì)列中Application Master占用整個(gè)隊(duì)列資源的最大比例,取值0-1 ,企業(yè)一般配置0.1 ,-->
<queueMaxAMShareDefault>0.5</queueMaxAMShareDefault>
<!-- 單個(gè)隊(duì)列最大資源的默認(rèn)值 test atguigu default -->
<queueMaxResourcesDefault>4096mb,4vcores</queueMaxResourcesDefault>
<!-- 增加一個(gè)隊(duì)列test -->
<queue name="test">
<!-- 隊(duì)列最小資源 -->
<minResources>2048mb,2vcores</minResources>
<!-- 隊(duì)列最大資源 -->
<maxResources>4096mb,4vcores</maxResources>
<!-- 隊(duì)列中最多同時(shí)運(yùn)行的應(yīng)用數(shù),默認(rèn)50,根據(jù)線程數(shù)配置 -->
<maxRunningApps>4</maxRunningApps>
<!-- 隊(duì)列中Application Master占用資源的最大比例 -->
<maxAMShare>0.5</maxAMShare>
<!-- 該隊(duì)列資源權(quán)重,默認(rèn)值為1.0 -->
<weight>1.0</weight>
<!-- 隊(duì)列內(nèi)部的資源分配策略 -->
<schedulingPolicy>fair</schedulingPolicy>
</queue>
<!-- 增加一個(gè)隊(duì)列atguigu -->
<queue name="atguigu" type="parent">
<!-- 隊(duì)列最小資源 -->
<minResources>2048mb,2vcores</minResources>
<!-- 隊(duì)列最大資源 -->
<maxResources>4096mb,4vcores</maxResources>
<!-- 隊(duì)列中最多同時(shí)運(yùn)行的應(yīng)用數(shù),默認(rèn)50,根據(jù)線程數(shù)配置 -->
<maxRunningApps>4</maxRunningApps>
<!-- 隊(duì)列中Application Master占用資源的最大比例 -->
<maxAMShare>0.5</maxAMShare>
<!-- 該隊(duì)列資源權(quán)重,默認(rèn)值為1.0 -->
<weight>1.0</weight>
<!-- 隊(duì)列內(nèi)部的資源分配策略 -->
<schedulingPolicy>fair</schedulingPolicy>
</queue>
<!-- 任務(wù)隊(duì)列分配策略,可配置多層規(guī)則,從第一個(gè)規(guī)則開(kāi)始匹配,直到匹配成功 -->
<queuePlacementPolicy>
<!-- 提交任務(wù)時(shí)指定隊(duì)列,如未指定提交隊(duì)列,則繼續(xù)匹配下一個(gè)規(guī)則; false表示:如果指定隊(duì)列不存在,不允許自動(dòng)創(chuàng)建-->
<rule name="specified" create="false"/>
<!-- 提交到root.group.username隊(duì)列,若root.group不存在,不允許自動(dòng)創(chuàng)建;若root.group.user不存在,允許自動(dòng)創(chuàng)建 -->
<rule name="nestedUserQueue" create="true">
<rule name="primaryGroup" create="false"/>
</rule>
<!-- 最后一個(gè)規(guī)則必須為reject或者default。Reject表示拒絕創(chuàng)建提交失敗,default表示把任務(wù)提交到default隊(duì)列 -->
<rule name="reject" />
</queuePlacementPolicy>
</allocations>
接著分發(fā)配置并重啟yarn:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-781947.html
[atguigu@hadoop102 hadoop]$ xsync yarn-site.xml
[atguigu@hadoop102 hadoop]$ xsync fair-scheduler.xml
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
接下來(lái)可以測(cè)試提交任務(wù),就不介紹了。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-781947.html
參考文獻(xiàn)
- 【尚硅谷大數(shù)據(jù)Hadoop教程,hadoop3.x搭建到集群調(diào)優(yōu),百萬(wàn)播放】
到了這里,關(guān)于Hadoop3教程(二十五):Yarn的多隊(duì)列調(diào)度器使用案例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!