开发者社区 问答 正文

《Yarn队列资源调度问题》

问题:156.7% ,39.2% 是怎么计算出来的?

Used Capacity: 156.7% Absolute Used Capacity: 39.2%

总资源:总共120G, 3个节点,24Cores, 现有三个队列: defaut : 60G, User_Limit_Factor = 1 queueA : 30G, User_Limit_Factor = 1.5 queueB : 30G, User_Limit_Factor = 0.1

现有一个提交任务,提交命令如下

/apache/app/spark3.1.1/bin/spark-submit \
--class com.rhb.readKafka \
--master yarn \
--deploy-mode cluster \
--queue queueA \
--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.3 \
--driver-memory 6g \
--executor-cores 3 \
--executor-memory 7g \
--num-executors 20 \
/root/rhb/mutiUserDemo0.1.jar

运行之后的资源分配图如下

image.png

展开
收起
rdonald 2021-10-27 15:54:52 529 分享 版权
阿里云 AI 助理回答

根据您提供的信息,要理解“Used Capacity: 156.7%”和“Absolute Used Capacity: 39.2%”,我们首先需要明确这些百分比是如何计算的。在YARN(Yet Another Resource Negotiator)资源管理系统中,这些百分比通常与队列或集群资源使用情况相关。

Used Capacity (利用率)

  • 定义:这个指标通常表示当前使用的资源占该队列或集群总配置资源的比例。

对于您的场景,我们需要知道每个队列的具体使用情况来直接计算“156.7%”。然而,没有直接给出每个队列的实际使用量,但我们可以尝试推断。由于任务提交到了queueA,并且指定了资源需求,我们可以基于这些需求来间接分析。

任务提交到queueA时,请求的资源包括: - Driver Memory: 6G - Executor Cores: 3 * 20 = 60 cores - Executor Memory: 7G * 20 = 140G

但是,这里有一个明显的矛盾点,因为Executor Memory的总和超出了单个节点的内存总量,更不用说整个队列或集群了。这可能是一个假设错误或者输入数据的问题,因为实际应用中这样的请求是无法被满足的,除非有其他机制未被提及(比如动态资源分配)。因此,正确的资源请求应该重新审视,但基于现有信息,我们无法直接计算出准确的“Used Capacity”。

Absolute Used Capacity (绝对已用容量)

  • 定义:这个指标通常指的是实际使用的资源量相对于某个基准的百分比,这里的基准可能是集群的物理资源总量。

“Absolute Used Capacity: 39.2%”可能是指所有队列加起来实际消耗的资源占整个集群物理资源的百分比。如果总资源是120G内存加上CPU核心数(未明确具体如何分配),那么这个百分比可能反映了所有正在运行的任务所占用资源的总和。

解释与推测

由于直接计算缺乏具体每个队列的实际使用数据,且任务提交参数存在不合理之处,我们不能直接算出这两个百分比。不过,“156.7%”的Used Capacity表明某队列(很可能是讨论中的queueA)的使用超过了其配置的最大资源限制,这可能是因为User Limit Factor的应用、资源抢占或是统计时间窗口内的瞬时峰值导致的。

而“39.2%”的Absolute Used Capacity则意味着整体上集群资源的使用率相对较低,尽管有个别队列可能过度使用,但集群作为一个整体尚未达到饱和状态。

为了获得准确的计算方法,需要具体的每个队列实时使用资源的数据以及它们的配置上限,并结合YARN的调度策略和队列管理规则进行分析。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答