You need to enable JavaScript to run this app.
E-MapReduce

E-MapReduce

复制全文
DolphinScheduler 对接 EMR Serverless
使用 Spark submit
复制全文
使用 Spark submit

本文为您介绍如何使用 DolphinScheduler 对接EMR-Serverless,并使用 spark-submit **** 命令提交 EMR-Serverless spark 作业。

配置 Spark-Submit

登录Worker (ECS) 节点

您需要参考下文,先远程登录EMR集群的DolphinScheduler的worker-server节点,在对应节点的实例中安装工具包。

注意

Worker-server 所有的节点都需要安装对应工具包。

  1. 登录并进入EMR集群的服务列表,查看DolphinScheduler的worker-server节点。
    Image
  2. 点击对应节点,跳转至对应ECS实例页面后,远程登录到ECS实例。登录后参考下文下载并安装Spark submit工具包。

下载&安装工具包

执行下载、安装工具包的命令示例如下。

#!/bin/bash

set -ex

# 默认值
DEFAULT_REGION="cn-beijing"
DEFAULT_VERSION="1.0.0.5"
SERVERLESS_SPARK_HOME="/opt/emr/serverless_spark"

# 检查参数数量
if [ "$#" -lt 3 ]; then
    echo "please input param: <access-key> <secret-key> <bucket> [region]"
    exit 1
fi

# 获取参数
ACCESS_KEY=$1
SECRET_KEY=$2
BUCKET=$3
REGION=${4:-$DEFAULT_REGION}  # 如果未提供region,则使用默认值

mkdir -p "$SERVERLESS_SPARK_HOME"

# 切换到安装目录
cd "$SERVERLESS_SPARK_HOME"

# 定义下载链接和文件名
FILE_NAME="serverless-spark-submit-${DEFAULT_VERSION}.tar.gz"
URL="https://serverless-spark.tos-cn-beijing.ivolces.com/spark/submit/emr.spark.serverless_spark_submit_${DEFAULT_VERSION}.tar.gz"
INSTALL_DIR="$SERVERLESS_SPARK_HOME/serverless-spark-submit-${DEFAULT_VERSION}"

mkdir -p "$INSTALL_DIR"

# 下载文件
if wget -O "$FILE_NAME" "$URL"; then
    echo "Download successful."
else
    echo "Download failed."
    exit 1
fi

# 解压缩文件
if tar -xzf "$FILE_NAME" -C "$INSTALL_DIR"; then
    echo "Extraction successful."
else
    echo "Extraction failed."
    exit 1
fi

# 配置环境变量
echo "export SERVERLESS_SDK_HOME=${INSTALL_DIR}" >> /etc/profile

# 定义配置文件路径
CONF_FILE="${INSTALL_DIR}/conf/spark-defaults.conf"

# 清空文件内容
> "$CONF_FILE"

# 追加内容到配置文件
cat <<EOL >> "$CONF_FILE"
spark.app.name=serverless-spark-task
serverless.spark.endpoint=https://open.volcengineapi.com
serverless.spark.service=emr_serverless
serverless.spark.access.key=$ACCESS_KEY
serverless.spark.secret.key=$SECRET_KEY
serverless.spark.tos.bucket=$BUCKET
serverless.spark.region=$REGION
EOL

chown -R dolphinscheduler:dolphinscheduler $SERVERLESS_SPARK_HOME

echo "Please run 'source /etc/profile' to make the changes effective."

关键步骤和参数说明如下。

  1. 设置默认值。

    关键参数

    参数说明

    DEFAULT_VERSION

    此处设置为当前Spark submit工具的最新版本,示例中设置为当前的最新版本:1.0.0.5

  2. 输入参数。
    根据提示输入认证的账号AK/SK信息、作业存储的TOS bucket名称、地域等信息,后续步骤会基于此处的输入参数自动填充所需的参数取值。

    关键参数

    参数说明

    access-key&secret-key

    火山引擎账号AKSK

    bucket

    火山引擎 TOS的bucket名称

    region

    默认cn-beijing,其他还有(cn-shanghaicn-guangzhouap-southeast-1)

  3. 定义下载链接和文件名。

    关键参数

    参数说明

    URL

    URL为工具包的下载链接。如果您机器和火山内部网络已经打通,下载(URL)地址的域名可以直接使用内网域名,否则使用外部域名。

    • 内部域名:serverless-spark.tos-cn-beijing.ivolces.com
    • 外部域名:serverless-spark.tos-cn-beijing.volces.com
  4. 脚本执行后,所有部署产物在 $SERVERLESS_SPARK_HOME 目录下,属于 dolphinscheduler 用户

安装结果验证

