本文为您介绍如何使用 DolphinScheduler 对接EMR-Serverless,并使用 spark-submit **** 命令提交 EMR-Serverless spark 作业。
您需要参考下文,先远程登录EMR集群的DolphinScheduler的worker-server节点,在对应节点的实例中安装工具包。
注意
Worker-server 所有的节点都需要安装对应工具包。
执行下载、安装工具包的命令示例如下。
#!/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."
关键步骤和参数说明如下。
设置默认值。
关键参数 | 参数说明 |
|---|---|
DEFAULT_VERSION | 此处设置为当前Spark submit工具的最新版本,示例中设置为当前的最新版本: |
输入参数。
根据提示输入认证的账号AK/SK信息、作业存储的TOS bucket名称、地域等信息,后续步骤会基于此处的输入参数自动填充所需的参数取值。
关键参数 | 参数说明 |
|---|---|
| 火山引擎账号 |
| 火山引擎 TOS的bucket名称 |
| 默认 |
定义下载链接和文件名。
关键参数 | 参数说明 |
|---|---|
| URL为工具包的下载链接。如果您机器和火山内部网络已经打通,下载(URL)地址的域名可以直接使用内网域名,否则使用外部域名。
|
脚本执行后,所有部署产物在 $SERVERLESS_SPARK_HOME 目录下,属于 dolphinscheduler 用户
spark-submit 提交本地作业时会自动将作业上传到 tos,您可参考下文在本地执行一个 demo 作业,验证Spark submit工具包是否正确安装。
新建测试文件:demo.py,测试文件内容示例如下。
from pyspark.sql import SparkSession # 创建SparkSession对象 spark = SparkSession.builder \ .enableHiveSupport() \ .getOrCreate() spark.sql("select 1").show() spark.stop()
执行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
查看提交日志,验证工具是否可正常使用。
以下为您介绍创建常见类型作业的核心操作。
注意
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 界面提交:
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 界面提交:
提交 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
使用 spark-defaults.conf 提交相对比较笨重,若您希望提交作业使用不同的 ak/sk 或其他参数,那么可以显示指定参数,比如:
${SERVERLESS_SDK_HOME}/bin/spark-submit --access-key-id ${AK} --access-key-secret ${SK} --files ${file1,file2,file3} ...
任务文件示例: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
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任务的同时,如果您希望同步取消远端的 EMR Serverless 任务时,需要配置 DolphineScheduler shell kill应用实践。