Yarn和Mesos:资源管理调度平台
目前得分布式系统中,对于资源管理都采用动态资源划分来取代静态资源划分。它有如下好处:
- 集群资源利用率高
 - 增加数据共享能力,可以多种计算框架公用一份分布式存储数据。
 
资源管理抽象模型
概念模型
常见得资源主要是CPU,内存,网络资源,磁盘IO。主要概念模型有3类:资源组织模型,调度策略,任务组织模型。不同的资源管理平台主要就是这三点不同:

通用架构

- 每台节点上都会配置节点管理器,不断像资源收集器汇报本机资源使用情况,并负责容器得管理动作。
 - 调度器,由资源收集器和调度策略两部分组成。
 
资源调度器设计的基本问题
资源的异质性和工作负载的异质性
- 资源的异质性:一般将资源划分为细粒度解决,例如:内存(天然细粒度),CPU(提出通过使用时间划分虚拟CPU)
 - 任务的异质性:不同的任务有不同的应用场景,给任务分不同的优先级
 
数据的局部性
调度系统应该充分考虑数据的局部性,分为:节点局部性,机架局部性,全局局部性(这叫不局部好一些吧)
抢占调度和非抢占调度
当前资源得不到满足得情况下,是否应该考虑杀掉前面优先级低得任务。目前Yarn支持抢占式调度,Mesos支持非抢占式调度
资源分配粒度
根据任务的不同,有两种资源分配粒度:
- 一次性资源资源分配
 - 增量资源分配
- 储备资源分配:慢慢增量资源分配,直到可以达到任务启动的最低资源量
 
 
除此之外,Yarn和Mesos对于每个任务的粒度不同。Yarn的最小资源粒度为slot,里面封装了固定量的CPU和内存,Mesos的可以用户精细化地指定任务的资源粒度。
饿死或死锁
- 饿死:如果任务长期达不到所需资源,这些资源就有可能饿死
 - 死锁:两个资源相互等待对方的资源,从而形成一种竞争,变为死锁状态。
 
系统中一共有10份资源
| 任务 | 需要资源 | 已有资源 | 
|---|---|---|
| A | 6 | 5 | 
| B | 6 | 5 | 
资源隔离方案
目前的主流方案是采用Linux Container,主要依赖内核的cgroup子系统达到资源隔离。我们的系统采用的是轻量级的开源容器docker
资源调度范形
- 集中式调度器:既有资源调度也有任务调度
 - 两级调度器:一级调度器负责调度资源,二级调度器根据一级调度器分配的资源负责调度任务
 - 共享状态调度器:二级调度器可以看到集群中所有的资源,调度结束后交给一级调度器仲裁。
 
两级调度器主要是悲观调度策略,共享状态调度器主要是乐观调度策略
调度策略
Yarn的资源调度器
无论FifoScheduler,CapacityScheduler和FairScheduler的核心资源分配模型都是一样的。
调度器维护一群队列的信息。用户可以向一个或者多个队列提交应用。调度器,根据一定的规则选择一个队列,再在队列上选择一个应用,尝试在这个应用上分配资源。不过,因为一些参数限制了分配失败,就会继续选择下一个应用。在选择了一个应用之后,这个应用对应也会有很多的资源申请的请求。调度器会优先匹配本地资源是申请请求,其次是同机架的,最后的任意机器的。
所以,不同的调度器就是在回答如何选择一个队列,如何选择一个应用的问题。
三种调度器的对比:
FIFO
作业按照提交时间或则优先级放入队列中,资源调度的时候按照先后顺序进行调度。这种调度模型过于简单,用户过多的时候容易出现长时间等待调度的情况。
容量调度器
多用户的情况下,最大化集群的吞吐和利用率
Capacity调度器说的通俗点,可以理解成一个个的资源队列。这个资源队列是用户自己去分配的。比如我大体上把整个集群分成了AB两个队列,A队列给A项目组的人来使用。B队列给B项目组来使用。但是A项目组下面又有两个方向,那么还可以继续分,比如专门做BI的和做实时分析的。那么队列的分配就可以参考下面的树形结构:
root
------a[60%]
      |---a.bi[40%]
      |---a.realtime[60%]
