通过Spark-Submit命令行工具开发Spark应用

云原生数据仓库 AnalyticDB MySQL 版提供Spark-Submit命令行工具,当您在通过客户端连接集群进行Spark开发时,需要借助该命令行工具提交Spark应用。本文介绍如何通过AnalyticDB for MySQL的Spark-Submit命令行工具进行Spark应用开发。

前提条件

  • 集群的产品系列为企业版、基础版或湖仓版

  • 已创建Job型资源组。具体操作,请参见新建资源组

  • 集群与OSS存储空间位于相同地域。

  • 已安装JDK,且JDK的版本为1.8及以上版本。

注意事项

通过Spark-Submit命令行工具进行作业开发时,仅支持提交Spark Jar应用,不支持提交Spark SQL。

下载并安装Spark-Submit

  1. 执行以下命令,下载Spark-Submit命令行工具的安装包adb-spark-toolkit-submit-0.0.1.tar.gz

    wget https://dla003.oss-cn-hangzhou.aliyuncs.com/adb-spark-toolkit-submit-0.0.1.tar.gz
  2. 执行以下命令,解压并安装Spark-Submit。

    tar zxvf adb-spark-toolkit-submit-0.0.1.tar.gz

Spark应用配置参数

Spark-Submit安装包解压完成后,进入adb-spark-toolkit-submit/conf目录,执行vim spark-defaults.conf命令修改配置项。修改后,Spark-Submit命令行工具的脚本将自动读取配置文件中的信息,配置参数会对所有Spark应用生效。

Spark应用配置参数列表如下:

参数

是否必填

参数说明

示例值

keyId

阿里云账号或具备AnalyticDB for MySQL访问权限的RAM用户的AccessKey ID。

如何获取AccessKey ID和AccessKey Secret,请参见账号与权限

LTAI5tFosFYFgrt3NzBX****

secretId

阿里云账号或具备AnalyticDB for MySQL访问权限的RAM用户的AccessKey Secret。

如何获取AccessKey ID和AccessKey Secret,请参见账号与权限

1BvoSGRT4FV7GB07VVgrRGUty****

regionId

AnalyticDB for MySQL集群的地域ID。

cn-hangzhou

clusterId

AnalyticDB for MySQL集群的集群ID。

amv-bp1908350u5****

rgName

执行Spark应用的Job型资源组名称。

test

ossKeyId

Spark Jar应用需要的JAR包存储在本地路径时,需要配置ossKeyId、ossSecretId、ossUploadPath。

  • ossKeyId、ossSecretId为阿里云账号或RAM用户的AccessKey ID和AccessKey Secret。RAM用户需具备AliyunOSSFullAccess权限。

  • ossUploadPath为本地JAR包上传至OSS的路径。

LTAI5tFosFYFgrt3NzBX****

ossSecretId

1BvoSGRT4FV7GB07VVgrRGUty****

ossUploadPath

oss://testBucketname/jars/test1.jar

conf参数

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

