美文网首页美文共赏
资源分配和抢占涉及到的配置参数

资源分配和抢占涉及到的配置参数

作者: 专职掏大粪 | 来源:发表于2021-12-09 00:02 被阅读0次

资源分配

  • FSParentQueue.assignContainer
    满足不存在ReservedContainer && 队列ResourceUsage < maxResource
  • FSLeafQueue.assignContainer
    满足不存在ReservedContainer && 队列ResourceUsage < maxResource
  • FSAppAttempt. assignContainer
    1.满足!reserved && !hasContainerForNode(priority, node)`
    2.判断资源分配的locality

hasContainerForNode具体逻辑
1.如果liveContainer==0,并且这个Application的AM是一个managedAM,那么在分配container的时候必须考虑是否超过了当前队列的maAMShare配置的最大AM比例值FairShare * maxAMShare
1.nodemanager节点剩余可用资源 > 请求的container资源
&&
请求的container资源 +队列 ResourceUsage < 队列MaxShare(MaxResources)

  • assignContainer过程的FairSharePolicy比较器
    需要瓜分的总资源为 totalmaxShare 与 (总资源-fix固定资源) 最小值
 int totalMaxShare = 0;//non-fix队列的所有max-share之和
    for (Schedulable sched : schedulables) {//对于non-fixed队列,计算maxShare之和
      int maxShare = getResourceValue(sched.getMaxShare(), type);
      totalMaxShare = (int) Math.min((long)maxShare + (long)totalMaxShare,
          Integer.MAX_VALUE);
      if (totalMaxShare == Integer.MAX_VALUE) {
        break;
      }
    }

    //集群总资源,减去 已经计算完毕的fix队列的资源,得到剩下的non-fix的资源总量,这一部分资源,是可分配的资源
    int totalResource = Math.max((getResourceValue(totalResources, type) -
        takenResources), 0);
    //所有non-fix队列的maxShare加起来小于 totalResource(集群总资源减去fix队列资源量的和的剩余值),则只需要所有maxShare的和就可以了,否则,需要totalResuorce(集群总资源减去fix队列资源量的和的剩余值)
    totalResource = Math.min(totalMaxShare, totalResource);
  • Demand代表队列资源需求量,即处于等待或者运行状态下的应用程序需求的资源量
  • 实际最小资源份额:minShare = Min(资源需求量Demand,配置的最小资源MinShare)
  • 是否饥饿:isNeedy = 资源使用量 < minShare(实际最小资源份额)
  • 资源分配比:minShareRatio = 资源使用量 / Max(mindshare, 1)
  • 资源使用权重比:useToWeightRatio = 资源使用量 / 权重


    image.png

资源抢占

  • 抢占条件

1.集群已经开启了抢占:即yarn.scheduler.fair.preemption是否配置为true

  1. 整体集群资源利用率是否已经超过了yarn.scheduler.fair.preemption.cluster-utilization-threshold的配置值,默认为0.8f
    如果以上条件均满足,则可以进行抢占相关的工作
  • 计算需要抢占的资源
- MinShare 
时间超过minSharePreemptionTimeout,Scheduler还没有获得minShare的资源,则进行抢占 

Target = Min(MinShare, Demand)//如果Demand为0,说明队列没在用,也就不会计算抢占资源
resDueToMinShare = Max(0, Target - ResourceUsage)

- FairShare 
如果超过fairSharePreemptionTimeout,Scheduler还没有获得fairShare的资源,则进行抢占

Target = Min(FairShare, Demand)//如果Demand为0,说明队列没在用,也就不会计算抢占资源
resDueToFairShare = Max(0, Target - ResourceUsage)

最终一个队列可抢占资源 取 上面两种两种情况 得到的 resDueToMinShare 和 resDueToFairShare的最大者
resToPreempt = Max(resDueToMinShare, resDueToFairShare)

FSParentQueue.preemptContainer()

FairSharePolicy比较器,找出对该被抢占的队列
当前资源的欠缺或者充裕程度,资源越充裕,越可能被选中

FSLeafQueue.preemptContainer()

FairSharePolicy比较器,找出对该被抢占app
当前资源的欠缺或者充裕程度,资源越充裕,越可能被选中

FSAppAttempt.preemptContainer()

RMContainerComparator比较器选择一个优先级较低的container,如果优先级相同,则比较containerId并选择一个id比较小的container。

相关文章

  • 资源分配和抢占涉及到的配置参数

    资源分配 FSParentQueue.assignContainer满足不存在ReservedContainer ...

  • Capacity Scheduler 队列设置

    先附一个官网地址 Capacity Scheduler是YARN中默认的资源调度器。 相关参数配置: 资源分配相关...

  • kubernetes——资源管理

    系统资源可分为两类:可抢占资源(CPU)和不可抢占资源(memory、storage)。可抢占资源比如CPU在系统...

  • 死锁

    资源 需要排他性使用的对象称为资源。 资源分为两类:可抢占的和不可抢占的。可抢占资源可以从拥有它的进程中抢占而不会...

  • 死锁

    主要参考的文章点这里 死锁的必要条件 互斥:同一资源不能同时分配给两个进程。 不可抢占:不能抢占已经分配给一个进程...

  • 深入理解JVM(三)——配置参数

    JVM配置参数分为三类参数: 1、跟踪参数 2、堆分配参数 3、栈分配参数 这三类参数分别用于跟踪监控JVM状态,...

  • YARN集群资源如何分配

    如何分配集群资源 (怎么配置Yarn) 总资源 集群中每台机器的配置 (RAM,CPU,Disk,网卡) 预留资源...

  • 2018-11-07 操作系统面试常考

    死锁 死锁出现必须满足4个条件:互斥、非抢占、请求和保持、循环等待。解决办法:a) 静态资源分配法:静态分配是指...

  • 0331晨读感悟:

    1.战略和资源的分配 战略是发展目标和方向,资源是现在拥有的东西。要实施战略,必须对拥有的资源进行优化配置,资源对...

  • spring-cloud | Eureka参数配置项详解

    本文系转载,原文: 微服务架构:Eureka参数配置项详解 Eureka涉及到的参数配置项数量众多,它的很多功能都...

网友评论

    本文标题:资源分配和抢占涉及到的配置参数

    本文链接:https://www.haomeiwen.com/subject/jwuxfrtx.html