作业配置指南

Serverless Spark作业的描述格式为JSON格式,包含作业名称,JAR包路径以及作业配置参数等信息。本文主要介绍如何配置Serverless Spark任务格式。

重要

云原生数据湖分析(DLA)产品已退市,云原生数据仓库 AnalyticDB MySQL 版湖仓版支持DLA已有功能,并提供更多的功能和更好的性能。AnalyticDB for MySQL相关使用文档,请参见Spark应用配置参数说明

Spark任务示例

本文以读取OSS数据为例,介绍Spark任务的编写方式,命令行参数格式为JSON格式。示例如下:

 {  
  "args": ["oss://${oss-buck-name}/data/test/test.csv"],
  "name": "spark-oss-test",
  "file": "oss://${oss-buck-name}/jars/test/spark-examples-0.0.1-SNAPSHOT.jar",
  "className": "com.aliyun.spark.oss.SparkReadOss",
  "conf": {
    "spark.driver.resourceSpec": "medium",
    "spark.executor.resourceSpec": "medium",
    "spark.executor.instances": 2,
    "spark.dla.connectors": "oss"
  }
}

上述示例描述了一个典型的离线Spark JAR任务的格式,包括任务的名字、主JAR、入口类、入口类参数以及Spark作业配置。如果开发者熟悉Spark社区用法的话,可以发现这些配置跟社区Spark-Submit工具的命令行参数类似。实际上,Serverless Spark参考了社区的用法,并跟社区的用法保持一致,包括参数名以及参数的语义。

作业参数说明

本章节对Serverless Spark作业参数进行说明。

参数名称

是否必填

示例值

使用说明

args

"args":["args0", "args1"]

Spark任务传入的参数,多个参数之间以英文逗号(,)分隔。

name

"name": "your_job_name"

Spark任务名称。

file

Python/Java/Scala应用必填

"file":"oss://bucket/path/to/your/jar"

Spark任务主文件的存储位置,可以是入口类所在的JAR包或者Python的入口执行文件。

说明

Spark任务主文件目前只支持存储在OSS中。

className

Java/Scala应用必填

"className":"com.aliyun.spark.oss.SparkReadOss"

Java或者Scala程序入口类。如果是Python则不需要指定。

sqls

SQL应用必填

"sqls":["select * from xxxx","show databases"]

本关键字是区别于社区Spark的DLA平台自研功能,允许用户不提交JAR包和Python文件,直接提交SQL离线作业。该关键字跟file, className, args关键字不能同时使用。用户可以在一个作业中指定多条SQL语句,中间以英文逗号(,)隔开。多条SQL语句按照指定的顺序依次执行。

jars

jars:["oss://bucket/path/to/jar","oss://bucket/path/to/jar"]

Spark任务依赖的JAR包,多个JAR包之间以英文逗号(,)分隔。JAR包在作业运行时会被加入到Driver和Executor JVM的ClassPath里面。

说明

Spark任务所依赖的所有JAR包须存储在OSS中。

files

"files":["oss://bucket/path/to/files","oss://bucket/path/to/files"]

Spark任务依赖的文件资源,文件会被下载到Driver和Executor进程的当前执行目录下。文件可以指定别名,比如oss://bucket/xx/yy.txt#yy,用户在代码中只需要使用./yy就可以访问文件,否则使用./yy.txt。多个文件中间用英文逗号(,)分隔。

说明
  • files中包含名为oss://<path/to>/log4j.properties的文件时(文件名固定为log4j.properties),Spark会使用该log4j.properties作为日志配置。

  • Spark任务所依赖的所有文件须存储在OSS中。

archives

"archives":["oss://bucket/path/to/archives","oss://bucket/path/to/archives"]

Spark任务依赖的文件包资源,目前支持ZIP、TAR、TAR.GZ后缀。文件包会被解压到当前Spark进程的当前目录下。文件包可以指定别名,比如oss://bucket/xx/yy.zip#yy,用户在代码中只需要使用./yy/zz.txt就可以访问解压后的文件,否则使用./yy.zip/zz.txt访问文件(假设zz.txt是yy.zip压缩包中的文件)。多个文件包中间使用英文逗号(,)分隔。

说明

Spark任务所依赖的所有文件包须存储在OSS中。文件包解压缩失败,任务会失败。

pyFiles

Python应用可选

"pyFiles":["oss://bucket/path/to/pyfiles","oss://bucket/path/to/pyfiles"]

PySpark依赖的Python文件,后缀可以是ZIP、PY和EGG。如果依赖多个Python文件,建议用户使用ZIP或者EGG文件包。这些文件可以直接在Python代码中以module的方式引用。多个文件包中间使用英文逗号(,)分隔。

说明

Spark任务所依赖的所有Python文件须存储在OSS中。

conf

"conf":{"spark.xxxx":"xxx","spark.xxxx":"xxxx"}

与开源Spark中的配置项相同,参数格式为key: value形式,多个参数之间以英文逗号(,)分隔。

若不填写conf,系统使用创建虚拟集群时设置的默认值。

DLA Spark 配置项

