YARN Container与Spark Executor参数优先级详解

在Spark on YARN环境中,资源参数的配置涉及YARN和Spark两个层面的参数设置,它们之间存在一定的优先级关系。以下是关键参数的优先级解析:

1. 参数优先级总览

Spark on YARN的资源参数优先级遵循以下原则:

  1. Spark-submit命令行参数 > spark-defaults.conf配置 > 环境变量 > 默认值
  2. YARN层面的资源限制会最终约束Spark申请的资源总量

2. 关键参数对应关系

2.1 内存相关参数

Spark参数 YARN对应参数 说明
spark.executor.memory - Executor JVM堆内存大小
spark.yarn.executor.memoryOverhead - Executor堆外内存(默认max(384MB, 0.1*executorMemory))
- yarn.scheduler.maximum-allocation-mb 单个Container能申请的最大内存,限制Executor总内存(堆+堆外)
- yarn.nodemanager.resource.memory-mb 单个NodeManager的总可用内存

内存计算公式

Executor总内存 = spark.executor.memory + spark.yarn.executor.memoryOverheadyarn.scheduler.maximum-allocation-mb

2.2 CPU相关参数

Spark参数 YARN对应参数 说明
spark.executor.cores - 每个Executor使用的vCore数
- yarn.scheduler.maximum-allocation-vcores 单个Container能申请的最大vCore数
- yarn.nodemanager.resource.cpu-vcores 单个NodeManager的总vCore数

3. 参数优先级具体分析

3.1 内存参数优先级

  1. Spark层面

    • 如果同时设置spark.executor.memoryspark.yarn.executor.memoryOverhead,则Executor总内存为两者之和
    • 如果只设置spark.executor.memory,堆外内存按默认公式计算
  2. YARN层面约束

    • Executor总内存不能超过yarn.scheduler.maximum-allocation-mb
    • 所有Executor总内存不能超过yarn.nodemanager.resource.memory-mb
  3. 内存规整化

    • YARN会按yarn.scheduler.increment-allocation-mb(默认1024MB)对申请的内存进行规整化处理

3.2 CPU参数优先级

  1. Spark层面

    • spark.executor.cores指定每个Executor使用的vCore数
  2. YARN层面约束

    • spark.executor.coresyarn.scheduler.maximum-allocation-vcores
    • Executor数量 × spark.executor.coresyarn.nodemanager.resource.cpu-vcores

4. 最佳实践建议

  1. 内存配置建议

    • 单个Executor内存不宜过大(推荐不超过64GB),以避免GC问题
    • 预留约10-15%的内存作为堆外内存(通过spark.yarn.executor.memoryOverhead)
    • 考虑HDFS客户端并发限制,每个Executor的并行任务数建议不超过5个
  2. CPU配置建议

    • 每个Executor的vCore数建议4-6个,以平衡并行度和资源利用率
    • 考虑yarn.nodemanager.resource.cpu-vcores的总量,合理设置Executor数量
  3. 动态资源分配

    • 启用spark.dynamicAllocation.enabled=true实现Executor数量动态调整
    • 配合设置spark.dynamicAllocation.minExecutorsspark.dynamicAllocation.maxExecutors

5. 配置示例

bash 复制代码
# Spark提交命令示例
spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --executor-memory 10G \
  --executor-cores 4 \
  --num-executors 10 \
  --conf spark.yarn.executor.memoryOverhead=2G \
  --conf spark.dynamicAllocation.enabled=true \
  --conf spark.dynamicAllocation.maxExecutors=20 \
  your_application.jar

对应的YARN配置建议:

xml 复制代码
<!-- yarn-site.xml -->
<property>
  <name>yarn.nodemanager.resource.memory-mb</name>
  <value>65536</value> <!-- 64GB -->
</property>
<property>
  <name>yarn.scheduler.maximum-allocation-mb</name>
  <value>16384</value> <!-- 16GB -->
</property>
<property>
  <name>yarn.nodemanager.resource.cpu-vcores</name>
  <value>16</value>
</property>
<property>
  <name>yarn.scheduler.maximum-allocation-vcores</name>
  <value>8</value>
</property>

通过理解这些参数的优先级关系,可以更有效地配置Spark on YARN应用程序,充分利用集群资源,同时避免因参数配置不当导致的资源申请失败或性能问题。

相关推荐
key061 小时前
ISO 27001 信息安全管理体系 (ISMS) 建设与运营
大数据·安全合规
光影少年2 小时前
vue打包优化方案都有哪些?
前端·javascript·vue.js
数据要素X3 小时前
【大数据实战】如何从0到1构建用户画像系统(案例+数据仓库+Airflow调度)
大数据·数据仓库·数据治理·数据中台
TDengine (老段)3 小时前
TDengine 时序函数 DERIVATIVE 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)4 小时前
TDengine 时序函数 STATEDURATION 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
凯子坚持 c4 小时前
2025年大模型服务性能深度解析:从清华评测报告看蓝耘元生代MaaS平台的综合实力
大数据·数据库·人工智能
WLJT1231231234 小时前
中国建材网:重构建材行业生态的数字力量
大数据·人工智能
weixin_525936335 小时前
2020年美国新冠肺炎疫情数据分析与可视化
hadoop·python·数据挖掘·数据分析·spark·数据可视化
木易 士心6 小时前
Ref 和 Reactive 响应式原理剖析与代码实现
前端·javascript·vue.js
uhakadotcom6 小时前
execjs有哪些常用的api,如何逆向分析网站的加签机制
前端·javascript·面试