提交Spark应用

  1. 将Spark应用依赖JAR包上传到OSS中,具体操作,请参见简单上传

  2. 执行以下命令,进入Spark-Submit工具的目录。

    cd adb-spark-toolkit-submit
  3. 按如下格式提交应用。

    ./bin/spark-submit  \
    --class com.aliyun.spark.oss.SparkReadOss \
    --verbose \
    --name Job1 \
    --jars oss://testBucketname/jars/test.jar,oss://testBucketname/jars/search.jar\
    --conf spark.driver.resourceSpec=medium \
    --conf spark.executor.instances=1 \
    --conf spark.executor.resourceSpec=medium \
    oss://testBucketname/jars/test1.jar args0 args1
    说明

    Spark应用提交后,返回码说明如下:

    • 255:应用执行失败。

    • 0:应用执行成功。

    • 143:应用被Kill。

    参数说明如下。

    参数名称

    参数说明

    --class

    Java或者Scala程序入口类名称。Python不需要指定入口类。

    --verbose

    打印出提交Spark过程中产生的日志。

    --name

    Spark应用名称。

    --jars

    Spark应用依赖的JAR包所在的路径,可以是本地路径或OSS路径。需为绝对路径。如果有多个JAR包,路径之间以英文逗号(,)分隔。

    如果您配置本地路径,您需注意以下内容:

    • RAM用户具备OSS的AliyunOSSFullAccess权限。

    • 需在conf/spark-defaults.conf配置文件中设置ossUploadPath参数,指定本地文件资源上传到OSS的路径。

    • 文件资源上传时,会使用md5校验文件内容,当指定的OSS路径中有相同文件名且md5相同时,将不再重复上传。

    • 如果手动更新了OSS路径中的JAR包,请删除对应的md5文件。

    --conf

    Spark应用的配置参数。

    与开源Spark-Submit中的配置基本一致。与开源Spark-Submit用法不一致的配置参数及AnalyticDB for MySQL Spark-Submit特有的配置参数,请参见AnalyticDB for MySQL Spark-Submit与开源Spark-Submit的区别

    说明

    配置多个conf时,格式为:--conf key1=value1 --conf key2=value2。

    oss://testBucketname/jars/test1.jar args0 args1

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

    说明

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

    args

    请根据业务需求,填写使用JAR包时需要使用的参数。多个参数之间以空格分隔。

查看Spark应用列表

./bin/spark-submit --list --clusterId <cluster_Id>  --rgName <ResourceGroup_name> --pagenumber 1 --pagesize 3

参数说明:

  • cluster_Id:AnalyticDB for MySQL集群的集群ID。

  • ResourceGroup_name:执行Spark应用使用的Job型资源组名称。

查询Spark应用状态

./bin/spark-submit --status <appId>

appId可在Spark应用列表中查看,详情请参见查看Spark应用列表

查询Spark应用提交参数和SparkUI

./bin/spark-submit --detail <appId>

appId可在Spark应用列表中查看,详情请参见查看Spark应用列表

返回结果中Spark WEB UI字段即Spark UI地址。

查询Spark应用日志

./bin/spark-submit --get-log <appId>

appId可在Spark应用列表中查看,详情请参见查看Spark应用列表

结束Spark应用

./bin/spark-submit --kill <appId>

appId可在Spark应用列表中查看,详情请参见查看Spark应用列表

AnalyticDB for MySQL Spark-Submit与开源Spark-Submit的区别

AnalyticDB for MySQL Spark-Submit特有的参数

参数名称

参数说明

--api-retry-times

AnalyticDB for MySQL Spark-Submit内部执行命令失败时的重试次数(除提交命令外),默认值:3。

提交任务不是一个幂等操作,由于网络超时等原因导致的提交失败,实际上任务可能在后台执行成功,为防止任务重复提交,提交任务失败将不会重试。您需要自行获取已经提交的任务列表(--list),或者在AnalyticDB for MySQL Spark控制台查看任务列表判断任务是否提交成功。

--time-out-seconds

AnalyticDB for MySQL Spark-Submit内部默认的网络超时时间,超时命令将会失败重试。单位:秒(s),默认值:10。

--enable-inner-endpoint

当您使用阿里云ECS机器提交Spark时,可以指定此选项,AnalyticDB for MySQL Spark-Submit将使用VPC内网环境来访问各个服务。

--list

获取应用列表,常搭配--pagenumber--pagesize使用。

例如,返回第一页的5个应用,则配置如下:

--list 
--pagenumber 1 
--pagesize 5

--pagenumber

指定应用列表的页数。默认值为1。

--pagesize

指定应用列表每页显示的应用个数。默认值为10。

--kill

终止应用。

--get-log

查询应用日志。

--status

查询应用详情。

AnalyticDB for MySQL Spark-Submit不支持的开源Spark-Submit参数

AnalyticDB for MySQL Spark-Submit暂不支持开源Spark-Submit的配置参数。详情请参见AnalyticDB for MySQL不支持的配置参数