Spark应用开发介绍

云原生数据仓库 AnalyticDB MySQL 版Spark离线应用和流应用的开发方法相同。本文介绍如何进行Spark作业开发。

开发工具

示例代码

本文以读取OSS数据为例,描述了Spark应用代码的编写方式,其中包括应用名称、conf配置参数等通用参数,还包括Java、Scala、Python应用的特定配置参数。命令行参数格式为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"
  }
}

通用参数

参数名称

是否必填

示例值

使用说明

name

"name": "spark-oss-test"

Spark应用名称。

file

Python/Java/Scala应用必填

"file":"oss://<testBucketName>/jars/test/spark-examples-0.0.1-SNAPSHOT.jar"

Spark应用主文件的存储路径,文件路径需为绝对路径。主文件是入口类所在的JAR包或者Python的入口执行文件。

    重要

    Spark应用主文件目前只支持存储在OSS中。

    OSS Bucket与AnalyticDB for 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中。压缩包解压缩失败,任务会失败。

conf

"conf":{"spark.driver.resourceSpec": "medium",spark.executor.resourceSpec":"medium,"spark.executor.instances": 2,"spark.adb.connectors": "oss"}

与开源Spark中的配置项基本一致,参数格式为key: value形式,多个参数之间以英文逗号(,)分隔。与开源Spark用法不一致的配置参数及AnalyticDB for MySQL特有的配置参数,请参见Spark应用配置参数说明

Java应用参数

参数名称

是否必填

示例值

使用说明

args

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

请根据业务需求,填写使用JAR包时需要使用的参数。多个参数之间以英文逗号(,)分隔。

className

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

Java程序入口类名称。

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 for MySQL集群需要在同一地域。

Scala应用参数

参数名称

是否必填

示例值

使用说明

className

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

Scala程序入口类名称。

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 for MySQL集群需要在同一地域。

Python应用参数

参数名称

是否必填

示例值

使用说明

pyFiles

"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中。