Spark应用配置参数说明

更新时间:
复制 MD 格式

云原生数据仓库 AnalyticDB MySQL 版(AnalyticDB for MySQL)Spark配置参数跟开源Spark中的配置参数基本一致。本文介绍AnalyticDB for MySQL与开源Spark用法不一致的配置参数。

使用说明

Spark应用配置参数用于配置和调整Spark应用程序的行为和性能。使用不同的Spark开发工具,应用配置参数的格式不同。

开发工具

配置参数格式

配置参数示例

SQL开发编辑器

set key=value;

set spark.sql.hive.metastore.version=adb;

Spark Jar开发编辑器

"key": "value"

"spark.sql.hive.metastore.version":"adb"

Notebook开发编辑器

"key": "value"

"spark.sql.hive.metastore.version":"adb"

spark-submit命令行工具

key=value

spark.sql.hive.metastore.version=adb

指定Driver和Executor资源

参数名称

是否必填

默认值

参数说明

对应开源Spark参数名称

spark.adb.acuPerApp

否

无

单个Spark作业执行时所使用的ACU,取值范围为[2,Job型资源组计算最大资源]。

配置该参数后,系统会自动计算并配置Spark Driver规格、Spark Executor规格和Spark Executor节点个数。

点击查看spark.adb.acuPerApp的配置策略

  • 同时配置spark.adb.acuPerApp和其他所有资源参数(包括spark.driver.resourceSpec、spark.executor.resourceSpec和spark.executor.instances)时,spark.adb.acuPerApp无效,其他资源参数取值不变。

  • 只配置spark.adb.acuPerApp时,spark.adb.acuPerApp有效,其他所有资源参数将根据spark.adb.acuPerApp自动计算并配置。

  • 在其他配置组合中,spark.adb.acuPerApp有效,同时会根据此参数自动计算未明确配置的资源参数(spark.driver.resourceSpec、spark.executor.resourceSpec和spark.executor.instances),而已经明确配置的参数取值保持不变。

无

spark.driver.resourceSpec

是

medium

Spark Driver的资源规格。不同型号的取值对应不同的规格,详情请参见Spark资源规格列表的型号列。

重要

提交Spark应用时,可使用开源Spark参数,且取值需为Spark资源规格列表中的核数和内存。

例如CONF spark.driver.resourceSpec = c.small;,则Spark Driver的资源规格为1核2 GB。

spark.driver.cores及spark.driver.memory

spark.executor.resourceSpec

是

medium

Spark Executor的资源规格。不同型号的取值对应不同的规格,详情请参见Spark资源规格列表的型号列。

重要

提交Spark应用时,可使用开源Spark参数,且取值需为Spark资源规格列表中的核数和内存。

例如CONF spark.executor.resourceSpec = c.small;,则Spark Executor的资源规格为1核2 GB。

spark.executor.cores及spark.executor.memory

spark.executor.instances

否

Job型资源组计算最大资源/5

启动的Spark Executor节点个数。

spark.executor.instances

spark.adb.driverDiskSize

否

无

在Spark Driver节点中挂载的额外磁盘容量, 应用于业务上需要较大磁盘空间的场景。默认挂载目录为/user_data_dir。

取值范围为(0,100],单位为GiB,例如:spark.adb.driverDiskSize=50Gi,表示将Spark Driver节点中挂载的额外磁盘容量设置为50 GiB。

无

spark.adb.executorDiskSize

否

无

在Spark Executor节点中挂载的额外磁盘容量, 应用于Shuffle数据写入。默认挂载目录为/shuffle_volume。

取值范围为(0,100],单位为GiB,例如:spark.adb.executorDiskSize=50Gi,表示将Spark Executor节点中挂载的额外磁盘容量设置为50 GiB。

无

Spark资源规格列表

重要

执行Spark作业时,既可以使用预留资源,也可以使用弹性资源。如果使用Job型资源组的按需弹性资源执行Spark作业,会根据Spark资源规格以及资源规格的CPU内存比计算使用的ACU数量,具体计算方法如下。

  • CPU内存比为1:2,使用的ACU数量=Spark资源规格核数*0.8。

  • CPU内存比为1:4,使用的ACU数量=Spark资源规格核数*1。

  • CPU内存比为1:8,使用的ACU数量=Spark资源规格核数*1.5。

按需弹性资源的计费价格,详情请参见湖仓版产品定价。

表 1. Spark资源规格列表

型号(Type)

规格

使用的ACU数量

CPU(Core)

内存(GB)

磁盘空间1(GB)

c.small

1

2

20

0.8

small

1

4

20

1

m.small

1

8

20

1.5

c.medium

2

4

20

1.6

medium

2

8

20

2

m.medium

2

16

20

3

c.large

