yarn fair-scheduler 公平调度的一个实例
2018-01-30 21:42
281 查看
某个集群需求
通过yarn将集群资源设置为A,B两个队列, A队列设置占用资源70%主要用来运行常规的定时任务,B队列设置占用资源30%主要运行临时任务,两个队列间可相互资源共享,假如A队列资源占满,B队列资源比较充裕,A队列可以使用B队列的资源,使总体做到资源利用最大化采取措施
经过调研,yarn的调度有多种方式,参考这篇文章: http://blog.csdn.net/suifeng3051/article/details/49508261使用Capacity Scheduler,Fair Scheduler 均可实现此需求。 但是最终还是参考某个公司的集群设置,使用了Fair Scheduler。
使用yarn的公平调度方式, 设置A,B两个队列, weight权重比为3:7, 但是A队列设置的最大资源是总体yarn资源的百分之30, B队列设置的最大资源是yarn资源的百分之90. 这样,当如果两个队列都满负荷运行时, A队列占百分之30, B队列占百分之70的资源。 如果只运行A队列,那么A队列最大只能占yarn总体资源的30%, 如果只运行B队列,B队列最大只能占总体的90%
这样设置是有原因的,首先是满足了我们的需求,其次拥有预留空间和最大限制,可以尽快的启动一个程序,可以参考:http://blog.cloudera.com/blog/2016/06/untangling-apache-hadoop-yarn-part-4-fair-scheduler-queue-basics/
最终我设置的如下,经过测试,这个测试集群可用,并且能应用于某个大型集群
下面是测试集群的相关功能
设置方法如下
yarn-site中设置使用公平调度<property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value> <description>In case you do not want to use the default scheduler</description> </property>
$HADOOP_HOME/etc/hadoop 下创建fair-scheduler.xml文件
下面是参考某个测试集群的例子
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <allocations> <defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy> <queue name="root"> <queue name="default"> <aclAdministerApps>*</aclAdministerApps> <aclSubmitApps>*</aclSubmitApps> <maxResources>92160 mb,26 vcores</maxResources> <maxRunningApps>100</maxRunningApps> <minResources>10240 mb,11vcores</minResources> <minSharePreemptionTimeout>1000</minSharePreemptionTimeout> <schedulingPolicy>fair</schedulingPolicy> <weight>3</weight> </queue> <queue name="queue1"> <aclAdministerApps>*</aclAdministerApps> <aclSubmitApps>*</aclSubmitApps> <maxResources>276480 mb,81vcores</maxResources> <maxRunningApps>500</maxRunningApps> <minResources>10240 mb, 11vcores</minResources> <minSharePreemptionTimeout>1000</minSharePreemptionTimeout> <schedulingPolicy>fair</schedulingPolicy> <weight>7</weight> </queue> </queue> <queuePlacementPolicy> <rule create="false" name="specified"/> <rule create="true" name="default"/> </queuePlacementPolicy> </allocations>
主要参数的含义
defaultQueueSchedulingPolicy 队列的默认调度策略, 我们设置为fair
这里设置了两个队列, root.default, root.queue1
aclAdministerApps 和 aclSubmitApps 一些ACL权限,我没有仔细研究,设置成*所有用户可用即可(如果需要配置部分用户可用,我没有深入研究)
maxResources 这个队列最大不能超过的资源数,这是程序运行必须会满足的条件, 例如我们这里,root.default设置的是总资源的30% 也就是92160MB, root.queue1设置的是总资源的90%, 也就是276480
minResource 队列申请时的最小资源数,一般看情况设置,可以设置成maxResource的百分之10
minSharePreemptionTimeout 指定的时间内未获得最小的资源保障,调度器就会抢占containers, 我们设置成1000 ms
schedulingPolicy 调度策略 fair
weight 我们设置的是3:7, 那么如果两个队列都满负荷运行,那么各自将按照3:7的方式来均分yarn的全部资源
queuePlacementPolicy 设置规则, 例如下面的两个规则, 说明如果是用户使用一个其他的队列名,我们不会创建新的队列, 然后走下一个规则,, 这两条规则合在一起就是说 如果用户使用一个其他的队列名,那么都会按照root.default的队列方式运行
相关文章推荐
- 任务调度框架Quartz(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail
- 基于yarn的公平调度实例
- (转)Java任务调度框架Quartz入门教程指南(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail
- Hadoop的默认调度器JobQueueTaskScheduler的一个Map Task Pending问题
- 一个实例说明Tp,Fp,Fn,Tn,mAP
- 每天一个JavaScript实例-提取所有链接并添加到页面末尾列表
- 如何让应用程序只有一个实例
- SpringMVC4+thymeleaf3的一个简单实例(篇一:基本环境)
- 一个简单的MyBatis程序实例
- Quartz.NET是一个开源的作业调度框架(转自张善友博客)
- oracle 的判断函数 计算函数 等函数的一个 实例sql语句
- shared_ptr和weak_ptr智能指针结合使用的一个实例
- [转载]再来一个较详细的排序算法及代码实例
- 以Point类为基础,定义一个平面中的Circle类: 1、编写一个无参的构造函数; 2、编写一个有参的构造函数; 3、在主函数中调用无参的构造函数生成圆的实例c1,调用有参的构造函数生成圆的实例c2
- Log4j2介绍和特性实例(二)--一个实例和初学注意事项(configuration标签中的 status 和 monitorInterval)
- [OpenCV新手向]一个OpenCV颜色空间转化的实例
- 一个简单实例的LR分析过程
- TaskScheduler一个.NET版任务调度器
- Nodejs 一个简单的后台实例
- 修改数据库的物理文件名称,当一个实例下要部署相同数据库时有用