YARN如何计算Spark应用的资源分配及占用比例?
YARN Spark 应用资源占用问题答疑
YARN 应用资源使用量统计逻辑
YARN 统计的应用资源占用是应用已申请且被分配的资源配额总额,和作业实际运行时的CPU、内存实时消耗无关。只要应用还在运行、没有释放持有的配额,不管作业是空闲还是满负载,YARN统计的占用量都不会变化。
资源占用和Spark提交参数的关系
你提到的--executor-cores、--executor-memory、--driver-memory确实是决定YARN资源占用的核心参数:
- Spark on YARN模式下,提交作业时指定的这些参数就是Spark向YARN申请资源的依据,YARN分配资源后就会按分配的总额统计占比
- 你固定了这些参数、也固定了Executor数量的情况下,Spark向YARN申请的总配额就固定了,所以YARN显示的资源占比不会随作业复杂度、数据规模变化,这就是你之前看到占比固定为11.39%的直接原因。
3.61%占比的计算逻辑
YARN UI显示的应用资源占比默认用**优势资源公平调度(DRF)**规则计算:分别计算应用占用的vcore占集群总可调度vcore的比例、内存占集群总可调度内存的比例,取两个比例中更大的那个作为最终显示值。
你给出的场景参数:4节点,每节点14vcore,12个Executor,每个1核、600MB内存,得到3.61%的占比是按内存维度计算来的:
- 首先要注意,YARN给每个Spark Executor/Driver分配的内存,会在你配置的内存基础上额外加堆外内存overhead,默认值为配置内存的10%,最低384MB,你可以通过
spark.executor.memoryOverhead、spark.driver.memoryOverhead调整这个值 - 你这个应用的总分配内存 = 12个Executor的总分配内存 + Driver的总分配内存
- 代入3.61%的占比可以反推:你集群的总可调度内存(所有NodeManager节点
yarn.nodemanager.resource.memory-mb配置的累加值)约为200~360GB范围,这个是常规4节点集群的合理内存配置。
内容的提问来源于stack exchange,提问作者uylmz
相关产品推荐
相关产品推荐

