Spark应用配置参数说明
云原生数据仓库 AnalyticDB MySQL 版(AnalyticDB for MySQL)Spark配置参数跟开源Spark中的配置参数基本一致。本文介绍AnalyticDB for MySQL与开源Spark用法不一致的配置参数。
使用说明
Spark应用配置参数用于配置和调整Spark应用程序的行为和性能。使用不同的Spark开发工具,应用配置参数的格式不同。
开发工具 | 配置参数格式 | 配置参数示例 |
SQL开发编辑器 | set key=value; |
|
Spark Jar开发编辑器 | "key": "value" |
|
Notebook开发编辑器 | "key": "value" |
|
spark-submit命令行工具 | key=value |
|
指定Driver和Executor资源
参数名称 | 是否必填 | 默认值 | 参数说明 | 对应开源Spark参数名称 |
spark.adb.acuPerApp | 否 | 无 | 单个Spark作业执行时所使用的ACU,取值范围为[2,Job型资源组计算最大资源]。 配置该参数后,系统会自动计算并配置Spark Driver规格、Spark Executor规格和Spark Executor节点个数。 | 无 |
spark.driver.resourceSpec | 是 | medium | Spark Driver的资源规格。不同型号的取值对应不同的规格,详情请参见Spark资源规格列表的型号列。 重要 提交Spark应用时,可使用开源Spark参数,且取值需为Spark资源规格列表中的核数和内存。 例如 | spark.driver.cores及spark.driver.memory |
spark.executor.resourceSpec | 是 | medium | Spark Executor的资源规格。不同型号的取值对应不同的规格,详情请参见Spark资源规格列表的型号列。 重要 提交Spark应用时,可使用开源Spark参数,且取值需为Spark资源规格列表中的核数和内存。 例如 | 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作业优先获取运行资源,从而保障其能更早进入执行状态。取值说明:
重要 建议设置Streaming类(长期运行的流作业)Spark作业的优先级为HIGH。 |
连接元数据服务
参数名称 | 是否必填 | 默认值 | 参数说明 |
spark.sql.catalogImplementation | 否 |
| 指定连接元数据服务的类型,支持如下配置:
|
spark.sql.hive.metastore.version | 否 |
| 指定采用元数据服务版本,支持如下配置:
说明
|
示例
连接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 | 否 |
| 存储AnalyticDB for MySQLSpark作业日志及Linux操作系统输出内容的路径。 默认OSS路径Spark应用ID的文件夹下存储的内容如下:
|
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.maxWaitOnEndSecs | 否 | 10 | Event上传到OSS的最大等待时间,单位为秒。最大等待时间为开始上传到完成上传的时间间隔。超过最大等待时间会重新上传。 |
spark.adb.event.waitForPendingPayloadsSleepIntervalSecs | 否 | 1 | 重新上传Event完成的最大时间,单位为秒。在超过 |
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访问开关。取值说明:
|
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数据源,则需要传入此参数。 说明
|
spark.adb.eni.adbHostAlias.enabled | 否 | false | 是否开启自动将AnalyticDB for MySQL服务所需要的域名解析信息写入到域名映射表中。取值说明:
在通过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后,本功能及相关参数方才生效。 |
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时,触发作业终止。 取值越小,触发越灵敏;取值越大,触发越宽松:
其中,期望Executor总数按以下优先级取值:
|
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错误信息开头方括号内标识了系统自动分类的故障原因。各分类的含义及处理建议如下:
故障分类 | 含义 | 处理建议 |
| ECI Pod超过最大Pending时长。 | 检查ECI规格库存,或切换ECI规格。 |
| 资源配额不足。 | 联系管理员扩容配额,或减少作业并发。 |
| 集群CPU或内存不足。 | 等待资源释放,或扩容集群。 |
Watchdog仅将作业标记为失败,后续是否重试由作业的restartPolicy控制,与作业正常失败时的行为一致。关于应用重试,请参见本文应用重试。
指定Spark作业的运行环境
使用Virtual Environments打包Python环境,提交Spark作业时需配置以下参数。
参数名称 | 是否必填 | 默认值 | 参数说明 |
spark.pyspark.python | 否 | 无 | 指定要使用的Python解释器的本地路径。 |
指定Spark版本
参数名称 | 是否必填 | 默认值 | 参数说明 |
spark.adb.version | 否 | 3.2 | 指定Spark的版本。取值:
|
高性能向量化执行引擎
参数名称 | 是否必填 | 默认值 | 参数说明 |
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>