通过 EMR Serverless spark-submit 命令行工具进行 Spark 任务开发

摘要

本文以 ECS 连接阿里云 EMR Serverless Spark 为例,介绍如何通过 EMR Serverless spark-submit 命令行工具进行 Spark 任务开发。

前提条件

  • 已安装Java 1.8或以上版本。

  • 如果使用 RAM 用户(子账号)提交 Spark 任务,需要将 RAM 用户(子账号)添加至 Serverless Spark 的工作空间中,并授予开发者或开发者以上的角色权限,操作请参见管理用户和角色[1]

操作流程

步骤一:下载并安装 EMR Serverless spark-submit 工具

1. 单击 emr-serverless-spark-tool-0.1.0-bin.zip[2],下载安装包。

2. 将安装包上传至 ECS 实例,详情请参见上传或下载文件[3]

3. 执行以下命令,解压并安装 EMR Serverless spark-submit 工具。

unzip emr-serverless-spark-tool-0.1.0-bin.zip

步骤二:配置相关参数

重要:在已安装 Spark 的环境中,如果系统中设置了 SPARK_CONF_DIR 环境变量,则需将配置文件放置在 SPARK_CONF_DIR 所指定的目录下。例如,在 EMR 集群中,该目录通常为 /etc/taihao-apps/spark-conf。否则,系统会报错。

1. 执行以下命令,修改 connection.properties 中的配置。

vim emr-serverless-spark-tool-0.1.0/conf/connection.properties

2. 推荐按照如下内容对文件进行配置,参数格式为 key=value,示例如下。

accessKeyId=yourAccessKeyId
accessKeySecret=yourAccessKeySecret
# securityToken=yourSecurityToken
regionId=cn-hangzhou
endpoint=emr-serverless-spark.cn-hangzhou.aliyuncs.com
workspaceId=w-xxxxxxxxxxxx
resourceQueueId=dev_queue
# networkServiceId=xxxxxx
releaseVersion=esr-2.1 (Spark 3.3.1, Scala 2.12)

涉及参数说明如下表所示:

参数

是否必填

说明

accessKeyId

执行Spark任务使用的阿里云账号或RAM用户的AccessKey ID。

accessKeySecret

执行Spark任务使用的阿里云账号或RAM用户的AccessKey Secret。

securityToken

RAM用户的Token。

说明:仅在进行STS认证时需要填写该项。

regionId

地域ID。本文以杭州地域为例。

endpoint

EMR Serverless Spark的Endpoint。地址详情参见服务接入点[4]

本文以杭州地域公网访问地址为例,参数值为emr-serverless-spark.cn-hangzhou.aliyuncs.com。

说明:如果ECS实例没有公网访问能力,需要使用VPC地址。

workspaceId

EMR Serverless Spark工作空间ID。

resourceQueueId

队列名称。默认值为dev_queue。

networkServiceId

网络连接名称。

说明:仅当Spark任务需要访问VPC资源时,才需要填写此项。具体操作,请参见EMR Serverless Spark与其他VPC间网络互通[5]

releaseVersion

EMR Serverless Spark版本号。例如,esr-2.1(Spark 3.3.1, Scala 2.12)。

步骤三:提交 Spark 任务

1. 执行以下命令,进入 EMR Serverless spark-submit 工具目录。

cd emr-serverless-spark-tool-0.1.0

2. 请按照以下格式提交任务。

  • Java/Scala 类型任务

本文示例使用的 spark-examples_2.12-3.3.1.jar,您可以打开 spark-examples_2.12-3.3.1.jar[6],直接下载测试 JAR 包,然后上传 JAR 包至 OSS。该 JAR 包是 Spark 自带的一个简单示例,用于计算圆周率 π 的值。

./bin/spark-submit  --name SparkPi \
--queue dev_queue  \
--num-executors 5 \
--driver-memory 1g \
--executor-cores 2 \
--executor-memory 2g \
--class org.apache.spark.examples.SparkPi \
 oss://<yourBucket>/path/to/spark-examples_2.12-3.3.1.jar \
10000
  • PySpark 类型任务

本文示例使用的 DataFrame.py 和 employee.csv,您可以打开DataFrame.py[7]和employee.csv[8],直接下载测试文件,然后上传 JAR 包至 OSS。

说明

  • DataFrame.py 文件是一段使用 Apache Spark 框架进行 OSS 上数据处理的代码。

  • employee.csv 文件中定义了一个包含员工姓名、部门和薪水的数据列表。

./bin/spark-submit --name PySpark \
--queue dev_queue  \
--num-executors 5 \
--driver-memory 1g \
--executor-cores 2 \
--executor-memory 2g \
--conf spark.tags.key=value \
--files oss://<yourBucket>/path/to/employee.csv \
oss://<yourBucket>/path/to/DataFrame.py \
10000