spark-submit 提交本地作业时会自动将作业上传到 tos,您可参考下文在本地执行一个 demo 作业,验证Spark submit工具包是否正确安装。

  1. 新建测试文件:demo.py,测试文件内容示例如下。

    from pyspark.sql import SparkSession
    # 创建SparkSession对象
    spark = SparkSession.builder \
        .enableHiveSupport() \
        .getOrCreate()
    
    spark.sql("select 1").show()
    spark.stop()
    
  2. 执行demo。通常您可以在提交作业的同时配置任务名称、任务执行的主类等参数,全量参数说明请参见下文的 提交参数 章节。

    • demo.py 文件在本地机器:

      ${SERVERLESS_SDK_HOME}/bin/spark-submit --tos-endpoint tos-cn-beijing.ivolces.com --properties-file ${SERVERLESS_SDK_HOME}/conf/spark-defaults.conf ${path}/demo.py 
      
    • demo.py 文件已经存储在 tos:

      ${SERVERLESS_SDK_HOME}/bin/spark-submit --properties-file ${SERVERLESS_SDK_HOME}/conf/spark-defaults.conf tos://${bucket}/${path}/demo.py
      
  3. 查看提交日志,验证工具是否可正常使用。

创建 Serverless Spark 作业

以下为您介绍创建常见类型作业的核心操作。

注意

  • 提交 pyspark 或者 spark jar 方式一致,提交参数略有差异,详情参考下文的 提交参数 章节。
  • 待提交作业可以放在 tos,也可以在 dolphinscheduler 资源中心,这两种在提交参数上略有不同。
  • 为了避免被可能已有的 spark 环境影响,Spark conf 本文采用显示指定。

场景1:Shell Task

本地作业提交

  • 操作入口/示例:
    • ECS实例中提交:

      ${SERVERLESS_SDK_HOME}/bin/spark-submit --tos-endpoint tos-cn-beijing.ivolces.com --properties-file ${SERVERLESS_SDK_HOME}/conf/spark-defaults.conf ${path}/demo.py
      
    • DolphinSchedule 界面提交:

资源中心作业提交

  • 配置要点:通过此种方式提交作业,您可以不用关心执行文件的路径。
  • 操作入口:

TOS 作业提交

  • 配置要点:作业路径写 tos 地址
  • 操作入口/示例:
    • ECS实例中提交:

      ${SERVERLESS_SDK_HOME}/bin/spark-submit --tos-endpoint tos-cn-beijing.ivolces.com --properties-file ${SERVERLESS_SDK_HOME}/conf/spark-defaults.conf tos://${tos path}/demo.py
      
    • DolphinSchedule 界面提交:

场景2:Spark Task

准备工作

提交 Spark Task 前,您需要先配置好使用的是 SPARK1 还是 SPARK2。

注意

Dolphin(直到3.1.9 版本) Spark Task 仍需要选择 SPARK1 或者 SPARK2,含义是底层会使用 ${SPARK_HOME1}/bin/spark-submit 还是 ${SPARK_HOME2}/bin/spark-submit 工具去提交作业。因此,这里需要提前在 /etc/profile 中配置 SPARK_HOME1 SPARK_HOME2,使得可以正确使用 Serverless spark-submit

以使用 SPARK1 为例,配置示例如下。

// 使用 SPARK1
echo "SPARK_HOME1=${SERVERLESS_SDK_HOME}" >> /etc/profile

作业提交

  1. 将作业文件上传至资源中心。
    Image
  2. 创建作业。
    Image

场景3:PySpark Task

参数设置建议

使用 spark-defaults.conf 提交相对比较笨重,若您希望提交作业使用不同的 ak/sk 或其他参数,那么可以显示指定参数,比如:

${SERVERLESS_SDK_HOME}/bin/spark-submit --access-key-id ${AK} --access-key-secret ${SK} --files ${file1,file2,file3} ...

本地 SQL 作业提交

  • 任务文件示例:pyspark_demo_sql.py

    from pyspark.sql import SparkSession
    
    # 创建SparkSession对象
    spark = SparkSession.builder \
        .enableHiveSupport() \
        .getOrCreate()
    
    spark.sql("select 1").show()
    
    spark.stop()
    
  • 提交任务

    spark-submit \
      --conf spark.executor.memory=4g \
      tos://emr-qa/lei/demo/spark/pyspark_demo_sql.py
    

TOS 作业提交

  • 作业文件示例
    pyspark_demo_tos.py
    未知大小
  • 提交任务
    spark-submit \
      --conf spark.executor.memory=4g \
      --files tos://emr-qa/lei/demo/spark/rel.txt \
      tos://emr-qa/lei/demo/spark/pyspark_demo_tos.py \
      --inputFile tos://emr-qa/lei/demo/spark/rel.txt --outputFile tos://emr-qa/lei/lei_db/people_table_1.csv
    

取消Dolphin任务

取消dolphin任务的同时,如果您希望同步取消远端的 EMR Serverless 任务时,需要配置 DolphineScheduler shell kill应用实践

参考附录:任务参数说明
  • 您可以在工具包的 spark-defaults.conf 中配置全局任务参数。
  • 您也可以在提交作业的同时,显示指定参数,此时设置的参数为作业级参数,优先级高于 spark-defaults.conf 中的配置。
  • 支持的参数列表和参数说明详情请参见参数说明
最近更新时间:2026.01.22 14:18:55
这个页面对您有帮助吗?
有用
有用
无用
无用