AnalyticDB MySQL湖仓版(3.0)Spark离线应用和流应用的开发方法相同。本文以离线应用为例,介绍如何进行Spark作业开发。

开发工具

您可以通过如下两种开发工具进行Spark Batch和Streaming应用开发。

示例代码

本文以读取OSS数据为例,描述了典型的Spark离线应用的编写方式,包括应用名称、入口类所在的JAR包、入口类、入口类参数以及执行时的参数配置。命令行参数格式为JSON格式。示例如下:
 {
  "args": ["args0", "args1"],
  "name": "spark-oss-test",
  "file": "oss://<testBucketName>/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.adb.connectors": "oss"
  }
}
参数说明如下。
参数名称是否必填示例值使用说明
args "args":["args0", "args1"]请根据业务需求,填写使用JAR包时需要使用的参数。多个参数之间以英文逗号(,)分隔。
name "name": "spark-oss-test"Spark应用名称。
filePython/Java/Scala应用必填"file":"oss://<testBucketName>/jars/test/spark-examples-0.0.1-SNAPSHOT.jar"Spark应用主文件的存储路径,文件路径需为绝对路径。主文件是入口类所在的JAR包或者Python的入口执行文件。
重要
  • Spark应用主文件目前只支持存储在OSS中。
  • OSS Bucket与AnalyticDB MySQL集群需要在同一地域。
classNameJava/Scala应用必填"className":"com.aliyun.spark.oss.SparkReadOss"Java或者Scala程序入口类名称。Python不需要指定入口类。
jars"jars":["oss://<testBucketName>/path/to/jar","oss://testBucketName/path/to/jar"]Spark应用依赖的JAR包,多个JAR包之间以英文逗号(,)分隔。需填写JAR包文件的绝对路径。JAR包在运行时会被加入到Driver和Executor JVM的ClassPath里面。
重要
  • Spark应用所依赖的所有JAR包须存储在OSS中。
  • OSS Bucket与AnalyticDB MySQL集群需要在同一地域。
files"files":["oss://<testBucketName>/path/to/files_name1","oss://<testBucketName>/path/to/files_name2"]Spark应用依赖的文件资源,文件会被下载到Driver和Executor进程的当前执行目录下。

支持配置文件别名,例如oss://<testBucketName>/test/test1.txt#test1,test1为文件别名,您可以使用./test1或者./test1.txt访问文件。

多个文件中间用英文逗号(,)分隔。
说明
  • files中包含名为log4j.properties的文件时,Spark会使用该log4j.properties文件作为日志配置。
  • Spark应用所依赖的所有文件须存储在OSS中。
archives"archives":["oss://<testBucketName>/path/to/archives","oss://<testBucketName>/path/to/archives"]Spark应用依赖的压缩包资源,目前支持.TAR.GZ后缀。压缩包会被解压到当前Spark进程的当前目录下。

支持配置文件别名,例如oss://testBucketName/test/test1.tar.gz#test1,test1为文件别名。假设test2.txt是test1.tar.gz压缩包中的文件,您可以使用./test1/test2.txt或者./test1.tar.gz/test2.txt访问解压后的文件。

多个压缩包中间使用英文逗号(,)分隔。
说明 Spark应用所依赖的所有压缩包须存储在OSS中。压缩包解压缩失败,任务会失败。
pyFilesPython应用可选"pyFiles":["oss://<testBucketName>/path/to/pyfiles","oss://<testBucketName>/path/to/pyfiles"]PySpark依赖的Python文件,后缀可以是ZIP、PY和EGG。如果依赖多个Python文件,建议使用ZIP或者EGG压缩包。您可以在Python代码中以module方式引用Python文件。多个压缩包中间使用英文逗号(,)分隔。
说明 Spark应用所依赖的所有Python文件须存储在OSS中。
conf"conf":{"spark.driver.resourceSpec": "medium",spark.executor.resourceSpec":"medium,"spark.executor.instances": 2,"spark.adb.connectors": "oss"}与开源Spark中的配置项基本一致,参数格式为key: value形式,多个参数之间以英文逗号(,)分隔。与开源Spark用法不一致的配置参数及AnalyticDB MySQL特有的配置参数,请参见Conf配置参数