版权声明:本套技术专栏是做者(秦凯新)平时工做的总结和升华,经过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,若有任何技术交流,可随时联系。html
不够用时最多抢占其余队列的应用只有一个 node
Fair调度器的设计目标是为全部的应用分配公平的资源(对公平的定义能够经过参数来设置)。在上面的“Yarn调度器对比图”展现了一个队列中两个应用的公平调度;固然,公平调度在也能够在多个队列间工做。举个例子,假设有两个用户A和B,他们分别拥有一个队列。当A启动一个job而B没有任务时,A会得到所有集群资源;当B启动一个job后,A的job会继续运行,不过一下子以后两个任务会各自得到一半的集群资源。若是此时B再启动第二个job而且其它job还在运行,则它将会和B的第一个job共享B这个队列的资源,也就是B的两个job会用于四分之一的集群资源,而A的job仍然用于集群一半的资源,结果就是资源最终在两个用户之间平等的共享。shell
Fair Scheduler容许用户将队列信息专门放到一个配置文件(默认是fair-scheduler.xml),对于每一个队列,管理员可配置如下express
以最大资源申请1 apache
以最大资源申请2(原先任务不会作资源释放)app
几个选项:less
(1) minResources :最少资源保证量,设置格式为“X mb, Y vcores”,当一个队列的最少资源保证量未知足时,它将优先于其余同级队列得到资源,对于不一样的调度策略,最少资源保证量的含义不一样,对于fair策略,则只考虑内存资源,即若是一个队列使用的内存资源超过了它的最少资源量,则认为它已获得了知足;对于drf策略,则考虑主资源使用的资源量,即若是一个队列的主资源量超过它的最少资源量,则认为它已获得了知足。
(2) maxResources:最多可使用的资源量,fair scheduler会保证每一个队列使用的资源量不会超过该队列的最多可以使用资源量。
(3) maxRunningApps:最多同时运行的应用程序数目。经过限制该数目,可防止超量Map Task同时运行时产生的中间输出结果撑爆磁盘。
(4) minSharePreemptionTimeout:最小共享量抢占时间。若是一个资源池在该时间内使用的资源量一直低于最小资源量,则开始抢占资源。
(5) schedulingMode/schedulingPolicy:队列采用的调度模式,能够是fifo、fair或者drf。
(6) aclSubmitApps:可向队列中提交应用程序的Linux用户或用户组列表,默认状况下为“*”,表示任何用户都可以向该队列提交应用程序。须要注意的是,该属性具备继承性,即子队列的列表会继承父队列的列表。配置该属性时,用户之间或用户组之间用“,”分割,用户和用户组之间用空格分割,好比“user1, user2 group1,group2”。
(7) aclAdministerApps:该队列的管理员列表。一个队列的管理员可管理该队列中的资源和应用程序,好比可杀死任意应用程序。管理员也可为单个用户添加maxRunningJobs属性限制其最多同时运行的应用程序数目。此外,管理员也可经过如下参数设置以上属性的默认值:
(8) userMaxJobsDefault:用户的maxRunningJobs属性的默认值。
(9) defaultMinSharePreemptionTimeout :队列的minSharePreemptionTimeout属性的默认值。
(10) defaultPoolSchedulingMode:队列的schedulingMode属性的默认值。
(11) fairSharePreemptionTimeout:公平共享量抢占时间。若是一个资源池在该时间内使用资源量一直低于公平共享量的一半,则开始抢占资源。
复制代码
<?xml version="1.0"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/usr/local/soft/cdh_support/hadoop-2.6.0-cdh5.9.3/etc/hadoop/fair-scheduler.xml</value>
</property>
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
<property>
<name>yarn.scheduler.fair.user-as-default-queue</name>
<value>false</value>
<description>default is True</description>
</property>
<property>
<name>yarn.scheduler.fair.allow-undeclared-pools</name>
<value>false</value>
<description>default is True</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.shuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>Master:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>Master:8050</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>30720</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>30</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>10</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>30</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>1</value>
</property>
<property>
   <name>hadoop.proxyuser.admin.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.admin.groups</name>
    <value>*</value>