4

8

20

3.2

large

4

16

20

4

m.large

4

32

20

6

c.xlarge

8

16

20

6.4

xlarge

8

32

20

8

m.xlarge

8

64

20

12

c.2xlarge

16

32

20

12.8

2xlarge

16

64

20

16

m.2xlarge

16

128

20

24

m.4xlarge

32

256

20

48

m.8xlarge

64

512

20

96

说明

1磁盘空间:预估会有1%左右的系统占用,您可用的空间大小可能不足20 GB。

示例

为Spark作业分配32个Executor,每个Executor的规格为 medium(即2核8 GB),每个Driver的规格为small(即1核4 GB),此时整个作业最多可分配总计65 ACU的计算资源。

{
   "spark.driver.resourceSpec":"small",
   "spark.executor.resourceSpec":"medium",
   "spark.executor.instances":"32",
   "spark.adb.executorDiskSize":"100Gi"
}

指定Spark作业优先级

参数名称

是否必填

默认值

参数说明

spark.adb.priority

否

NORMAL

指定Spark作业的优先级。当因资源不足导致Spark作业排队执行时,等待队列中优先级更高的Spark作业优先获取运行资源,从而保障其能更早进入执行状态。取值说明:

  • HIGH:高优先级。

  • NORMAL:一般优先级。

  • LOW:低优先级。

  • LOWEST:最低优先级。

重要

建议设置Streaming类(长期运行的流作业)Spark作业的优先级为HIGH。

连接元数据服务

参数名称

是否必填

默认值

参数说明

spark.sql.catalogImplementation

否

  • Spark SQL类型作业的默认值为:hive。

  • 非Spark SQL类型作业的默认值:in-memory。

指定连接元数据服务的类型,支持如下配置:

  • hive:连接Spark内置的Hive MetaStore中的元数据信息。

  • in-memory:连接临时目录中的元数据信息。

spark.sql.hive.metastore.version

否

  • Spark SQL类型作业的默认值:adb。

  • 非Spark SQL类型作业的默认值:<hive_version>。

指定采用元数据服务版本,支持如下配置:

  • adb:连接AnalyticDB for MySQL中的元数据信息。

  • <hive_version>:指定Hive MetaStore的版本。

说明

示例

  • 连接AnalyticDB for MySQL中的元数据信息,配置如下:

    spark.sql.hive.metastore.version=adb;
  • 连接Spark内置的Hive MetaStore中的元数据信息,配置如下:

    spark.sql.catalogImplementation=hive;
    spark.sql.hive.metastore.version=2.1.3;
  • 连接临时目录中的元数据信息,配置如下:

    spark.sql.catalogImplementation=in-memory;

配置Spark UI

参数名称

是否必填

默认值

参数说明

spark.app.log.rootPath

否

oss://<aliyun-oa-adb-spark-阿里云账号ID-oss-可用区ID>/<集群ID>/<Spark应用ID>

存储AnalyticDB for MySQLSpark作业日志及Linux操作系统输出内容的路径。

默认OSS路径Spark应用ID的文件夹下存储的内容如下:

  • 名称为Spark应用ID-000X的文件存储用于Spark UI渲染的Spark Event日志。

  • 名称为driver和数字的文件夹存储对应的节点日志。

  • 名称为stdout和stderr的文件夹存储Linux操作系统的输出内容。

spark.adb.event.logUploadDuration

否

false

是否记录EventLog上传时消耗的时间。

spark.adb.buffer.maxNumEvents

否

1000

Driver内部缓存Event的最大数量。

spark.adb.payload.maxNumEvents

否

10000

一次上传的Event到OSS的最大数量。

spark.adb.event.pollingIntervalSecs

否

0.5

Event上传到OSS时,两次上传之间的时间间隔,单位为秒。例如:设置为每隔0.5秒上传一次。

spark.adb.event.maxPollingIntervalSecs

否

60

重新上传Event到OSS需要等待的最大时间间隔。单位为秒。如果上传失败需要重新上传,两次上传的时间间隔会大于spark.adb.event.pollingIntervalSecs,但时间间隔最大不会超过spark.adb.event.maxPollingIntervalSecs。

spark.adb.event.maxWaitOnEndSecs

否

10

Event上传到OSS的最大等待时间,单位为秒。最大等待时间为开始上传到完成上传的时间间隔。超过最大等待时间会重新上传。

spark.adb.event.waitForPendingPayloadsSleepIntervalSecs

否

1

重新上传Event完成的最大时间,单位为秒。在超过 spark.adb.event.maxWaitOnEndSecs的时间后未完成上传,重新上传需要等待的时间。

spark.adb.eventLog.rolling.maxFileSize

否

209715200

