目錄
-
隊列比例
root
├── prod 生產環境 40 %
└── dev 開發環境 60 %
├── mapreduce MR開發 50%
└── spark Spark開發 50%
-
修改capacity-scheduler.xml配置文件
<configuration>
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>prod,dev</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.queues</name>
<value>mapreduce,spark</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>
<property>
<name>yarn.scheduler.capacity.root.dev.mapreduce.capacity</name>
<value>50</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.dev.spark.capacity</name>
<value>50</value>
</property>
</configuration>
我們可以看到,dev隊列又被分成了mapreduce和spark兩個相同容量的子隊列。dev的maximum-capacity屬性被設置成了75%,所以即使prod隊列完全空閒dev也不會佔用全部集羣資源,也就是說,prod隊列仍有25%的可用資源用來應急。我們注意到,mapreduce和spark兩個隊列沒有設置maximum-capacity屬性,也就是說mapreduce或spark隊列中的job可能會用到整個dev隊列的所有資源(最多爲集羣的75%)。而類似的,prod由於沒有設置maximum-capacity屬性,它有可能會佔用集羣全部資源。
關於隊列的設置,這取決於我們具體的應用。比如,在MapReduce中,我們可以通過mapreduce.job.queuename屬性指定要用的隊列。如果隊列不存在,我們在提交任務時就會收到錯誤。如果我們沒有定義任何隊列,所有的應用將會放在一個default隊列中。
注意:對於Capacity調度器,我們的隊列名必須是隊列樹中的最後一部分,如果我們使用隊列樹則不會被識別。比如,在上面配置中,我們使用prod和mapreduce作爲隊列名是可以的,但是如果我們用root.dev.mapreduce或者dev. mapreduce是無效的。
-
將新的配置同步到集羣所有節點,重啓Yarn
同步:
scp capacity-scheduler.xml node02:$PWD
scp capacity-scheduler.xml node03:$PWD
重啓Yarn:
stop-yarn.sh
start-yarn.sh
-
提交任務
通過以下命令指定任務提交到的對列:
mapreduce.job.queuename=對列名
mapreduce.job.queuename=mapreduce
提交:
hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar pi -D mapreduce.job.queuename=mapreduce 10 10
-
查看任務
http://192.168.100.201:8088/cluster/scheduler
-
yarn-site.xml
<!-- 如果提交一個任務沒有到任何的隊列,是否允許創建一個新的隊列,默認爲true -->
<property>
<name>yarn.scheduler.fair.allow-undeclared-pools</name>
<value>true</value>
</property>
<!—是否提交到默認隊列 ,以用戶名爲默認對列 -->
<property>
<name>yarn.scheduler.fair.user-as-default-queue</name>
<value>true</value>
</property>