通过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
执行以下命令,下载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
执行以下命令,解压并安装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。
| LTAI5tFosFYFgrt3NzBX**** |
ossSecretId | 否 | 1BvoSGRT4FV7GB07VVgrRGUty**** | |
ossUploadPath | 否 | oss://testBucketname/jars/test1.jar | |
conf参数 | 否 | 与开源Spark中的配置项基本一致,参数格式为 |
提交Spark应用
将Spark应用依赖JAR包上传到OSS中,具体操作,请参见简单上传。
执行以下命令,进入Spark-Submit工具的目录。
cd adb-spark-toolkit-submit
按如下格式提交应用。
./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。 提交任务不是一个幂等操作,由于网络超时等原因导致的提交失败,实际上任务可能在后台执行成功,为防止任务重复提交,提交任务失败将不会重试。您需要自行获取已经提交的任务列表( |
--time-out-seconds | AnalyticDB for MySQL Spark-Submit内部默认的网络超时时间,超时命令将会失败重试。单位:秒(s),默认值:10。 |
--enable-inner-endpoint | 当您使用阿里云ECS机器提交Spark时,可以指定此选项,AnalyticDB for MySQL Spark-Submit将使用VPC内网环境来访问各个服务。 |
--list | 获取应用列表,常搭配 例如,返回第一页的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不支持的配置参数。