背景
由于业务需求,需要新增一个子队列transfer,总资源:Vcore=192 Mem=320G,队列规划如下:
根据配置文件中的属性,transfer 队列的容量为 30%。集群总共有 192 个 vcore 和 320 GB 内存。
对于 vcore,最大可分配数量为:
vcore_limit = (total_vcore * transfer_queue_capacity) / 100 = (192 * 30) / 100 = 57.6
因为 vcore 必须是整数,所以最大可分配的 vcore 为 57。
对于内存,最大可分配数量为:
mem_limit = (total_mem * transfer_queue_capacity) / 100 = (320 * 30) / 100 = 96
因此,在 transfer 队列条件允许的情况下,最大可分配的 vcore 为 57,内存为 96 GB。
问题
研发任务运行在transfer队列,出现资源超配的现象,导致资源瞬间占满,如图
根据之前的计算,transfer 队列中最大可分配的 vcore 为 57,而实际 running containers 数量为 95,AllocateaCpu Vcore 为 95,这意味着资源利用率超过了 transfer 队列的配置限制。因此,存在资源超配的情况。
解决方案
在yarn-site下新增 yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DominantResourceCalculator
该参数用于比较调度器中的资源的ResourceCalculator实现。
默认的即org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator只使用内存,而DominantResourceCalculator 用 Dominant-resource比较多维度资源,如内存,CPU等等
这样修改后重启resourmanger 观察是否正常
同类参考连接:https://blog.csdn.net/CPP_MAYIBO/article/details/100813294
标签:超配,vcore,队列,transfer,yarn,内存 From: https://www.cnblogs.com/zhouzhiguo/p/18025255