------b[40%]
a队列占用整个资源的60%,b队列占用整个资源的40%。a队列里面又分了两个子队列,一样也是2:3分配。
虽然有了这样的资源分配,但是并不是说a提交了任务,它就只能使用60%的资源,那40%就空闲着。只要资源实在空闲状态,那么a就可以使用100%的资源。但是一旦b提交了任务,a就需要在释放资源后,把资源还给b队列,直到ab平衡在3:2的比例。
粗粒度上资源是按照上面的方式进行,在每个队列的内部,还是按照FIFO的原则来分配资源的。
选择资源使用量最小的队列,然后队列内部通过FIFO选择应用。每个队列都有资源最低保障和资源使用上限,当资源有剩余的时候,可以分配给其它队列使用。
公平调度器
多用户的情况下,强调用户公平地贡献资源,默认是考虑的内存公平
- 根据每个队列的最小资源保证量(最小共享量),将系统资源分配给队列。
 - 根据队列的优先级,将剩余资源分配给各个队列。
 
公平排序法(如何选择队列和应用):
- 资源需求量。当前队列或者应用希望获得的资源的总量。
 - 最小共享量。队列的最小共享量在配置中指定。应用的最小共享量为0。
 - 资源使用量。当前队列或者应用分配到的总资源。
 - 权值。队列的权重值在配置中指定。在开启sizebasedweight特性的情况下,应用的权重=(log2(资源需求量))优先级调整因子。优先级当前都是1,。当应用运行超过5分钟,调整因子为3。
 
1.计算比较体是否需要资源。即资源使用量是否小于资源需求量且小于最小共享量。
2.如果两者都需要资源,计算资源分配比=资源使用量/Min(资源需求量,最小共享量)。资源分配比较小的优先。
3.如果一个需要,一个不需要,需要的优先。
4.如果两者都不需要资源,计算使用权值比=资源使用量/权值。使用权值比较小的优先。
5.如果2或者4中的比较相同,则先提交的优先。
公平资源共享算法(资源抢占)
公平资源共享算法的目的是为了每个队列公平地使用资源,这个公平体现在每个队列得到的资源比等于他们的权值比。如果只是单纯地求一个资源权重比,可以直接相除。但是由于需要满足队列的资源分配满足最小共享量、最大资源量这些队列上下界的限制,权值资源比不能直接计算。
- 设置根队列的公平资源量为全局资源总和
 - 根队列调用recomputeFairShares,计算公平资源量
- 计算当前队列的分配量=MIN(队列总需求,公平资源量)
 - 计算资源权重比最大值。最大值=2*n,使得Fun(最大值)>集群资源量>Fun(最大值/2)。
 - 计算资源权重比。采用二分法计算,二分法次数最多25次。每个队列的公平资源量=(权重*权重资源比,用最小共享量修正下界,用资源需求量修正上界)
 - 设置每个子队列的公平资源量=资源权重比*权值。
 - 各个子队列调用recomputeFairShares,递归计算。
 
 
DRF
保障任务主要资源的公平利用
Yarn和Mesos:资源管理调度平台的更多相关文章
- [BigData - Hadoop - YARN] YARN:下一代 Hadoop 计算平台
		
Apache Hadoop 是最流行的大数据处理工具之一.它多年来被许多公司成功部署在生产中.尽管 Hadoop 被视为可靠的.可扩展的.富有成本效益的解决方案,但大型开发人员社区仍在不断改进它.最终 ...
 - XLearning - 深度学习调度平台
		
XLearning - 深度学习调度平台 软件简介 XLearning **** 是奇虎 360 开源的一款支持多种机器学习.深度学习框架调度系统.基于 Hadoop Yarn 完成了对TensorF ...
 - 利用Jenkins自动部署工具间接构建kettle的调度平台
		
关于Jenkins的介绍我就不说了,自己百度,因为这个工具调用脚本只是他的功能的冰山一角,其他功能我也不能理解,因为不是那个领域. 下面我就介绍一下为什么我们需要一个调度平台,以及学习完 ...
 - 号称了解mesos双层调度的你,先来回答下面这五个问题!
		
一提mesos,很多人知道双层调度,但是大多数理解都在表面,不然试一下下面五个问题. 问题一:如果有两个framework,一万个节点,按说应该平均分配给两个framework,怎么个分法?一人一台这 ...
 - Mesos, Marathon, Docker 平台部署记录
		
