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

  • 相关阅读:
    学习《Building Applications with FME Objects》 之十 使用集合
    oracle左右连接的另外表示方法
    拥抱SQLAlchemy 之二 拉拉手,我请你去看电影~
    Oracle中的Union、Union All、Intersect、Minus
    System.Data.SQLite测试
    SmartSVN + google code
    学习《Building Applications with FME Objects》 之九 高级要素处理
    Django静态文件配置备忘录
    测试oracle with as
    测量坐标系中单个多边形面积解析法计算的程序源代码
  • 原文地址:https://www.cnblogs.com/bianqi/p/12183601.html
Copyright © 2011-2022 走看看