Serverless Spark作业的描述格式为JSON格式,包含作业名称,JAR包路径以及作业配置参数等信息。本文主要介绍如何配置Serverless Spark任务格式。
上述示例描述了一个典型的离线Spark JAR任务的格式,包括任务的名字、主JAR、入口类、入口类参数以及Spark作业配置。如果开发者熟悉Spark社区用法的话,可以发现这些配置跟社区Spark-Submit工具的命令行参数类似。实际上,Serverless
Spark参考了社区的用法,并跟社区的用法保持一致,包括参数名以及参数的语义。
说明
Spark任务主文件目前只支持存储在OSS中。
Java/Scala应用必填
"className":"com.aliyun.spark.oss.SparkReadOss"
Java或者Scala程序入口类。如果是Python则不需要指定。
SQL应用必填
"sqls":["select * from xxxx","show databases"]
本关键字是区别于社区Spark的DLA平台自研功能,允许用户不提交JAR包和Python文件,直接提交SQL离线作业。该关键字跟
file, className, args
关键字不能同时使用。用户可以在一个作业中指定多条SQL语句,中间以英文逗号(,)隔开。多条SQL语句按照指定的顺序依次执行。
jars:["oss://bucket/path/to/jar","oss://bucket/path/to/jar"]
Spark任务依赖的JAR包,多个JAR包之间以英文逗号(,)分隔。JAR包在作业运行时会被加入到Driver和Executor JVM的ClassPath里面。
说明
Spark任务所依赖的所有JAR包须存储在OSS中。
"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":["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":{"spark.xxxx":"xxx","spark.xxxx":"xxxx"}
与开源Spark中的配置项相同,参数格式为
key: value
形式,多个参数之间以英文逗号(,)分隔。
若不填写conf,系统使用创建虚拟集群时设置的默认值。
DLA Spark 配置项
DLA Spark配置项跟社区Spark中的配置项基本保持一致,本章节将对其中不一致的地方以及DLA Serverless Spark平台提供的参数进行说明。
与社区Spark不一致的地方
指定
Driver
和
Executor
资源大小。
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库解压。
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"。
如果作业尝试结束时间距离当前时间已经超过了指定的时间间隔,则该次尝试不会被计入失败的次数。
值如果设置的过小,很容易导致错误的作业被无限重试,因此默认情况下不建议设置该值。
值可以带单位,支持的单位有:
ms:毫秒,默认单位。
m:分钟。
h: 小时。
spark.dla.executor.cpu-vcores-ratio
Executor虚拟Core实际CPU Core之间的比例。当单个Task的CPU使用率比较低时,可以通过该配置,提升CPU利用效率。
假设Executor是Medium规格(2C8G),本参数值设置为2,那么Executor进程可以按照4个Core进行并发控制,也就是同时调度4个并发任务,相当于spark.executor.cores=4。