DLA Spark配置项跟社区Spark中的配置项基本保持一致,本章节将对其中不一致的地方以及DLA Serverless Spark平台提供的参数进行说明。

  • 与社区Spark不一致的地方

    指定DriverExecutor资源大小。

    参数名称

    使用说明

    对应社区Spark参数

    spark.driver.resourceSpec

    表示spark driver的资源规格。取值:

    • small:表示1c4g

    • medium:表示2c8g

    • large:表示4c16g

    • xlarge:表示8c32g

    spark.driver.cores以及spark.driver.memory

    spark.executor.resourceSpec

    表示spark executor的资源规格,同spark.driver.resourceSpec。

    spark.executor.cores以及spark.executor.memory

  • DLA Spark相关参数

    • Spark UI相关参数:

      参数名称

      默认值

      参数说明

      spark.dla.job.log.oss.uri

      用于存储DLA Spark作业产生的作业日志以及SparkUI EventLog的目录,目前只支持用户的OSS路径。如果不填无法看到作业日志,作业结束后无法打开SparkUI。

    • RAM账号运维Spark相关参数:

      参数名称

      默认值

      参数说明

      spark.dla.roleArn

      RAM系统中授予提交作业的子账号的roleArn,子账号提交作业需要填写该参数,主账号提交作业无需提交该参数。

    • DLA Spark内置数据源连接器。

      参数名称

      默认值

      参数说明

      spark.dla.connectors

      启用DLA Spark内置的连接器,连接器名称以逗号隔开,目前可选的连接器有 oss、hbase1.x、tablestore。

      spark.hadoop.job.oss.fileoutputcommitter.enable

      false

      开启parquet格式写入优化。请参考OSS

      重要
      • 需要两个参数同时使用。

      • 不支持与其它数据格式混用。

      • 必须设置 "spark.dla.connectors": "oss" 。

      spark.sql.parquet.output.committer.class

      com.aliyun.hadoop.mapreduce.lib.output.OSSFileOutputCommitter

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

      false

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

    • 访问用户VPC连接用户数据源相关参数:

      参数名称

      默认值

      参数说明

      spark.dla.eni.enable

      false

      这个参数为true表示启用打通VPC功能。

      spark.dla.eni.vswitch.id

      开启打通VPC功能,用于弹性网卡的交换机ID。一般地,如果用户有ECS可以访问目标数据源,那么可以直接使用该ECS的交换机ID。

      spark.dla.eni.security.group.id

      开启打通VPC功能,用于弹性网卡的安全组ID。一般地,如果用户有ECS可以访问目标数据源,那么可以直接使用该ECS的安全组ID。

      spark.dla.eni.extra.hosts

      需要额外传入的IP和Host的映射关系,以便Spark能正确解析用户数据源中的域名信息。如连接用户的Hive数据源,就需要传入此参数。

      重要

      IP和域名之间用空格隔开。多个IP和域名用逗号隔开,如"ip0 master0, ip1 master1"。

    • Spark SQL链接DLA元数据相关参数:

      参数名称

      默认值

      参数说明

      spark.sql.hive.metastore.version

      1.2.1

      用于指定Hive MetaStore的版本,DLA Spark扩充了社区版该参数的可取值,当设置为dla时,用户即可使用Spark SQL访问DLA元数据。

    • PySpark相关参数:

      参数名称

      默认值

      参数说明

      spark.kubernetes.pyspark.pythonVersion

      2

      DLA Spark使用的Python版本,可取值为2和3。2代表使用Python2,3代表使用Python3。

    • 作业重试相关参数:

      参数名称

      默认值

      参数说明

      示例

      spark.dla.job.maxAttempts

      1

      作业最大尝试次数,默认为1,代表作业不支持重试。

      说明

      取值范围为[1, 9999]。如果作业成功则不再继续尝试,如果作业失败,且该值大于1,会自动进行下一次尝试。

      假设spark.dla.job.maxAttempts=3,则这个作业最多尝试3次。

      spark.dla.job.attemptFailuresValidityInterval

      -1

      作业尝试追踪的有效时间间隔,默认值为-1,代表未启用作业尝试追踪。

      重要
      • 如果作业尝试结束时间距离当前时间已经超过了指定的时间间隔,则该次尝试不会被计入失败的次数。

      • 值如果设置的过小,很容易导致错误的作业被无限重试,因此默认情况下不建议设置该值。

      • 值可以带单位,支持的单位有:

        • ms:毫秒,默认单位。

        • m:分钟。

        • h: 小时。

        • d:天。

      假设spark.dla.job.attemptFailuresValidityInterval=30m,当前时间是12:40,已存在JobAttempt0的结束时间为12:00,JobAttempt1的结束时间为12:30,JobAttempt2的结束时间为12:35,则JobAttempt0不被计入尝试次数,这个作业的有效尝试只有JobAttempt1和JobAttempt2,总尝试计数为2。

    • 资源配置相关参数:

      参数名称

      默认值

      参数说明

      spark.dla.driver.cpu-vcores-ratio

      1

      Driver虚拟Core实际CPU Core之间的比例。

      假设Driver是Medium规格(2C8G),本参数值设置为2,那么Driver进程可以按照4个Core进行并发控制,相当于spark.driver.cores=4。

      spark.dla.executor.cpu-vcores-ratio

      1

      Executor虚拟Core实际CPU Core之间的比例。当单个Task的CPU使用率比较低时,可以通过该配置,提升CPU利用效率。

      假设Executor是Medium规格(2C8G),本参数值设置为2,那么Executor进程可以按照4个Core进行并发控制,也就是同时调度4个并发任务,相当于spark.executor.cores=4。

    • 监控相关参数:

      参数名称

      默认值

      参数说明

      spark.dla.monitor.enabled

      true

      作业级别监控开关,默认打开。

      当设置为false后将不采集当前作业的监控数据 。