使用Spark-submit提交Spark Jar作业
DLI Spark-submit简介
DLI Spark-submit是一个用于提交Spark作业到DLI服务端的命令行工具,该工具提供与开源Spark兼容的命令行。
准备工作
- 授权。
DLI使用统一身份认证服务(Identity and Access Management,简称IAM)进行精细的企业级多租户管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全地控制华为云资源的访问。
通过IAM,您可以在华为云账号中给员工创建IAM用户,并使用策略来控制他们对华为云资源的访问范围。
目前包括角色(粗粒度授权)和策略(细粒度授权)。具体的权限介绍和授权操作请参考《数据湖探索用户指南》。
- 创建队列。在“资源管理 > 队列管理”下,单击右上角“购买队列”,进入购买队列页面选择“通用队列”,即Spark作业的计算资源。
如果创建队列的用户不是管理员用户,在创建队列后,需要管理员用户赋权后才可使用。关于赋权的具体操作请参考《数据湖探索用户指南》。
DLI 客户端工具下载
您可以在DLI管理控制台下载DLI客户端工具。
- 登录DLI管理控制台。
- 单击总览页右侧“常用链接”中的“SDK下载”。
- 在“DLI SDK DOWNLOAD”页面,单击“dli-clientkit-<version>”即可下载DLI客户端工具。
DLI客户端空间命名为“dli-clientkit-<version>-bin.tar.gz”,支持在Linux环境中使用,且依赖JDK 1.8及以上版本。
配置DLI Spark-submit
使用spark-submit的机器安装JDK 1.8或以上版本并配置环境变量,当前仅在Linux环境下使用spark-submit工具。
- 下载并解压工具包“dli-clientkit-<version>-bin.tar.gz”,其中version为版本号,以实际版本号为准。
- 进入解压目录,里面有三个子目录bin、conf、lib,分别存放了Spark-submit相关的执行脚本、配置文件和依赖包。
- 进入配置文件conf目录,修改“client.properties”中的配置项,(具体配置项参考表1)。
表1 DLI 客户端工具配置参数 属性项
必须配置
默认值
描述
dliEndPont
否
-
DLI服务的域名。
在地区和终端节点获取DLI对应区域的域名。
如果不配置,程序根据region参数来确定域名。
obsEndPoint
是
-
OBS服务的域名。
在地区和终端节点获取OBS对应区域的域名。
bucketName
是
-
OBS上的桶名称。该桶用于存放Spark程序中使用的jar包、Python程序文件、配置文件等。
obsPath
是
dli-spark-submit-resources
OBS上存放jar包、Python程序文件、配置文件等的目录,该目录在bucketName指定的桶下。如果该目录不存在,程序会自动创建。
localFilePath
是
-
存放Spark程序中使用的jar包、Python程序文件、配置文件等的本地目录。
程序会自动将Spark程序依赖到的相关文件上传的OBS路径,并加载到DLI服务端资源包。
ak
是
-
用户的Access Key。
sk
是
-
用户的Secret Key。
projectId
是
-
用户访问的DLI服务使用的项目编号。
region
是
-
对接的DLI服务的Region。
根据Spark应用程序的需要,修改“spark-defaults.conf”中的配置项,配置项兼容开源Spark配置项,参考开源Spark的配置项说明。
使用Spark-submit提交Spark作业
- 进入工具文件bin目录,执行spark-submit命令,并携带相关参数。
命令执行格式:
spark-submit [options] <app jar | python file> [app arguments]
表2 DLI Spark-submit参数列表 参数名称
参数值
描述
--class
<CLASS_NAME>
提交的Java/Scala应用程序的主类名称。
--conf
<PROP=VALUE>
Spark程序的参数,可以通过在conf目录下的spark-defaults.conf中配置。如果命令中与配置文件中同时配置,优先使用命令指定的参数值。
说明:多个conf时,格式为:--conf key1=value1 --conf key2=value2
--jars
<JARS>
Spark应用依赖的jar包名称,存在多个时使用","分割。jar包文件需要提前保存在client.properties文件中localFilePath配置的本地路径中。
--name
<NAME>
Spark应用的名称。
--queue
<QUEUE_NAME>
DLI服务端Spark队列名称,作业会提交到该队列中执行。
--py-files
<PY_FILES>
Spark应用依赖的Python程序文件名称,存在多个时使用","分割。Python程序文件文件需要提前保存在client.properties文件中localFilePath配置的本地路面中。
-s,--skip-upload-resources
<all | app | deps>
是否跳过,将jar包、Python程序文件、配置文件上传到OBS和加载到DLI服务端资源列表。当相关资源文件已经加载到DLI服务资源列表中,可以使用该参数跳过该步骤。
不携带该参数时,默认会上传和加载命令中的所有资源文件到DLI服务中。
- all:跳过所有资源文件的上传和加载
- app:跳过Spark应用程序文件的上传和加载
- deps:跳过所有依赖文件的上传和加载
-h,--help
-
打印命令帮助
命令举例:./spark-submit --name <name> --queue <queue_name> --class org.apache.spark.examples.SparkPi spark-examples_2.11-2.1.0.luxor.jar 10 ./spark-submit --name <name> --queue <queue_name> word_count.py
请使用"./spark-submit",不要使用"spark-submit",后者可能会使用本地环境中已有的Spark环境,而不是DLI队列。