本文以ECS连接AnalyticDB MySQL为例,介绍如何通过AnalyticDB MySQL Spark-Submit命令行工具进行Spark作业开发。
背景信息
当您使用客户端连接湖仓版(3.0)集群时,在进行Spark开发时,需要通过AnalyticDB MySQL Spark-Submit命令行工具提交Spark应用。
AnalyticDB MySQLSpark-Submit命令行工具仅用于提交Spark离线应用,不能提交Spark SQL应用。
前提条件
已安装Java 1.8或以上版本。
下载并安装AnalyticDB MySQL Spark-Submit
- 在Linux命令行工具,执行以下命令,下载AnalyticDB MySQL 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
- 执行以下命令,解压并安装AnalyticDB MySQL Spark-Submit。
tar zxvf adb-spark-toolkit-submit-0.0.1.tar.gz
参数配置
AnalyticDB MySQL Spark离线应用的Conf配置参数既可以直接在conf/spark-defaults.conf
配置文件中修改,也可以通过命令行修改。推荐在conf/spark-defaults.conf
配置文件中修改,AnalyticDB MySQL Spark-Submit命令行工具的脚本将自动读取Conf配置文件中的信息。如果您通过命令行方式修改了Conf配置参数取值,配置文件中的参数不会被覆盖,离线应用的配置将按照命令行中的配置生效。
- AnalyticDB MySQL Spark-Submit安装包解压完成后,执行以下命令,进入修改
adb-spark-toolkit-submit/conf/spark-defaults.conf
配置项。vim adb-spark-toolkit-submit/conf/spark-defaults.conf
- 推荐按照如下内容对文件进行配置,参数格式为
key=value
,示例如下。keyId = yourAkId secretId = yourAkSec regionId = cn-hangzhou clusterId = amv-bp15f9q95p**** rgName = sg-default ossUploadPath = oss://<bucket_name>/sparkjars/ spark.driver.resourceSpec = medium spark.executor.instances = 2 spark.executor.resourceSpec = medium spark.adb.roleArn = arn:1234567/adbsparkprocessrole spark.adb.eni.vswitchId = vsw-defaultswitch spark.adb.eni.securityGroupId = sg-defaultgroup spark.app.log.rootPath = oss://<bucket_name>/sparklogs/
表 1. 参数配置说明 参数 参数说明 是否必选 keyId 执行Spark作业使用的阿里云账号或RAM用户的AccessKey ID。如何查看AccessKey ID,请参见获取AccessKey信息。 是 secretId 阿里云账号或RAM用户的AccessKeySecret。 是 regionId 湖仓版(3.0)集群所在地域的地域ID。 是 clusterId AnalyticDB MySQL湖仓版(3.0)集群的ID。 是 rgName 执行Spark作业使用的湖仓版(3.0)集群的资源组名称。 是 ossKeyId 创建OSS Bucket使用的阿里云账号或RAM用户的AccessKey ID。 当JAR包存储在本地路径中,需要上传JAR包时,可配置OSS参数将本地的JAR包自动上传到OSS路径中。
否 ossSecretId 创建OSS Bucket使用的阿里云账号或RAM用户的AccessKeySecret。 否 ossEndpoint OSS内网Endpoint。OSS地域与Endpoint的对应关系,请参见访问域名和数据中心。 否 ossUploadPath 配置JAR包所在的OSS路径。 否
配置兼容性说明
--conf spark.adb.access.key.id=<value>
--conf spark.adb.access.secret.id=<value>
--conf spark.adb.regionId=<value>
--conf spark.adb.clusterId=<value>
--conf spark.adb.rgName=<value>
--conf spark.adb.oss.akId=<value>
--conf spark.adb.oss.akSec=<value>
--conf spark.adb.oss.endpoint=<value>
--conf spark.adb.oss.uploadPath=<value>
提交Spark作业
- 执行以下命令,进入Spark-Submit工具的目录。
cd adb-spark-toolkit-submit
- 按如下格式提交作业。
./bin/spark-submit \ --class com.aliyun.spark.oss.SparkReadOss \ --verbose \ --name <your_job_name> \ --jars oss://<bucket-name>/jars/xxx.jar,oss://<bucket-name>/jars/xxx.jar --conf spark.driver.resourceSpec=medium \ --conf spark.executor.instances=1 \ --conf spark.executor.resourceSpec=medium \ oss://<bucket-name>/jars/xxx.jar args0 args1
说明 Spark作业提交后,返回码说明如下:- 255:作业执行失败。
- 0:作业执行成功。
- 143:作业被Kill。
参数名称 | 示例值 | 参数说明 |
---|---|---|
--class | <class_name> | Java或者Scala程序入口类名称。Python不需要指定入口类。 |
--verbose | 无 | 打印出提交Spark过程中产生的日志。 |
--name | <spark_name> | Spark应用名称。 |
--jars | <jar_name> | Spark应用依赖的JAR包,多个JAR包之间以英文逗号(,)分隔。需填写JAR包文件的绝对路径。
说明 由于Spark-Submit上传本地JAR包时,需要RAM用户拥有对OSS的访问权限。您可以登录RAM访问控制,在用户页面为对应RAM用户添加AliyunOSSFullAccess权限。 |
--conf | <key=value> | Spark应用的配置参数。 与开源Spark-Submit中的配置基本一致。与开源Spark-Submit用法不一致的配置参数及AnalyticDB MySQL Spark-Submit特有的配置参数,请参见AnalyticDB MySQL Spark-Submit特有的参数和Conf配置参数。 说明
|
oss://<bucket-name>/jars/xxx.jar | <oss_path> | Spark应用主文件的存储路径,文件路径需为绝对路径。主文件是入口类所在的JAR包或者Python的入口执行文件。 说明 Spark应用主文件目前只支持存储在OSS中。 |
args | <args0 args1> | 请根据业务需求,填写使用JAR包时需要使用的参数。多个参数之间以空格分隔。 |
查看Spark作业列表
./bin/spark-submit --list --clusterId <cluster_Id> --rgName <ResourceGroup_name> --pagenumber 1 --pagesize 3
查询Spark作业状态
./bin/spark-submit --status <appId>
appId可在Spark作业列表中查看,详情请参见查看Spark作业列表。
Spark作业状态列表,详情请参见SparkAppInfo。
查询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作业
./spark-submit --kill <appId>
appId可在Spark作业列表中查看,详情请参见查看Spark作业列表。
AnalyticDB MySQL Spark-Submit与开源Spark-Submit的区别
AnalyticDB MySQL Spark-Submit特有的参数
参数名称 | 参数说明 |
---|---|
--api-retry-times | AnalyticDB MySQL Spark-Submit内部执行命令失败时的重试次数(除提交命令外)。提交任务不是一个幂等操作,由于网络超时等原因导致的提交失败,实际上任务可能在后台执行成功,为防止任务重复提交,提交任务失败将不会重试。您需要自行获取已经提交的任务列表(--list ),或者在AnalyticDB MySQL Spark控制台查看任务列表判断任务是否提交成功。 |
--time-out-seconds | AnalyticDB MySQL Spark-Submit内部默认的网络超时时间,超时命令将会失败重试。单位:秒(s),默认值:10。 |
--enable-inner-endpoint | 当您使用阿里云ECS机器提交Spark时,可以指定此选项,AnalyticDB MySQL Spark-Submit将使用VPC内网环境来访问各个服务。 重要 内网访问在某些地域处于待开启状态,并非所有地域都可以支持。目前支持中国内地杭州、上海和深圳地域。 |
--list | 获取作业列表,常搭配--pagenumber 和--pagesize 使用。例如,返回第一页的5个作业,则配置如下:
|
--pagenumber | 指定作业列表的页数。默认值为1。 |
--pagesize | 指定作业列表每页显示的作业个数。默认值为10。 |
--kill | 终止应用。 |
--get-log | 查询应用日志。 |
--status | 查询应用详情。 |
AnalyticDB MySQL Spark-Submit不支持的开源Spark-Submit参数
AnalyticDB MySQL Spark-Submit暂不支持开源Spark-Submit的配置参数。详情请参见AnalyticDB MySQL不支持的配置参数。