YARN中FIFO、Capacity以及Fari调度器的详细介绍
(1)FIFO Scheduler
将所有的Applications放到队列中,先按照作业的优先级高低、再按照到达时间的先后,为每个app分配资源。如果第一个app需要的资源被满足了,如果还剩下了资源并且满足第二个app需要的资源,那么就为第二个app分配资源,and so on。
优点:简单,不需要配置。
缺点:不适合共享集群。如果有大的app需要很多资源,那么其他app可能会一直等待。
一个例子
上图的示例:有一个很大的job1,它先提交,并且占据了全部的资源。那么job2提交时发现没有资源了,则job2必须等待job1执行结束,才能获得资源执行。
配置
FIFO Scheduler不需要配置
(2)Capacity Scheduler
CapacityScheduler用于一个集群(集群被多个组织共享)中运行多个Application的情况,目标是最大化吞吐量和集群利用率。
CapacityScheduler允许将整个集群的资源分成多个部分,每个组织使用其中的一部分,即每个组织有一个专门的队列,每个组织的队列还可以进一步划分成层次结构(Hierarchical Queues),从而允许组织内部的不同用户组的使用。
每个队列内部,按照FIFO的方式调度Applications。当某个队列的资源空闲时,可以将它的剩余资源共享给其他队列。
if there is more than one job in the queue and there are idle resources available, then the Capacity Scheduler may allocate the spare resources to jobs in the queue, even if that causes the queue’s capacity to be exceeded This behavior is known as queue elasticity.
配置
CapacityScheduler的配置文件etc/hadoop/capacity-scheduler.xml
说明:root队列下面有两个队列,分别为prod(40%的容量,即使用40%的集群资源)和dev(60%的容量,最大的75% -> 说明即使prod队列空闲了,那么dev最多只能使用75%的集群资源。这样就可以保证prod中添加新的apps时马上可以使用25%的资源)。
除了队列的容量和层次,还可以指定单个用户或者应用被分配的资源大小、同时可以运行的app数量、队列的ACLs。
可以指定app要放在哪个队列中。如果不指定,app将会被放在名字是 default的队列中。
CapacityScheduler的队列名字必须是层次结构最后的名字,比如eng。不能是root.dev.eng或者dev.eng。
一个例子
上图的示例:有一个专门的队列允许小的apps提交之后能够尽快执行,注意到job1先提交,先执行时并没有占用系统的全部资源(假如job1需要100G内存,但是整个集群只有100G内存,那么只分配给job1 80G),而是保留了一部分的系统资源。
(3)Fair Scheduler
FairScheduler允许应用在一个集群中公平地共享资源。默认情况下FairScheduler的公平调度只基于内存,也可以配置成基于memory and CPU。当集群中只有一个app时,它独占集群资源。当有新的app提交时,空闲的资源被新的app使用,这样最终每个app就会得到大约相同的资源。可以为不同的app设置优先级,决定每个app占用的资源百分比。FairScheduler可以让短的作业在合理的时间内完成,而不必一直等待长作业的完成。
Fair Sharing: Scheduler将apps组织成queues,将资源在这些queues之间公平分配。默认情况下,所有的apps都加入到名字为“default“的队列中。app也可以指定要加入哪个队列中。队列内部的默认调度策略是基于内存的共享策略,也可以配置成FIFO和multi-resource with Dominant Resource Fairness
Minimum Sharing:FairScheduller提供公平共享,还允许指定minimum shares to queues,从而保证所有的用户以及Apps都能得到足够的资源。如果有的app用不了指定的minimum的资源,那么可以将超出的资源分给别的app使用。
FairScheduler默认让所有的apps都运行,但是也可以通过配置文件小智每个用户以及每个queue运行的apps的数量。这是针对一个用户一次提交hundreds of apps产生大量中间结果数据或者大量的context-switching的情况。
一个例子
示例1:大的任务job1提交并执行,占用了集群的全部资源,开始执行。之后小的job2执行时,获得系统一半的资源,开始执行。因此每个job可以公平地使用系统的资源。当job2执行完毕,并且集群中没有其他的job加入时,job1又可以获得全部的资源继续执行。
注意:job2提交之后并不能马上就获取到集群一半的资源,因为job2必须等待job1释放containers。
一个例子
示例2:两个用户A和B。A提交job1时集群内没有正在运行的app,因此job1独占集群中的资源。用户B的job2提交时,job2在job1释放一半的containers之后,开始执行。job2还没执行完的时候,用户B提交了job3,job2释放它占用的一半containers之后,job3获得资源开始执行。
配置:
使用FairScheduler需要修改yarn-size.xml文件,创建allocation file,列出存在的队列和各自的 weights and capacities
prod和dev的权重也可以设置成2和3。
dev下的两个sub-queue没有指定权重,则为1:1。
在设置权重时,需要考虑default queue和用户命名的queue的权重,这些没有在xml文件中指定,但是它们的权重都是1.
队列还可以被配置minimum maximum Resources以及可以运行的最大的apps的数量
FairScheduler支持preemption(抢占),当queue占用的资源大于它应得的,那么调度器可以杀掉queue对应的containers,将yarn.scheduler.fair.preemption设置成true即可。
FairScheduler和CapacityScheduler的异同
相同:
(1)以队列划分资源
(2)设定最低保证和最大使用上限
(3)在某个队列空闲时可以将资源共享给其他队列。
不同:
(1)Fair Scheduler队列内部支持多种调度策略,包括FIFO、Fair(队列中的N个作业,每个获得该队列1 / N的资源)、DRF(Dominant Resource Fairness)(多种资源类型e.g. CPU,内存 的公平资源分配策略)
(2)Fair Scheduler支持资源抢占。当队列中有新的应用提交时,系统调度器理应为它回收资源,但是考虑到共享的资源正在进行计算,所以调度器采用先等待再强制回收的策略,即等待一段时间后入股仍没有获得资源,那么从使用共享资源的队列中杀死一部分任务
(3)Fair Scheduler中有一个基于任务数量的负载均衡机制,该机制尽可能将系统中的任务分配到各个节点
(4)Fair Scheduler可以为每个队列单独设置调度策略(FIFO Fair DRF)
(5)Fair Scheduler由于可以采用Fair算法,因此可以使得小应用快速获得资源,避免了饿死的情况。
Hierarchical queues with pluggable policies
FairScheduler支持层次队列(hierarchical queues),所有队列都从root队列开始,root队列的孩子队列公平地共享可用的资源。孩子队列再把可用资源公平地分配给他们的孩子队列。apps可能只会在叶子队列被调度。此外,用户可以为每个队列设置不同的共享资源的策略,内置的队列策略包括 FifoPolicy, FairSharePolicy (default), and DominantResourceFairnessPolicy。
用户可以通过继承org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.SchedulingPolicy实现自己定义的策略。
(4)Delay Scheduling&Dominant Resource Fairness
CapacityScheduler和FairScheduler都支持Delay Scheduling和DRF
不同的apps对CPU和内存的需求量不一样,有的可能需要大量的CPU和一点点内存,有的可能正相反。这会使调度变得复杂。YARN解决的方法是Dominant Resource Fairness,即看app主要需要的资源是什么,用它作为该app对集群使用的度量。
参考:
(1)《Hadoop The Definitive Guide 4th》
(2)官方文档
http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html
http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
YARN中FIFO、Capacity以及Fari调度器的详细介绍的更多相关文章
- yarn的学习之2-容量调度器和预订系统
本文翻译自 http://hadoop.apache.org/docs/r2.8.0/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html 和http ...
- 二 Capacity Scheduler 计算能力调度器
官网的写的太难懂,参考:http://www.360doc.com/content/14/0603/14/14935022_383254798.shtml Capacity Scheduler 一种可 ...
- golang中GPM模型原理与调度器设计策略
一.GMP模型原理first: 1. 全局队列:存放待运行的G2. P的本地队列:同全局队列类似,存放待运行的G,存储的数量有限:256个,当创建新的G'时,G'优先加入到P的本地队列,如果队列已满, ...
- Linux IO调度器相关算法介绍(转)
IO调度器(IO Scheduler)是操作系统用来决定块设备上IO操作提交顺序的方法.存在的目的有两个,一是提高IO吞吐量,二是降低IO响应时间.然而IO吞吐量和IO响应时间往往是矛盾的,为了尽量平 ...
- 网卡配置和DNS配置,手动挂在nas存储的共享目录,网络相关其它操作命令,修改防火墙中的端口配置,resolv.conf配置详细介绍和网卡信息配置详细介绍
1. 网卡配置和DNS配置 若想服务器能够发邮件,需要让部署的服务器能够访问到外网环境.若部署的服务器访问不到外网,通过ping www.baidu.com的方式执行的时候,会出现以下问题: &q ...
- 大数据调度工具oozie详细介绍
背景 之前项目中的sqoop等离线数据迁移job都是利用shell脚本通过crontab进行定时执行,这样实现的话比较简单,但是随着多个job复杂度的提升,无论是协调工作还是任务监控都变得麻烦,我们选 ...
- 『动善时』JMeter基础 — 20、JMeter配置元件【HTTP Cookie管理器】详细介绍
目录 1.HTTP Cookie管理器介绍 2.HTTP Cookie管理器界面详解 3.JMeter中对Cookie的管理 (1)Cookie的存储 (2)Cookie的管理策略 4.补充:Cook ...
- CSS中 Padding和Margin两个属性的详细介绍和举例说明
代码示例: <!doctype html> <html lang="en"> <head> <meta charset="UTF ...
- java中的IO处理和使用,API详细介绍(二)
字符流 [向文件中写入数据] 现在我们使用字符流 /** * 字符流 * 写入数据 * */ import java.io.*; class hello{ public static void mai ...
随机推荐
- c++ --> union介绍
union介绍 共用体,也叫联合体,在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目 ...
- 第一次使用github、git工具,本地仓库、远程仓库使用
一次使用git,记录下使用过程...可能还有很多东西可能还没理解,后期理解了再写吧 git是什么.,百度的回答: 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 使用过程一直在百度 ...
- ORACLE 监听
今天来学习一下监听的相关内容,昨晚被老大问了两个关于监听很简单的问题,但是却吞吞吐吐回答,而且有一个问题还答错了,刚刚查了下资料,才发现"驴头对了马嘴",哭笑不得. 一.监听(li ...
- 程序员的入门 简单的编程HelloWord
那么在上一章章节 http://www.cnblogs.com/Goraidh/p/8674329.html 我们简单的俩了解了一下什么是java和配置编写java的环境,本章呢我们学习如何编写一个简 ...
- 网络工具nslookup的使用
根据域名查询ip 如下所示: bogon:~ hhh$ nslookup www.baidu.com. Server: 192.168.1.254. #默认的DNS服务器 Address: . #ip ...
- centos 7.0远程登录
http://blog.csdn.net/e1219092641/article/details/79586476 linux在虚拟机上操作也是有许多不便之处的,但是远程登录的使用可以使操作简单不少, ...
- Java HashMap工作原理及实现
Java HashMap工作原理及实现 2016/03/20 | 分类: 基础技术 | 0 条评论 | 标签: HASHMAP 分享到:3 原文出处: Yikun 1. 概述 从本文你可以学习到: 什 ...
- 关于java中的数组
前言:最近刚刚看完了<Java编程思想>中关于数组的一章,所有关于Java数组的知识,应该算是了解的差不多了.在此再梳理一遍,以便以后遇到模糊的知识,方便查阅. Java中持有对象的方式, ...
- SourceTree 实现 git flow 流程
为什么使用 git 和 git flow,这篇文章 深入理解学习Git工作流 的内容相信能够给你一个完整的答案. 我们以使用SVN的工作流来使用git有什么不妥? git 方便的branch在哪里,团 ...
- 关于移动web教程免费发布
各位老铁大家好,最近经历了太多太多,精力一直不能集中做自己愿意做的事情. 移动Web课程一开始设置收费10块,其实本意是让大家感觉有支出,就会相对珍惜好好学习,但是发现收费把大部分人挡在门外,现在恢复 ...