EventLog在OSS存储文件的切片大小,单位为 byte。EventLog在OSS上是多个文件存储,例如 Eventlog.0、Eventlog.1,可控制Eventlog.0、Eventlog.1文件的大小。

为RAM用户授权

参数名称

是否必填

默认值

参数说明

spark.adb.roleArn

否

无

在RAM系统中授予提交Spark应用的RAM用户的角色ARN,详情请参见RAM角色概览。RAM用户提交应用时,需要填写该参数,阿里云账号无需填写该参数。

说明

如果已在控制台为RAM用户进行了快速授权操作,则无需再通过配置参数为该RAM用户授权。详情请参见账号授权。

内置数据源连接器

参数名称

是否必填

默认值

参数说明

spark.adb.connectors

否

无

启用AnalyticDB for MySQLSpark内置的连接器,连接器名称以逗号分隔,目前可选的连接器有oss、hudi、delta、adb、odps、external_hive、jindo、default。

spark.hadoop.io.compression.codec.snappy.native

否

false

标识Snappy文件是否为标准Snappy文件。Hadoop默认识别的是Hadoop修改过的Snappy格式文件。设置为true时将使用标准Snappy库解压,否则使用hadoop默认的Snappy库解压。

跨VPC访问和连接数据源

参数名称

是否必填

默认值

参数说明

spark.adb.eni.enabled

否

false

是否开启ENI访问的开关。

如果是通过外表访问其他外部数据源,则需要打开ENI访问开关。取值说明:

  • true:开启

  • false:关闭

spark.adb.eni.vswitchId

否

无

弹性网卡的交换机ID。

如果是从ECS通过VPC网络连接AnalyticDB for MySQL,需要配置VPC网络的交换机ID。

说明

当配置了开启VPC网络时,需要同时开启ENI访问,即配置spark.adb.eni.enabled为true。

spark.adb.eni.securityGroupId

否

无

弹性网卡的安全组ID。

如果是从ECS通过VPC网络连接AnalyticDB for MySQL,需配置安全组ID。

说明

当配置了开启VPC网络时,需要同时开启ENI访问,即配置spark.adb.eni.enabled为true。

spark.adb.eni.extraHosts

否

无

需要额外传入的IP和Host的映射关系,以便Spark能正确解析数据源中的Host。如连接自建的Hive数据源,则需要传入此参数。

说明
  • IP和Host之间用空格分隔。多个IP和域名用英文逗号(,)分隔,如ip0 master0,ip1 master1。

  • 当配置了连接数据源时,需要同时开启ENI网络,即配置spark.adb.eni.enabled为true。

spark.adb.eni.adbHostAlias.enabled

否

false

是否开启自动将AnalyticDB for MySQL服务所需要的域名解析信息写入到域名映射表中。取值说明:

  • true:开启。

  • false:关闭。

在通过ENI连接EMR Hive读写数据时,需要开启。

应用重试

参数名称

是否必填

默认值

参数说明

spark.adb.maxAttempts

否

1

最大尝试次数,默认值为1,代表不需要重试。

假设配置为3,则这个应用在一个滑动窗口期时间内最多尝试3次。

spark.adb.attemptFailuresValidityInterval

否

Integer.MAX

重试计数的滑动窗口时间,单位:秒(s)。

假设配置为6000,那么当一次重试失败后,系统会计算过去6000s共进行了多少次重试,如果重试次数少于maxAttempts的配置值,则会继续重试。

Executor调度超时自动终止(Scheduling Watchdog)

当Executor Pod因底层资源不足(如ECI库存耗尽、资源配额超限、节点亲和性无法满足等)长时间处于Pending状态时,作业会持续等待,既占用Driver资源,也阻塞后续调度。开启该功能后,当不可调度的Executor占比与等待时长同时达到设定阈值,系统将自动判定作业失败并释放资源,实现快速失败(Fail Fast)。

使用场景

该功能适用于在共享集群中运行大量Spark作业,且希望在资源不足时作业尽快失败、而非无限等待的场景。典型场景如下:

  • ECI资源不足:使用阿里云弹性容器实例(ECI)运行Executor时,底层规格库存不足,导致Pod长时间处于Pending状态。

  • 集群资源配额超限:命名空间或资源组的CPU、内存配额已满,新的Executor无法调度。

  • 批量作业快速重试:希望作业在资源不可用时尽快失败,由上层调度系统(如Airflow)决定重试策略。

配置方法

提交Spark作业时,通过配置以下参数启用并调整Watchdog的行为。

参数名称

是否必填

默认值

参数说明

spark.adb.terminateOnPending.enabled

启用该功能时必填

false

是否为该作业启用Executor调度超时自动终止。取值:

  • true:启用。

  • false(默认值):不启用。

