文档首页/ 数据湖探索 DLI/ 开发指南/ Spark Jar作业开发指南/ 使用Spark-submit提交Spark Jar作业
更新时间:2024-07-23 GMT+08:00
分享

使用Spark-submit提交Spark Jar作业

DLI Spark-submit简介

DLI Spark-submit是一个用于提交Spark作业到DLI服务端的命令行工具,该工具提供与开源Spark兼容的命令行。

准备工作

  1. 授权。

    DLI使用统一身份认证服务(Identity and Access Management,简称IAM)进行精细的企业级多租户管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全地控制华为云资源的访问。

    通过IAM,您可以在华为云账号中给员工创建IAM用户,并使用策略来控制他们对华为云资源的访问范围。

    目前包括角色(粗粒度授权)和策略(细粒度授权)。具体的权限介绍和授权操作请参考《数据湖探索用户指南》。

  2. 创建队列。在“资源管理 > 队列管理”下,单击右上角“购买队列”,进入购买队列页面选择“通用队列”,即Spark作业的计算资源。

    如果创建队列的用户不是管理员用户,在创建队列后,需要管理员用户赋权后才可使用。关于赋权的具体操作请参考《数据湖探索用户指南》。

DLI 客户端工具下载

您可以在DLI管理控制台下载DLI客户端工具。

  1. 登录DLI管理控制台。
  2. 单击总览页右侧“常用链接”中的“SDK下载”。
  3. 在“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工具。

  1. 下载并解压工具包“dli-clientkit-<version>-bin.tar.gz”,其中version为版本号,以实际版本号为准。
  2. 进入解压目录,里面有三个子目录bin、conf、lib,分别存放了Spark-submit相关的执行脚本、配置文件和依赖包。
  3. 进入配置文件conf目录,修改“client.properties”中的配置项,(具体配置项参考表1)。

    表1 DLI 客户端工具配置参数

    属性项

    必须配置

    默认值

    描述

    dliEndPont

    -

    DLI服务的域名。

    地区和终端节点获取DLI对应区域的域名。

    如果不配置,程序根据region参数来确定域名。

    obsEndPoint

    obs.cn-north-1.myhuaweicloud.com

    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作业

  1. 进入工具文件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队列。

相关文档