Serverless Spark作业的描述格式为JSON,包含作业名称,jar包路径以及作业配置参数等信息。本文将描述如何配置Serverless 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 Spark任务传入的参数,多个参数之间以英文逗号(,)分隔。
name Spark任务名称。
file Spark任务主文件的存储位置,可以是入口类所在的Jar包或者Python的入口执行文件。

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

Python/Java/Scala应用必填
className Java或者Scala程序入口类,例如com.aliyun.spark.oss.SparkReadOss。如果是Python则不需要指定 Java/Scala应用必选
sqls 本关键字是区别于社区Spark的DLA平台自研功能,允许用户不提交Jar包和Python文件,直接提交SQL离线作业。该关键字跟“file”关键字不能同时使用。用户可以在一个作业中指定多条SQL语句,中间以英文逗号(,)隔开。多条SQL语句按照指定的顺序依次执行。 sql应用必填
jars Spark任务依赖的jar包,多个jar包之间以英文逗号(,)分隔。Jar包在作业运行时会被加入到Driver和Executor JVM的ClassPath里面。

注意:Spark任务所依赖的所有jar包须存储在OSS中。

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

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

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

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

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

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

DLA Spark 配置项

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

  • 与社区Spark不一致的地方
    指定DriverExecutor资源大小。
    参数名称 使用说明 对应社区Spark参数
    spark.driver.resourceSpec 表示spark driver的资源规格,目前有small、medium、large、xlarge可选。small 代表1c4g,meduim代表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相关参数
    • SparkUI相关参数:
      参数名称 默认值 参数说明
      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、ots。
      spark.hadoop.job.oss.fileoutputcommitter.enable false 开启 parquet 格式写入优化。参考 OSS FileOutputCommitter
      注意
      1. 需要两个参数同时使用。
      2. 不支持与其它数据格式混用。
      3. 必须设置 "spark.dla.connectors": "oss" 。
      spark.sql.parquet.output.committer.class com.aliyun.hadoop.mapreduce.lib.output.OSSFileOutputCommitter
    • 访问用户VPC连接用户数据源相关参数:
      参数名称 默认值 参数说明
      spark.dla.eni.enable false 这个参数为ture表示启用打通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"。
    • SparkSQL连接DLA元数据相关参数:
      参数名称 默认值 参数说明
      spark.sql.hive.metastore.version 1.2.1 用于指定Hive MetaStore的版本,DLASpark扩充了社区版该参数的可取值,当设置为dla时,用户即可使用SparkSQL访问DLA元数据。
    • PySpark相关参数:
      参数名称 默认值 参数说明
      spark.kubernetes.pyspark.pythonVersion 2 DLA Spark 使用的python版本,可取值为 2 和 3。2代表使用python2,3代表使用python3。