默认关闭。设置为true后,本功能及相关参数方才生效。

spark.adb.terminateOnPending.timeoutSec

否

610

Executor Pod持续处于Pending状态的容忍时间,单位为秒。从Executor Pod首次被检测到不可调度时开始计时,当等待时长超过该值、且同时满足spark.adb.terminateOnPending.executorRatio条件时,触发作业终止。

建议取值:610~900。

spark.adb.terminateOnPending.executorRatio

否

0.5

触发终止的不可调度Executor占比阈值,取值范围为(0,1.0]。占比的计算方式为:不可调度Executor数量/期望Executor总数。当占比达到该值、且Pending时长超过spark.adb.terminateOnPending.timeoutSec时,触发作业终止。

取值越小,触发越灵敏;取值越大,触发越宽松:

  • 0.3:当30%的Executor不可调度时即触发,适合对延迟敏感的作业。

  • 0.5(默认值):半数Executor不可调度时触发。

  • 0.8~1.0:大部分或全部Executor不可调度时才触发,适合资源动态波动的环境。

其中,期望Executor总数按以下优先级取值:

  1. spark.executor.instances(静态分配)。

  2. spark.dynamicAllocation.initialExecutors(动态分配的初始值)。

  3. spark.dynamicAllocation.maxExecutors(动态分配的最大值)。

  4. 以上参数均未配置时,取当前不可调度的Pod数量。

重要

spark.adb.terminateOnPending.executorRatio和spark.adb.terminateOnPending.timeoutSec必须同时满足才会触发终止。仅等待超时但占比未达标,或占比达标但等待时长不足,都不会触发。

配置示例如下:为作业启用调度超时自动终止,当半数Executor持续不可调度超过300秒时终止作业。

{
   "spark.adb.terminateOnPending.enabled":"true",
   "spark.adb.terminateOnPending.timeoutSec":"300",
   "spark.adb.terminateOnPending.executorRatio":"0.5"
}

作业失败后的表现

触发终止后,作业表现如下:

  • 作业状态:SparkApplication先进入FailingState,随后变为FailedState。

  • 错误信息:status.appState.errorMessage中包含结构化的故障诊断信息。

  • Driver Pod:被主动删除以释放资源。

错误信息示例如下:

[ResourceQuotaExceeded] executors unschedulable: 5/10 (50%) for 5m12s; threshold ratio≥50%, age≥5m0s
denom=10 (spec.executor.instances), distinct reasons=1, oldest pod=my-job-exec-3 (pending since 2026-06-01T10:16:34Z)
scheduler reason: Unschedulable
scheduler message: 0/1279 nodes are available: quota not enough, quotaName: amv-x

错误信息开头方括号内标识了系统自动分类的故障原因。各分类的含义及处理建议如下:

故障分类

含义

处理建议

ECIPendingTimeout

ECI Pod超过最大Pending时长。

检查ECI规格库存,或切换ECI规格。

ResourceQuotaExceeded

资源配额不足。

联系管理员扩容配额,或减少作业并发。

InsufficientClusterResources

集群CPU或内存不足。

等待资源释放,或扩容集群。

说明

Watchdog仅将作业标记为失败,后续是否重试由作业的restartPolicy控制,与作业正常失败时的行为一致。关于应用重试,请参见本文应用重试。

指定Spark作业的运行环境

使用Virtual Environments打包Python环境,提交Spark作业时需配置以下参数。

参数名称

是否必填

默认值

参数说明

spark.pyspark.python

否

无

指定要使用的Python解释器的本地路径。

指定Spark版本

参数名称

是否必填

默认值

参数说明

spark.adb.version

否

3.2

指定Spark的版本。取值:

  • 2.4

  • 3.2

  • 3.3

  • 3.5

  • 4.0

高性能向量化执行引擎

参数名称

是否必填

默认值

参数说明

spark.adb.native.enabled

否

false

是否开启高性能向量化执行引擎执行作业,AnalyticDB Spark内置高性能向量化执行引擎,与开源Spark完全兼容,您无需对现有代码做任何修改即可开启。

湖存储加速

参数名称

是否必填

默认值

参数说明

spark.adb.lakecache.enabled

否

false

是否开启湖存储加速(LakeCache)。

AnalyticDB for MySQL不支持的配置参数

AnalyticDB for MySQLSpark暂不支持以下开源Spark的配置参数。这些配置参数对于AnalyticDB for MySQLSpark不会生效。

Useless options(these options will be ignored):
  --deploy-mode
  --master
  --packages, please use `--jars` instead
  --exclude-packages
  --proxy-user
  --repositories
  --keytab
  --principal
  --queue
  --total-executor-cores
  --driver-library-path
  --driver-class-path
  --supervise
  -S,--silent
  -i <filename>