• 容量调度绝对值配置队列使用与避坑


    【概述】


    在yarn中,对于容量调度而言,需要配置不同的队列,并为队列分配不同的资源。然而资源的配置是按照集群总资源的百分比来的,那么,如果集群资源进行扩容,队列的资源也就相应的增加了。在某些场景下, 我们可能希望某些队列的资源是固定的,不随集群资源的扩缩容而变更,这就需要给队列资源配置一个绝对值,在hadoop3.1.0版本中,开始引入了这个功能。本文就来聊聊如何给队列配置绝对值资源,以及一些使用过程中的注意事项。

    【配置使用】


    配置绝对值资源的队列其实很简单,在原来配置百分比的地方,修改为资源的绝对值即可。例如:

    1. <property>
    2.   <name>yarn.scheduler.capacity.root.bigdata.capacity</name>
    3.   <value>[vcores=60,memory=614400,yarn.io/gpu=0]</value>
    4. </property>

    这样,配置的队列就是固定的资源了。

    【使用注意事项】


    虽然配置比较简单,使用方式和原来相比也没有什么变化,但还是有不少要注意的地方。

    1. 根队列下,队列可创建的模式

    在根队列("/")下,可以同时创建类型为百分比、绝对值的子队列。

    9e9da929baddf64747fa296596659d63.png

    2. 根队列下,队列的容量问题

    在根队列下,如果同时创建了百分比、绝对值方式的队列,那么对于百分比队列而言,累加的百分比可以大于100%,但单个队列的百分比值不能超过100%

    030e8a6fe43a8ca3a3f36926214ba052.png

    同样对于绝对值方式的队列,所有队列的资源总和同样可以大于集群的总资源,

    但是,如果根队列下只有百分比的队列,那么队列累加的百分比之和还是和之前一样,必须等于100,对于绝对值的队列,也是一样的,非根队列下的子队列,其资源的总和可以大于等于父队列的资源,但不能超过父队列的资源。

    3. 子队列的模式

    前面说了根队列下的队列可以同时创建百分比、绝对值方式的队列,而在非根队列下的队列,其类型就必须与父队列保持一致,即如果父队列是百分比的,那么子队列也只能是百分比;如果父队列是按绝对值方式配置的,子队列也只能以绝对值的方式进行配置,否则会报类型不匹配的错误,导致队列刷新失败或rm启动失败,例如采用如下配置更新队列:

    1. <property>
    2.   <name>yarn.scheduler.capacity.root.cloudstorage.capacity</name>
    3.   <value>50</value>
    4. </property>
    5. <property>
    6.   <name>yarn.scheduler.capacity.root.cloudstorage.queues</name>
    7.   <value>ceph</value>
    8. </property>
    9. <property>
    10.   <name>yarn.scheduler.capacity.root.cloudstorage.ceph.capacity</name>
    11.   <value>[vcores=60,memory=614400,yarn.io/gpu=0]</value>
    12. </property>

    报错信息为:

    f586507e316584bbb14cf438c48d4524.png

    4. 绝对值队列下创建资源为0的子队列类型问题

    动态新增的某个队列不需要了, 这个时候会将队列的资源配置为0,并将队列的状态配置为STOPPED,以停用该队列。

    然而由于在绝对值模式的队列下,创建的子队列也只能是以绝对值的方式配置,如果此时将子队列的值设置为0后,刷新队列会报队列的类型与父队列不匹配的错误。

    即配置方式为[vcores=0,memory=0,yarn.io/gpu=0]的队列,其类型认为是百分比的模式,父队列如果是绝对值模式的, 那么确实就出现了不匹配的报错。

    该问题实际上是一个bug,正确的方式是:配置为0资源的队列其类型与父队列相同。社区有对应的记录,在未来的3.4.0中修复。具体可参考YARN-10364

    be08f2f7f4c32d02ed4f094581735b15.png

    5. 通过yarnClient获取队里有效资源不正确

    通过yarnclient的getEffectiveMinCapacity获取的值与UI界面展示的值不相符,同样这个也是源码中的BUG。赋值的时候搞错了。

    08b10cd421b1505e6b6c2036d4af8a46.png

    注意,当前这个问题仅在trunk分支上修复

    以上这些就是使用过程中常见的需要注意的点,除此之外,还有几个小的点,使用的场景也有限,这里简单罗列下,如有需要可详细参考社区的jira单。

    1)绝对值配置的队列,maxApplications的值被覆盖

    https://issues.apache.org/jira/browse/YARN-10396

    2)第三级队列资源计算错误问题

    https://issues.apache.org/jira/browse/YARN-8917

    【总结】


    文章就总结到这里了,看完之后是否还记得应该如何给队列配置绝对值资源,以及使用中有哪些需要注意的地方。此外,是否也还留有一些疑惑的地方,比如root队列下,多个绝对值配置的队列的总资源超过了集群资源,那么该队列使用时实际能占用多少资源,具体是如何计算的等等,这就作为下篇文章的内容,我们下次再聊。

    好了,这就是本文的全部内容,如果觉得本文对您有帮助,不要吝啬点赞在看转发,也欢迎加我微信交流~

  • 相关阅读:
    基于ASAM ODS标准的试验数字化平台-WDP
    数字方法_toLocaleString方法
    java毕业设计在线售药系统Mybatis+系统+数据库+调试部署
    家庭理财管理系统设计与实现
    浅析ChatGPT中涉及到的几种技术点
    C/C++内存管理
    获取文件创建时间
    控价与数据分析的关系
    力扣:1224. 最大相等频率
    亚马逊、沃尔玛、eBay、Newegg如何做到稳定出单?有何方法?技术已攻破!
  • 原文地址:https://blog.csdn.net/hncscwc/article/details/125466133