相关参数说明如下:

  • 兼容开源 spark-submit 工具的参数

参数名称

示例值

说明

--class

org.apache.spark.examples.SparkPi

指定Spark任务的入口类名(Java或者Scala程序),Python程序无需此参数。

--num-executors

10

Spark任务的Executor数量。

--driver-cores

1

Spark任务的Driver核数。

--driver-memory

4g

Spark任务的Driver内存。

--executor-cores

1

Spark任务的Executor核数。

--executor-memory

1024m

Spark任务的Executor内存。

--files

oss://<yourBucket>/file1,oss://<yourBucket>/file2

Spark任务需要引用的资源文件,仅支持OSS资源,多个文件使用逗号(,)分隔。

--py-files

oss://<yourBucket>/file1.py,oss://<yourBucket>/file2.py

Spark任务需要引用的Python脚本,仅支持OSS资源,多个文件使用逗号(,)分隔。该参数仅对PySpark程序生效。

--jars

oss://<yourBucket>/file1.jar,oss://<yourBucket>/file2.jar

Spark任务需要引用的JAR包资源,仅支持OSS资源,多个文件使用逗号(,)分隔。

--archives

oss://<yourBucket>/archive.tar.gz#env,oss://<yourBucket>/archive2.zip

Spark任务需要引用的archive包资源,仅支持OSS资源,多个文件使用逗号(,)分隔。

--queue

root_queue

Spark任务运行的队列名称,需与EMR Serverless Spark工作空间队列管理中的队列名称保持一致。

--conf

spark.tags.key=value

Spark任务自定义参数。

--status

jr-8598aa9f459d****

查看Spark任务状态。

--kill

jr-8598aa9f459d****

终止Spark任务。

  • 非开源 spark-submit 工具的参数。

参数名称

示例值

说明

--detach

无需填充

使用此参数,spark-submit将在提交任务后立即退出,不再等待或查询任务状态。

--detail

jr-8598aa9f459d****

查看Spark任务详情。

  • 不支持的开源 spark-submit 工具的参数如下:

    • --deploy-mode

    • --master

    • --proxy-user

    • --repositories

    • --keytab

    • --principal

    • --total-executor-cores

    • --driver-library-path

    • --driver-class-path

    • --supervise

    • --verbose


步骤四:查询 Spark 任务

  • CLI 方式

  • 查询 Spark 任务状态
cd emr-serverless-spark-tool-0.1.0
./bin/spark-submit --status <jr-8598aa9f459d****>
  • 查询 Spark 任务详情
cd emr-serverless-spark-tool-0.1.0
./bin/spark-submit --detail <jr-8598aa9f459d****>
  • UI 方式

  • 在 EMR Serverless Spark 页面,单击左侧导航栏中的任务历史。

  • 在任务历史的开发任务页签,您可以查看提交的任务。

4ea659ac47ebb4c74ee93ba3daf5ead0.png

步骤五:终止 Spark 任务(可选)

cd emr-serverless-spark-tool-0.1.0
./bin/spark-submit --kill <jr-8598aa9f459d****>

说明:仅能终止处于运行状态(running)的任务。

相关文档

[1]管理用户和角色:https://help.aliyun.com/zh/emr/emr-serverless-spark/user-guide/manage-users-and-roles

[2]emr-serverless-spark-tool-0.1.0-bin.zip:https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240829/dzzgsn/emr-serverless-spark-tool-0.1.0-bin.zip

[3]上传或下载文件:https://help.aliyun.com/zh/ecs/use-cases/upload-a-file-from-on-premises-to-an-ecs-instance/

[4]服务接入点:https://help.aliyun.com/zh/emr/emr-serverless-spark/developer-reference/api-emr-serverless-spark-2023-08-08-endpoint

[5]EMR Serverless Spark与其他VPC间网络互通:
https://help.aliyun.com/zh/emr/emr-serverless-spark/user-guide/network-connection-between-emr-serverless-spark-and-other-vpcs

[6]spark-examples_2.12-3.3.1.jar:
https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240207/cmalbs/spark-examples_2.12-3.3.1.jar

[7]DataFrame.py:
https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240418/mzftlh/DataFrame.py

[8]employee.csv:
https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20240418/ktzzqn/employee.csv


阿里云 EMR Serverless Spark 版已于2024年9月14日正式商业化售卖,欢迎使用!

如果您在使用 EMR Serverless Spark 版的过程中遇到任何疑问,可加入钉钉群(群号:58570004119)咨询。

点击「阅读原文」查看产品详情!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值