YARN中的任务队列调度器-公平调度器(Fair Scheduler)
一、概述
公平调度器可以为所有的应用“平均公平”分配资源,当然,这种“公平”是可以配置的,称为权重,可以在分配文件中为每一个队列设置分配资源的权重,如果没有设置,默认是1(由于默认权重相同,因此,在不做配置的情况下,作业(队列)之间的资源占比相同)。
默认地,所有的应用程序在一段时间内平均获得相等的资源份额;
默认地,公平调度程序仅基于内存调度公平决策,当然,这种策略也是支持配置的。
其策略如下图所示:
紫色区域代表任务A, 绿色区域代表任务B,当只有一个应用程序(A)在运行时,该应用程序将使用整个集群的资源(0 ~ t1时间段)。当提交其他应用程序时(t1时刻),A释放的资源被分配给新应用程序,因此每个应用程序最终得到的资源大致相同(在默认情况下)。当任务B执行完后(t2时刻),B所占用的资源又会被A使用,此后A又将完全占用集群资源直至任务结束。
相比较容量调度器,公平调度器并不会为某个队列预留资源,调度器会在所有正在运行的作业之间动态平衡集群资源。公平调度器的这种机制不光实现应用之间的公平分配资源,也可以实现在多队列之间,因为公平调度器也支持多层级队列。但是公平规则只限于同级队列。例如:默认配置下,队列A、B,A启动一个作业,此时A占用100%资源,过一段时间,B队列启动一个作业b1,而后A、B将平分资源,各占50%,如果此时B队列又启动了一个作业b2,那么b1、b2将各占队列B的50%资源,即a1作业占系统资源的50%,b1、b2各占系统资源的25%。
二、配置
1. 指定调度器
位置:$HADOOP_HOME/etc/hadoop/yarn-site.xml
添加配置:
key: yarn.resourcemanager.scheduler.class
value: org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
2. 定义分配文件
位置:$HADOOP_HOME/etc/hadoop/fair-scheduler.xml
队列结构:
(root)
--general
--dev
--mr
--azkaban
队列元素使用<queue/>来定义,权重使用其子元素<weight/>定义,上面的结构在配置文件中如下:
<queue name="general"><weight>2</weight><schedulingPolicy>fifo</schedulingPolicy></queue><queue name="dev"><weight>8</weight><queue name="mr"></queue><queue name="azkaban"></queue><schedulingPolicy>drf</schedulingPolicy></queue>
该配置文件中,队列general占用资源权重20%,dev队列占用权重80%,也就是说,如果集群资源分配比例是1:4,那么此时就认为是公平的。对于dev的子队列mr和azkaban,由于没有分配权重,因此默认都是1,也就是说,mr和azkaban队列平分dev的资源。
每个队列可以拥有自己的调度策略,可选值又fifo、fair(默认)、drf,可以使用<queue/>的子元素<schedulingPolicy/>定义。
和容量调度器相同,公平调度器也可以配置最大(<queue/>子元素<maxResources/>)、最小资源(<queue/>子元素<minResources/>)以及最大可运行应用数量(<queue/>子元素<maxRunningApps/>),其中最小资源可以确保特定用户、群组或生产应用程序总能获取到足够的资源时是很有用的。当一个资源池包含作业时,它至少能获取到它的最小共享资源,但是当资源池不完全需要它所拥有的保证共享资源时,额外的部分会在其它资源池间进行切分(摘自 hadoop2配置公平调度器)。
配置好后,进入YARN的控制台,如图所示:
三、队列放置
不同于容量调度器,公平调度器设计了一个基于规则的系统来为作业分配调度队列,它内置了一套规则可以插拔式的配置。定义分配规则使用<queuePlacementPolicy/>标签,具体条件使用<rule/>定义,例如:
<queuePlacementPolicy><rule name="specified" create="false"></rule><rule name="primaryGroup" create="false"></rule><rule name="user" create="false"></rule><rule name="default" queue="general"></rule></queuePlacementPolicy>
我们可以将<rule>视为web中的过滤器,当对作业进行分配的时候,系统会从上到下一次匹配,例如上面的配置,specified表示在提交作业的时候指定了队列,primaryGroup指的是用户所在unix用户组(组名)的队列,user值得是用户名为命名的队列,default规则是兜底规则,若以上都不匹配,则放到general队列。
create属性指定是,若匹配到已经存在的队列,则将作业放到改队列,若匹配不到已经存在的队列,则根据create来选择是否创建队列,默认值是true。例如,若<rule name="user" create=true/>,此时用户user1提交作业,调度器就会寻找是否又名字为user1的队列,若没有,就会创建名字为user1的队列,并将这个作业放到该队列中。
若不显示地配置<queuePlacementPolicy/>,则调度器将使用如下默认的配置:
<queuePlacementPolicy><rule name="specified"></rule><rule name="user"></rule></queuePlacementPolicy>
也就是说,除非显示地指明所用队列,否则按照提交作业的用户名为名加入队列中。
四、抢占
与容量调度器不通,公平调度器拥有抢占机制。当提交一个作业的时候,如果资源紧张,则作业会等待其他作业资源释放后再执行,这个等待时间可以使用抢占功能进行控制。
抢占指的是,调度器允许终止哪些占用资源高于公平状态下应分配的资源,从而释放资源给哪些占用资源小于公平状态下应分配资源的作业。
1. 开启抢占模式:
yarn.scheduler.fair.preemption=true
2. 抢占机制主要设置:
最小共享:指的是在这个时间内,没有获得设置的最小资源值,则会抢占其他容器资源。
配置:
方式1:顶层元素<defaultMinSharePreemptionTimeout/>,单位秒,可以为所有队列设置。
方式2:<queue/>子元素<minSharePreemptionTimeout>,单位秒,单独为某个队列设置。
显而易见,该种方式需要队列的最小资源设置配合。
公平共享:指的是在这个时间内,没有获得公平状态下的资源值的一半,则抢占其他容器资源。
配置:
方式1:顶层元素<defaultFairSharePreemptionTimeout/>,单位秒,可以为所有队列设置。
方式2:<queue/>子元素<fairSharePreemptionTimeout>,单位秒,单独为某个队列设置。
需要注意的是,抢占功能本身虽然会减少作业执行的延迟时间,但是会降低整个集群的效率,因为被抢占的作业会终止运行,最终会重新开始执行。
五、总结
公平调度器实现了较高的集群利用率,同时保证小作业能即使完成。
YARN中的任务队列调度器-公平调度器(Fair Scheduler)相关推荐
- 在C#中引入延迟计算和公平调度
目录 介绍 延迟计算 公平调度 公平线程池 下载源代码 - 9.3 KB 介绍 本文简要介绍了C中的延迟计算和公平调度的概念. 延迟计算 延迟计算(懒惰计算)是一种计算策略,它将表达式的计算延迟到需要 ...
- YARN中的任务队列调度器-容量调度器(Capacity Scheduler)
一.概述 容量调度器是YARN提供的三种调度器中的一种,这种调度器允许多个组织(队列)共享一个Hadoop集群,每个组织(队列)所分配的集群资源是固定的且可配置的.每个组织(队列)内部还可以进一步划分 ...
- CDH Yarn资源动态分配 - 指定资源限制 公平调度具体设置
日常工作中会涉及到各种资源分配等问题,跨部门,跨业务等等,这里介绍基于CDH版本的Yarn 公平调度(实际使用DRF调度) 不同时间配置不同资源参考(计划模式):https://datamining. ...
- 别被官方文档迷惑了!这篇文章帮你详解yarn公平调度
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由@edwinhzhang发表于云+社区专栏 FairScheduler是yarn常用的调度器,但是仅仅参考官方文档,有很多参数和概念文 ...
- 【Linux 内核】CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )
文章目录 一.CFS 调度器概念 ( 完全公平调度器 ) 二.CFS 调度器虚拟时钟概念 ( Virtual Runtime ) 三.进程优先级 ( 调度优先级 | 静态优先级 | 正常优先级 | 实 ...
- 大数据之-Hadoop3.x_Yarn_公平调度器---大数据之hadoop3.x工作笔记0146
然后我们再来看公平调度器,公平调度器是facebook开发的一个调度器, 上面的容量调度器是雅虎开发的对吧. 然后我们看看公平调度器的特点,可以看到,它要做到的就是公平,他也可以有多个队列,但是同一个 ...
- 【Linux 内核】CFS 调度器 ⑤ ( CFS 调度器类 fair_sched_class 源码 | next 赋值 | enqueue_task 赋值 | dequeue_task 赋值 )
文章目录 一.调度器类 sched_class 简介 二.CFS 调度器类源码 三.next 赋值 四.enqueue_task 赋值 五.dequeue_task 赋值 一.调度器类 sched_c ...
- Linux---进程调度及CFS调度器
Linux的调度算法 (1)O(N)调度器 O(N)调度器发布于1992年,从就绪队列中比较所有进程的优先级,然后选择一个最高优先级的进程作为下一个调度进程. 优点:操作简单,便于理解. 缺点:时间消 ...
- 【Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )
文章目录 一.调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 ) 二. 实时调度类 rt_sched_class 源码 一.调度类 ( 停机调度类 | 限期调度 ...
最新文章
- 首发|机器学习未来十年:你需要把握的趋势和热点
- python检索地址_35.leetcode题目讲解(Python): 搜索插入位置
- Windows驱动开发-_驱动对象学习和内核处理字符串初步
- 关于保存到session里的信息
- vim之terminal之窗口大小命令
- 百度音乐接口使用示例
- 服务器端大文件如何传给客户端,客户端往服务器传文件
- 一定要好好学习C语言
- mysql redo原子写_InnoDB如何保证redolog的完整性?
- 和合符放枕头下的作用_深度解析:记忆棉枕头好,还是乳胶枕头好?
- ubuntu搭建php开发环境记录
- Vue.js 2.5 发布,而这个会玩的团队已经自研出用 Vue 开发小程序的框架了
- java基础--接口
- Java新手编程入门
- 关于桌面运维工程师的错题本(前言)
- python删除word表格中的某一行_python读取word 中指定位置的表格及表格数据
- 2017年6月英语 CET 四六级考试查询准考证方法
- J-Link 下载程序 接线图
- 计算机图形学 绘制正四面体
- vscode 设置用户代码片段(怎么用命令式快速生成一段代码)