Mesos, Marathon, Docker 平台部署记录 所有组件部署基于Ubuntu 14.04 x64 主机 IP 角色 master 192.168.1.3 Mesos Master, Ma ...
 - 联童科技基于incubator-dolphinscheduler从0到1构建大数据调度平台之路
		
联童科技是一家智能化母婴童产业平台,从事母婴童行业以及互联网技术多年,拥有丰富的母婴门店运营和系统开发经验,在会员经营和商品经营方面,能够围绕会员需求,深入场景,更贴近合作伙伴和消费者,提供最优服务产 ...
 - 不可不知的资源管理调度器Hadoop Yarn
		
Yarn(Yet Another Resource Negotiator)是一个资源调度平台,负责为运算程序如Spark.MapReduce分配资源和调度,不参与用户程序内部工作.同样是Master/ ...
 - Yarn 组件的指挥部 – 调度器Scheduler
		
linux基础 为hadoop集群的搭建扫清了障碍,也为内存的管理,文件系统的管理扫清了障碍 接着到Hadoop的阶段,首先做集群的安装,深入到使用这两个核心的组件,分布式文件系统HDFS,解决大量数 ...
 - YARN的三种调度器的使用
		
YRAN提供了三种调度策略 一.FIFO-先进先出调度器 YRAN默认情况下使用的是该调度器,即所有的应用程序都是按照提交的顺序来执行的,这些应用程序都放在一个队列中,只有在前面的一个任务执行完成之后 ...
 
随机推荐
- (记忆化搜索)数塔 (zznu 1271)
			
http://acm.zznu.edu.cn/problem.php?id=1271 1271: 数塔 时间限制: 1 Sec 内存限制: 128 MB提交: 109 解决: 78[提交][状态] ...
 - noip第3课作业
			
1. 求最大值 [问题描述] 输入三个数a,b,c,输出三个整数中的最大值 [样例输入] 10 20 30 [样例输出] 30 #include <iostream> using n ...
 - Hive ORC + SNAPPY
			
Hive orc 格式 + snappy 压缩是比较常用的存储加压缩格式. 今天处理下面的场景时,解决了一些问题,记录下来: flume消费kafka的数据实时写入hdfs,通过创建分区表,t + 1 ...
 - 加密算法比较3DES AES RSA ECC MD5 SHA1等
			
加 密算法通常分为对称性加密算法和非对称性加密算法,对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了.非对称算法与之不同,发送双方A,B事先均 ...
 - 右键在目录当前打开命令行cmd窗口
			
Win7系统大家习惯“Win+R”的组合键打开命令提示符. 方法/步骤2 通常情况下,我们点击鼠标右键是没有命令行选项的. 方法/步骤3 在桌面上先按住Shift键,然后鼠标右键,出现选项“在此处打开 ...
 - [Proposal]Tank Battle——Infinite
			
Tank Battle——Infinite 把经典的坦克大战扩展到一个“无限”大的2D地图上.支持“全世界”的玩家同时在线玩. 游戏模式当然要做成全新的.增加玩家之间的交互,但又不较强的依赖于实时的通 ...
 - 统计--VARCHAR与NVARCHAR在统计预估上的区别
			
最近遇到一个问题,当查询使用到模糊查询时,由于预估返回行数过高,执行计划认为索引查找+Key Lookup的成本过高,因此采用Clustered Index Scan的方式,消耗大量逻辑IO,执行计划 ...
 - SQL SERVER的锁机制(一)——概述(锁的种类与范围)
			
锁定:通俗的讲就是加锁.锁定是 Microsoft SQL Server 数据库引擎用来同步多个用户同时对同一个数据块的访问的一种机制. 定义:当有事务操作时,数据库引擎会要求不同类型的锁定,如相关数 ...
 - KMP字符串匹配  简单理解
			
http://www.cnblogs.com/c-cloud/p/3224788.html 字符串匹配,长串长度为m,子串长度为n 则,暴力破解的复杂度为o(m*n) 如果用kmp匹配,则复杂度为o( ...
 - 预处理命令使用详解----#if、#endif、#undef、#ifdef、#else、#elif
			
预处理命令 在接触#if.#undef这类预处理指令前,大部分都都接触过#define.#include等预处理命令,通俗来讲预处理命令的作用就是在编译和链接之前,对源文件进行一些文本方面的操作,比如 ...