zoukankan      html  css  js  c++  java
  • Hadoop YARN主资源调度算法

    来源:《Hadoop技术内幕: 深入解析YARN架构设计与实现原理》 (董西成) 第6章 资源调度器

    为了支持多维资源调度,YARN资源调度器采用了主资源公平调度算法(Dominant Resource Fairness,DRF),该算法扩展了最大最小公平(max-min fairness)算法,使其能够支持多维资源的调度。由于DRF被证明非常适合应用于多资源和复杂需求的环境中,因此被越来越多的系统采用,包括Apache Mesos。
    在DRF算法中,将所需份额(资源比例)最大的资源称为主资源,而DRF的基本设计思想则是将最大最小公平算法应用于主资源上,进而将多维资源调度问题转化为单资源调度问题,即DRF总是最大化所有主资源中最小的,其算法伪代码如下:

    function void DRFScheduler()
      R ← <r1, …, rm>; //m种资源对应的容量
      C ← <c1, …, cm>; //已用掉的资源,初始值为 0
      si (i = 1..n); //用户(或者框架)i的主资源所需份额,初始化为0
      Ui← <ui,1, …, ui,m> (i = 1..n) // 分配给用户i的资源,初始化为0
     挑选出主资源所需份额si最小的用户i;
     Di ← {用户i的下一个任务需要的资源量};
     if C + Di <= R then
      //将资源分配给用户i
      C ← C + Di; //更新C
      Ui ← Ui + Di; //更新U
      si = maxmj=1{ui,j/rj};
     else
      return; //资源全部用完
     end if
    end function

    下面我们看一个实例。假设系统中共有9个CPU和18GB RAM,有两个用户(或者框架)分别运行了两种任务,需要的资源量分别为<1CPU,4GB>和<3CPU,1GB>。对于用户A,每个任务要消耗总CPU的1/9(份额)和总内存的2/9,因而A的主资源为内存;对于用户B,每个任务要消耗总CPU的1/3和总内存的1/18,因而B的主资源为CPU。DRF将最大化所有用户的主资源,具体分配过程如表6-1所示。最终,A获取的资源量为<3CPU,12GB>,可运行3个任务;而B获取的资源量为<6CPU,2GB>,可运行2个任务。

    表6-1 DRF算法的调度序列

  • 相关阅读:
    gulp serve 报错 gulp.ps1
    执行git命令时出现fatal: 'origin' does not appear to be a git repository错误
    利用 SASS 简化 `nth-child` 样式的生成
    git的一些常用命令
    回调函数
    匿名函数
    css消除行内元素的间隙
    @click.native的使用
    Element-ui 下拉列表 选项过多时如何解决卡顿问题
    vue组件通信(父子之间,兄弟之间)
  • 原文地址:https://www.cnblogs.com/144823836yj/p/14758951.html
Copyright © 2011-2022 走看看