zoukankan      html  css  js  c++  java
  • YARN基于IO资源的隔离调度

    前言


    众所周知,目前YARN所支持的资源类型主要有2两大类:内存和CPU.但是其实对于操作系统层面,还有一个重要的资源是没有被YARN考虑在内的,就是IO资源,这里的IO资源你可以理解为比如说存储空间的容量,但是它其实也可以有其它的含义。目前YARN这种不考虑IO资源状况的调度方式,会造成有些container会消耗大量的IO资源,尽管可能他们只用了一点点的,内存和CPU资源。所以把IO资源也作为YARN调度的一个需求条件之一,是一个大有好处并且有其使用场景的功能点。

    IO资源的概述


    刚刚在上文已经提过了,这里的IO资源并不仅仅是指磁盘容量空间,它还可以是一种别的能力,比如说iops(每秒io次数),带宽等等。只是说,为了方便理解,我们暂且以磁盘空间作为一个节点IO资源的表示,磁盘空间越多,代表其所能处理的io次数也自然比较多。

    YARN基于IO资源的调度和隔离


    这里我们主要关注2点:

    • 一个是IO资源的调度,这个调度关注的点主要是防止io资源的过度分配,导致过载的问题。
    • 还有一个是IO隔离的问题。类似于CPU使用的隔离,我们同样要保证一定的IO资源使用隔离,防止不同用户应用的相互干扰。

    IO资源的调度


    IO资源的调度在YARN层面,我们想让IO也作为其中的一个判断条件,就要把它也作为一个资源field,比如我们这里用vdisk来表示需要的IO资源,vdisk越大,表示需要的IO资源越多,新的资源请求实例对象定义如下:

    message ResourceProto {
      optional int32 memory = 1;
      optional int32 virtual_cores = 2;
      optional int32 vdisks = 3;
    }

    就是说在ResourceManager在分配container的时候,还需要带上vdisk资源的请求判断,这里每个节点的vdisk资源可以以2倍于实际磁盘数的标准来配置,逻辑上的含义即为IO处理能力的一种抽象。

    IO资源的隔离


    类似于Cgroup下的CPU隔离,我们在系统IO层面也可以做类似的进程间的隔离。这里会用到Cgroup下的blkio子系统,它可以用来做这方面的控制隔离。

    blkio子系统的IO隔离目前有2种方式:

    • 第一种,基于权重值设置的CFQ(完全公平调度算法)。每个进程会按照规定比例权重允许执行相应的IO操作数量。
    • 第二种,IO上限值的操作控制,这里不仅仅可以是IO的操作数,还可以是带宽流量的限制。

    这里的IO隔离,主要指以上提到的2点。而对于具体采用哪种方式,我们可以通过在YARN内设置不同的隔离类来使用。

    不过目前基于IO资源的调度方面,并没有在社区完全被实现,不过这个功能的可用性和实施使用这块还是有其实际的使用用途的,感兴趣的同学可以前往YARN-2139.

    参考资料


    [1].https://issues.apache.org/jira/browse/YARN-2139. Support for Disk as a Resource in YARN

  • 相关阅读:
    Vue 学习笔记之 —— 组件(踩了个坑)
    Vue 学习笔记之 —— 表单输入绑定
    js cookie
    python中线程、进程和协程的区别
    设计模式
    Mysql从入门到精通整理
    如何处理缓存失效、缓存穿透、缓存并发等问题
    mysql 查询当天、本周,本月,上一个月的数据
    Mysql分表和分区的区别、分库分表介绍与区别(转)
    mysql数据库死锁的产生原因及解决办法
  • 原文地址:https://www.cnblogs.com/bianqi/p/12183600.html
Copyright © 2011-2022 走看看