目前得分布式系统中,对于资源管理都采用动态资源划分来取代静态资源划分。它有如下好处:

  1. 集群资源利用率高
  2. 增加数据共享能力,可以多种计算框架公用一份分布式存储数据。

资源管理抽象模型

概念模型

常见得资源主要是CPU,内存,网络资源,磁盘IO。主要概念模型有3类:资源组织模型,调度策略,任务组织模型。不同的资源管理平台主要就是这三点不同:

通用架构

  1. 每台节点上都会配置节点管理器,不断像资源收集器汇报本机资源使用情况,并负责容器得管理动作。
  2. 调度器,由资源收集器和调度策略两部分组成。

资源调度器设计的基本问题

资源的异质性和工作负载的异质性

  1. 资源的异质性:一般将资源划分为细粒度解决,例如:内存(天然细粒度),CPU(提出通过使用时间划分虚拟CPU)
  2. 任务的异质性:不同的任务有不同的应用场景,给任务分不同的优先级

数据的局部性

调度系统应该充分考虑数据的局部性,分为:节点局部性,机架局部性,全局局部性(这叫不局部好一些吧)

抢占调度和非抢占调度

当前资源得不到满足得情况下,是否应该考虑杀掉前面优先级低得任务。目前Yarn支持抢占式调度,Mesos支持非抢占式调度

资源分配粒度

根据任务的不同,有两种资源分配粒度:

  1. 一次性资源资源分配
  2. 增量资源分配
    • 储备资源分配:慢慢增量资源分配,直到可以达到任务启动的最低资源量

除此之外,Yarn和Mesos对于每个任务的粒度不同。Yarn的最小资源粒度为slot,里面封装了固定量的CPU和内存,Mesos的可以用户精细化地指定任务的资源粒度。

饿死或死锁

  • 饿死:如果任务长期达不到所需资源,这些资源就有可能饿死
  • 死锁:两个资源相互等待对方的资源,从而形成一种竞争,变为死锁状态。

系统中一共有10份资源

任务 需要资源 已有资源
A 6 5
B 6 5

资源隔离方案

目前的主流方案是采用Linux Container,主要依赖内核的cgroup子系统达到资源隔离。我们的系统采用的是轻量级的开源容器docker

资源调度范形

  1. 集中式调度器:既有资源调度也有任务调度
  2. 两级调度器:一级调度器负责调度资源,二级调度器根据一级调度器分配的资源负责调度任务
  3. 共享状态调度器:二级调度器可以看到集群中所有的资源,调度结束后交给一级调度器仲裁。

两级调度器主要是悲观调度策略,共享状态调度器主要是乐观调度策略

调度策略

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选择应用。每个队列都有资源最低保障和资源使用上限,当资源有剩余的时候,可以分配给其它队列使用。

公平调度器

多用户的情况下,强调用户公平地贡献资源,默认是考虑的内存公平

  1. 根据每个队列的最小资源保证量(最小共享量),将系统资源分配给队列。
  2. 根据队列的优先级,将剩余资源分配给各个队列。

公平排序法(如何选择队列和应用):

  1. 资源需求量。当前队列或者应用希望获得的资源的总量。
  2. 最小共享量。队列的最小共享量在配置中指定。应用的最小共享量为0。
  3. 资源使用量。当前队列或者应用分配到的总资源。
  4. 权值。队列的权重值在配置中指定。在开启sizebasedweight特性的情况下,应用的权重=(log2(资源需求量))优先级调整因子。优先级当前都是1,。当应用运行超过5分钟,调整因子为3。
1.计算比较体是否需要资源。即资源使用量是否小于资源需求量且小于最小共享量。
2.如果两者都需要资源,计算资源分配比=资源使用量/Min(资源需求量,最小共享量)。资源分配比较小的优先。
3.如果一个需要,一个不需要,需要的优先。
4.如果两者都不需要资源,计算使用权值比=资源使用量/权值。使用权值比较小的优先。
5.如果2或者4中的比较相同,则先提交的优先。

公平资源共享算法(资源抢占)

公平资源共享算法的目的是为了每个队列公平地使用资源,这个公平体现在每个队列得到的资源比等于他们的权值比。如果只是单纯地求一个资源权重比,可以直接相除。但是由于需要满足队列的资源分配满足最小共享量、最大资源量这些队列上下界的限制,权值资源比不能直接计算。

  1. 设置根队列的公平资源量为全局资源总和
  2. 根队列调用recomputeFairShares,计算公平资源量
    1. 计算当前队列的分配量=MIN(队列总需求,公平资源量)
    2. 计算资源权重比最大值。最大值=2*n,使得Fun(最大值)>集群资源量>Fun(最大值/2)。
    3. 计算资源权重比。采用二分法计算,二分法次数最多25次。每个队列的公平资源量=(权重*权重资源比,用最小共享量修正下界,用资源需求量修正上界)
    4. 设置每个子队列的公平资源量=资源权重比*权值。
    5. 各个子队列调用recomputeFairShares,递归计算。

DRF

保障任务主要资源的公平利用

