AnalyticDB MySQL版Spark配置参数跟开源Spark中的配置参数基本一致。本文介绍AnalyticDB MySQL与开源Spark用法不一致的配置参数。

适用场景

Conf配置参数适用以下场景:
  • 通过SQL开发编辑器开发Spark SQL应用。
  • 通过Spark Jar开发编辑器开发Spark离线应用。
  • 通过Spark-Submit命令行工具开发Spark离线应用。

指定Driver和Executor资源

参数名称是否必填参数说明对应开源Spark参数名称
spark.driver.resourceSpecSpark driver的资源规格。不同型号的取值对应不同的规格,详情请参见Spark资源规格列表的型号列。
重要
  • spark.driver.resourceSpecspark.executor.resourceSpec参数取值相同。
  • 仅提交Spark离线应用时,可使用开源Spark参数,且取值需为Spark资源规格列表中的核数和内存。

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

spark.driver.coresspark.driver.memory
spark.executor.resourceSpecSpark executor的资源规格。不同型号的取值对应不同的规格,详情请参见Spark资源规格列表的型号列。
重要
  • spark.driver.resourceSpecspark.executor.resourceSpec参数取值相同。
  • 仅提交Spark离线应用时,可使用开源Spark参数,且取值需为Spark资源规格列表中的核数和内存。

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

spark.executor.coresspark.executor.memory
spark.adb.driver.cpu-vcores-ratioDriver虚拟Core与实际CPU Core之间的比例。默认值为1。假设Driver是Medium规格(2Core8 GB),本参数值设置为2,那么Driver进程可以按照4个Core进行并发控制,相当于spark.driver.cores=4。
spark.adb.executor.cpu-vcores-ratioExecutor虚拟Core与实际CPU Core之间的比例。默认值为1。当单个任务的CPU使用率比较低时,可以通过该配置,提升CPU使用率。假设Executor是Medium规格(2Core8 GB),本参数值设置为2,那么Executor进程可以按照4个Core进行并发控制,也就是同时调度4个并发任务,相当于spark.executor.cores=4。

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.25。

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

表 1. Spark资源规格列表
型号(Type)规格使用的ACU数量
CPU(Core)内存(GB)
c.small120.8
small141
m.small181.25
c.medium241.6
medium282
m.medium2162.5
c.large483.2
large4164
m.large4325
c.xlarge8166.4
xlarge8328
m.xlarge86410
c.2xlarge163212.8
2xlarge166416
m.2xlarge1612820

标记Spark作业优先级

参数名称是否必填默认值参数说明
spark.adb.priorityNORMAL标记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 MySQL中的元数据信息。
  • <hive_version>:指定Hive MetaStore的版本。
说明
  • Spark支持的Hive版本,请参见Spark Configuration
  • 如需要连接自建的Hive Metastore,可以采用社区Spark的标准配置方式,该配置会覆盖默认配置。请参见Spark Configuration

示例

  • 连接AnalyticDB 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.rootPathoss://<aliyun-oa-adb-spark-阿里云账号ID-oss-可用区ID>/<集群ID>/<Spark应用ID>存储AnalyticDB MySQL版Spark作业日志及Linux操作系统输出内容的路径。
默认OSS路径Spark应用ID的文件夹下存储的内容如下:
  • 名称为Spark应用ID-000X的文件存储用于Spark UI渲染的Spark Event日志。
  • 名称为driver和数字的文件夹存储对应的节点日志。
  • 名称为stdoutstderr的文件夹存储Linux操作系统的输出内容。

为RAM用户授权

参数名称是否必填默认值参数说明
spark.adb.roleArnRAM系统中授予提交Spark应用的RAM用户的角色ARN,详情请参见RAM角色概览。RAM用户提交应用需要填写该参数,阿里云账号无需填写该参数。
说明 如果已在控制台为RAM用户进行了快速授权操作,则无需再通过配置参数为该RAM用户授权。详情请参见快速授权

内置数据源连接器

参数名称是否必填默认值参数说明
spark.adb.connectors启用AnalyticDB MySQL版Spark内置的连接器,连接器名称以逗号分隔,目前可选的连接器有OSS、hbase1.x、tablestore。
spark.hadoop.io.compression.codec.snappy.nativefalse标识Snappy文件是否为标准Snappy文件。Hadoop默认识别的是Hadoop修改过的Snappy格式文件。设置为true时将使用标准Snappy库解压,否则使用hadoop默认的Snappy库解压。

跨VPC访问和连接数据源

参数名称是否必填默认值参数说明
spark.adb.eni.enabledfalse是否开启ENI访问的开关。
如果是通过外表访问其他外部数据源,则需要打开ENI访问开关。取值说明:
  • true:开启
  • false:关闭
spark.adb.eni.vswitchId弹性网卡的交换机ID。
如果是从ECS通过VPC网络连接AnalyticDB MySQL版,需要配置VPC网络的交换机ID。
说明 当配置了开启VPC网络时,需要同时开启ENI访问,即配置spark.adb.eni.enabled为true。
spark.adb.eni.securityGroupId弹性网卡的安全组ID。
如果是从ECS通过VPC网络连接AnalyticDB 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.enabledfalse是否开启自动将AnalyticDB MySQL版服务所需要的域名解析信息写入到域名映射表中。取值说明:
  • true:开启。
  • false:关闭。

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

应用重试

参数名称是否必填默认值参数说明
spark.adb.maxAttempts1最大尝试次数,默认值为1,代表不需要重试。

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

spark.adb.attemptFailuresValidityIntervalLong.MAX重试计数的滑动窗口时间,单位:毫秒(ms)。

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

AnalyticDB MySQL不支持的配置参数

AnalyticDB MySQL Spark暂不支持以下开源Spark的配置参数。这些配置参数对于AnalyticDB MySQL Spark不会生效。
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>