</property>
</configuration>
复制代码
总资源为60G内存,60个核数oop
<?xml version="1.0"?>
<allocations>
<queue name="root">
<minResources>1024mb,2vcores</minResources>
<maxResources>30920mb,30vcores</maxResources>
<maxRunningApps>50</maxRunningApps>
<weight>2.0</weight>
<schedulingMode>fair</schedulingMode>
<aclSubmitApps> </aclSubmitApps>
<aclAdministerApps> </aclAdministerApps>
<queue name="queue1">
<minResources>1024mb,2vcores</minResources>
<maxResources>10240mb,10vcores</maxResources>
<maxRunningApps>50</maxRunningApps>
<weight>2.0</weight>
<schedulingMode>fair</schedulingMode>
<aclAdministerApps>admin</aclAdministerApps>
<aclSubmitApps>admin</aclSubmitApps>
</queue>
<queue name="queue2">
<minResources>1024mb,2vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>50</maxRunningApps>
<weight>2.0</weight>
<schedulingMode>fair</schedulingMode>
<aclAdministerApps>admin</aclAdministerApps>
<aclSubmitApps>admin</aclSubmitApps>
</queue>
</queue>
</allocations>
复制代码
资源申请(默认超出队列的任务只能有一个能够向外队列去借用资源)测试
spark-shell --master yarn --executor-memory 1024m --num-executors 4 --executor-cores 1 --queue queue2
spark-shell --master yarn --executor-memory 1024m --num-executors 4 --executor-cores 1 --queue queue2
spark-shell --master yarn --executor-memory 1024m --num-executors 3 --executor-cores 4 --queue queue2
spark-shell --master yarn --executor-memory 1024m --num-executors 3 --executor-cores 4 --queue queue2
复制代码
资源申请一览ui
经过上面那幅图,咱们已经知道一个job可能使用不了整个队列的资源。然而若是这个队列中运行多个job,若是这个队列的资源够用,那么就分配给这些job,若是这个队列的资源不够用了呢?其实Capacity调度器仍可能分配额外的资源给这个队列,这就是“弹性队列”(queue elasticity)的概念。
在正常的操做中,Capacity调度器不会强制释放Container,当一个队列资源不够用时,这个队列只能得到其它队列释放后的Container资源。固然,咱们能够为队列设置一个最大资源使用量,以避免这个队列过多的占用空闲资源,致使其它队列没法使用这些空闲资源,这就是”弹性队列”须要权衡的地方
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/usr/local/soft/cdh_support/hadoop-2.6.0-cdh5.9.3/etc/hadoop/capacity-scheduler.xml</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.shuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>Master:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>Master:8050</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>30720</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>30</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>10</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>10</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>1</value>
</property>
<property>
   <name>hadoop.proxyuser.admin.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.admin.groups</name>
    <value>*</value>
</property>
</configuration>
复制代码
详细配置
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/usr/local/soft/cdh_support/hadoop-2.6.0-cdh5.9.3/etc/hadoop/capacity-scheduler.xml</value>
</property>
复制代码
案例测试
spark-shell --master yarn --executor-memory 1024m --num-executors 3 --executor-cores 4 --queue yq
复制代码
版权声明:本套技术专栏是做者(秦凯新)平时工做的总结和升华,经过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,若有任何技术交流,可随时联系。
参考文档
http://www.cnblogs.com/xiaodf/p/6266201.html
https://blog.csdn.net/qq_36753550/article/details/83065546
https://blog.csdn.net/dxl342/article/details/52840455
http://www.cnblogs.com/xiaodf/p/6266201.html
复制代码
版权声明:本套技术专栏是做者(秦凯新)平时工做的总结和升华,经过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,若有任何技术交流,可随时联系。
秦凯新 于深圳