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

更新时间:

云原生数据仓库 AnalyticDB MySQL 版提供Spark-Submit命令行工具,当您在通过客户端连接集群进行Spark开发时,需要借助该命令行工具提交Spark应用。本文介绍如何通过AnalyticDB for MySQLSpark-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 IDAccessKey Secret,请参见账号与权限

secretId

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

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

regionId

AnalyticDB for MySQL集群的地域ID。

clusterId

AnalyticDB for MySQL集群的集群ID。

rgName

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

ossKeyId

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

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

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

ossSecretId

ossUploadPath

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用户具备OSSAliyunOSSFullAccess权限。

    • 需在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不支持的配置参数