Spark yarn模式下的资源分配配置

本文介绍了Spark在YARN模式下的资源分配配置,包括Spark默认配置文件spark-defaults.conf中的属性设置。重点讨论了YARN的client和cluster两种部署模式,以及Application Master(AM)在不同模式下的运行差异。此外,还提到了执行器容器的资源配置,如executor的内存和CPU核心数,并强调了动态资源分配的启用与管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

Spark on YARN模式下的主要资源为CPU内存
Spark资源分配配置在spark-defaults.conf中设置,其属性配置一般以 ***spark***开头,类似于spark.xx.xx。

Spark on Yarn中的两种部署模式

一般来说,YARN上启动Spark应用程序主要有两种模式:client模式和cluster模式

  • 在yarn-client模式下,驱动程序在客户端进程中运行,而Application Master 仅用于从YARN请求资源。
  • 在yarn-cluster模式下,Spark驱动程序Application Master 内运行,该进程由群集上的YARN管理,客户端可以在启动应用程序后退出。

关于Application Master (AM)的配置

yarn-client

属性名默认值描述
spark.yarn.am.memory512m在Client模式下用于YARN Application Master的内存量,格式与JVM内存字符串相同(例如512m,2g)。
在Cluster模式下,请改用spark.driver.memory。使用小写后缀,例如 k,m,g,t和p分别为kibi-,mebi-,gibi-,tebi-和pebibytes。
spark.yarn.am.cores1在Client模式下用于YARN Application Master的核心数。 在群集模式下,请改用spark.driver.cores。
spark.yarn.am.memoryOverheadAM memory * 0.10, 最少为384在Client模式下使用,与spark.driver.memoryOverhead相同

yarn-cluster

而在yarn-cluster模式下, Spark驱动程序位于YARN AM内部。 下面列出的与驱动程序相关的配置也控制AM的资源分配。

属性名默认值描述
spark.driver.memory
(--driver-memory)
512m用于driver进程的内存量,即SparkContext初始化的内存量,格式与JVM内存字符串相同,格式单位为后缀(“k”,“m”,“g”或“t”)(例如512m,2G)。 注意:在客户端模式下,不能直接在应用程序中通过SparkConf设置此配置,因为驱动程序JVM已在此时启动。 相反,请通过--driver-memory命令行选项或默认属性文件中设置此项。
spark.driver.cores
(--driver-cores)
1driver进程的核心数,在Cluster模式下使用
spark.driver.memoryOverheadAM memory * 0.10, 最少为384除非另有说明,否则在Cluster模式下为每个driver分配的堆外内存量(MiB)。 这是一个内存,可以解决诸如VM开销,以及其他本地开销等问题。它随着容器大小(通常为6-10%)而增长。 YARN和Kubernetes目前支持此选项。

关于Spark执行程序的容器

对于Spark执行器资源,yarn-client和yarn-cluster模式使用相同的配置:

属性名默认值描述
spark.executor.instances
(--num-executor)
2静态分配的executor数。 使用spark.dynamicAllocation.enabled时,初始执行程序集至少含有该数量的executor数
spark.executor.memory
(--executor-memory)
1g每个executor进程使用的内存量,格式与具有大小单位后缀(“k”,“m”,“g”或“t”)的JVM内存字符串相同(例如512m,2g)。
spark.executor.cores
(--executor-cores)
1每个executor使用的核心数。
spark.executor.memoryOverheadexecutorMemory * 0.10, 最小为384除非另有说明,否则每个executor要分配的堆外内存量(MiB)。 这是一个内存,可以解决诸如VM开销,以及其他本机开销等问题。这往往会随着执行程序的大小而增加(通常为6-10%)。 YARN和Kubernetes目前支持此选项。

如果每个执行程序只有一个核,那么一个执行程序只能在任何时间运行一个任务。 在使用broadcast join的情况下,如果我们增加每个执行程序的核心数,则可以使在同一执行程序中的多个正在运行的任务内存共享。

请注意,如果通过将spark.dynamicAllocation.enabled设置为true来启用动态资源分配,则Spark可以根据工作负载上下调整使用此应用程序注册的执行程序数。 在这种情况下,不需要手动指定spark.executor.instances。

关键要点

  • 在 yarn-cluster 模式控制YARN应用程序主资源用与Spark驱动程序资源相关的配置控制。
  • 在计算executor的内存时,请注意overhead off-heap memory为max (10%, 384m) 。
  • 每个executor的CPU核心数控制每个executor的并发任务数。

参考资料

Spark Configuration
Resource Allocation Configuration for Spark on YARN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值