Yarn和Mesos:资源管理调度平台的更多相关文章

  1. [BigData - Hadoop - YARN] YARN:下一代 Hadoop 计算平台

    Apache Hadoop 是最流行的大数据处理工具之一.它多年来被许多公司成功部署在生产中.尽管 Hadoop 被视为可靠的.可扩展的.富有成本效益的解决方案,但大型开发人员社区仍在不断改进它.最终 ...

  2. XLearning - 深度学习调度平台

    XLearning - 深度学习调度平台 软件简介 XLearning **** 是奇虎 360 开源的一款支持多种机器学习.深度学习框架调度系统.基于 Hadoop Yarn 完成了对TensorF ...

  3. 利用Jenkins自动部署工具间接构建kettle的调度平台

    关于Jenkins的介绍我就不说了,自己百度,因为这个工具调用脚本只是他的功能的冰山一角,其他功能我也不能理解,因为不是那个领域.        下面我就介绍一下为什么我们需要一个调度平台,以及学习完 ...

  4. 号称了解mesos双层调度的你,先来回答下面这五个问题!

    一提mesos,很多人知道双层调度,但是大多数理解都在表面,不然试一下下面五个问题. 问题一:如果有两个framework,一万个节点,按说应该平均分配给两个framework,怎么个分法?一人一台这 ...

  5. Mesos, Marathon, Docker 平台部署记录

    Mesos, Marathon, Docker 平台部署记录 所有组件部署基于Ubuntu 14.04 x64 主机 IP 角色 master 192.168.1.3 Mesos Master, Ma ...

  6. 联童科技基于incubator-dolphinscheduler从0到1构建大数据调度平台之路

    联童科技是一家智能化母婴童产业平台,从事母婴童行业以及互联网技术多年,拥有丰富的母婴门店运营和系统开发经验,在会员经营和商品经营方面,能够围绕会员需求,深入场景,更贴近合作伙伴和消费者,提供最优服务产 ...

  7. 不可不知的资源管理调度器Hadoop Yarn

    Yarn(Yet Another Resource Negotiator)是一个资源调度平台,负责为运算程序如Spark.MapReduce分配资源和调度,不参与用户程序内部工作.同样是Master/ ...

  8. Yarn 组件的指挥部 – 调度器Scheduler

    linux基础 为hadoop集群的搭建扫清了障碍,也为内存的管理,文件系统的管理扫清了障碍 接着到Hadoop的阶段,首先做集群的安装,深入到使用这两个核心的组件,分布式文件系统HDFS,解决大量数 ...

  9. YARN的三种调度器的使用

    YRAN提供了三种调度策略 一.FIFO-先进先出调度器 YRAN默认情况下使用的是该调度器,即所有的应用程序都是按照提交的顺序来执行的,这些应用程序都放在一个队列中,只有在前面的一个任务执行完成之后 ...

随机推荐

  1. (动态规划)Worm -- hdu -- 2151

    http://acm.hdu.edu.cn/showproblem.php?pid=2151 Worm Time Limit: 1000/1000 MS (Java/Others)    Memory ...

  2. ScheduledExecutorService的使用

    http://407827531.iteye.com/blog/1329597 ScheduledExecutorService接口 在ExecutorService的基础上,ScheduledExe ...

  3. 马士兵hibernate(原始笔记)

    马士兵hibernate(原始笔记) 课程内容 1        HelloWorld a)   Xml b)   annotation 2        Hibernate原理模拟 - 什么是O/R ...

  4. AngularJs 指令中 的Scope属性

    一.概念说明 可以是true. false .哈希对象 {} 1.true 新创建了一个作用域,且继承了父作用域:在初始化的时候,用了父作用域的属性和方法去填充我们这个新的作用域.它和父作用域不是同一 ...

  5. A - Playground

    My kid's school cleared a large field on their property recently to convert it into a playing area.  ...

  6. 关于QT和SQLite以及XML

    就关于qt连接使用sqlite折腾了一晚上.倒也不全是因为数据库连接的问题, 主要还是数据格式各自出问题. 原来的数据库是access, 为了导入linux下的sqlite, 我把其输出格式改成了xm ...

  7. BZOJ百题版切计划(不咕)

    传送门 BZOJ 前言 听说最近要省选,那么我就写一下吧.QwQ! 1000 过于简单,不写了. 1001 不会对偶图,直接优化最小割 题解 1002 高精度套公式计算 题解 (Code by hey ...

  8. dapper视频

    dapper是dotnet下的一种小巧快捷的ORM框架,本视频主要讲解了dapper的多库使用,以及常见的操作,如:对象查询.多集合查询,关联查询等,添加.修改.删除等. 视频地址:https://w ...

  9. Pyhon 中文编码问题(字符串前加‘U’)

    中文编码问题是用中文的程序员经常头大的问题,在python下也是如此,那么应该怎么理解和解决python的编码问题呢? 我们要知道python内部使用的是unicode编码,而外部却要面对千奇百怪的各 ...

  10. Python-flask跨站请求伪造和跨站请求保护的实现

    图中 Browse 是浏览器,WebServerA 是受信任网站/被攻击网站 A,WebServerB 是恶意网站/点击网站 B. (1) 一开始用户打开浏览器,访问受信任网站 A,输入用户名和密码登 ...