Spark应用配置参数说明

更新时间:

云原生数据仓库 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

指定DriverExecutor资源

参数名称

是否必填

默认值

参数说明

对应开源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.resourceSpecspark.executor.instances)时,spark.adb.acuPerApp无效,其他资源参数取值不变。

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

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

spark.driver.resourceSpec

medium

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

重要

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

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

spark.driver.coresspark.driver.memory

spark.executor.resourceSpec

medium

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

重要

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

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

spark.executor.coresspark.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作业分配32Executor,每个Executor的规格为 medium(即28 GB),每个Driver的规格为small(即14 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和数字的文件夹存储对应的节点日志。

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

spark.adb.event.logUploadDuration

false

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

spark.adb.buffer.maxNumEvents

1000

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

spark.adb.payload.maxNumEvents

10000

一次上传的EventOSS的最大数量。

spark.adb.event.pollingIntervalSecs

0.5

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

spark.adb.event.maxPollingIntervalSecs

60

重新上传EventOSS需要等待的最大时间间隔。单位为秒。如果上传失败需要重新上传,两次上传的时间间隔会大于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

EventLogOSS存储文件的切片大小,单位为 byte。EventLogOSS上是多个文件存储,例如 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.enabledtrue。

spark.adb.eni.securityGroupId

弹性网卡的安全组ID。

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

说明

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

spark.adb.eni.extraHosts

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

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

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

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的配置值,则会继续重试。

指定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>