本文以ECS连接EMR Serverless Spark为例,介绍如何通过EMR Serverless spark-submit命令行工具进行Spark任务开发。
前提条件
已安装Java 1.8或以上版本。
如果使用RAM用户(子账号)提交Spark任务,需要将RAM用户(子账号)添加至Serverless Spark的工作空间中,并授予开发者或开发者以上的角色权限,操作请参见管理用户和角色。
操作流程
步骤一:下载并安装EMR Serverless spark-submit工具
将安装包上传至ECS实例,详情请参见上传或下载文件。
执行以下命令,解压并安装EMR Serverless spark-submit工具。
unzip emr-serverless-spark-tool-0.2.0-bin.zip
步骤二:配置相关参数
在已安装Spark的环境中,如果系统中设置了SPARK_CONF_DIR
环境变量,则需将配置文件放置在SPARK_CONF_DIR
所指定的目录下。例如,在EMR集群中,该目录通常为/etc/taihao-apps/spark-conf
。否则,系统会报错。
执行以下命令,修改connection.properties中的配置。
vim emr-serverless-spark-tool-0.2.0/conf/connection.properties
推荐按照如下内容对文件进行配置,参数格式为
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.2 (Spark 3.3.1, Scala 2.12, Java Runtime)
涉及参数说明如下表所示。
参数
是否必填
说明
accessKeyId
是
执行Spark任务使用的阿里云账号或RAM用户的AccessKey ID。
accessKeySecret
是
执行Spark任务使用的阿里云账号或RAM用户的AccessKey Secret。
securityToken
否
RAM用户的Token。
说明仅在进行STS认证时需要填写该项。
regionId
是
地域ID。本文以杭州地域为例。
endpoint
是
EMR Serverless Spark的Endpoint。地址详情参见服务接入点。
本文以杭州地域公网访问地址为例,参数值为
emr-serverless-spark.cn-hangzhou.aliyuncs.com
。说明如果ECS实例没有公网访问能力,需要使用VPC地址。
workspaceId
是
EMR Serverless Spark工作空间ID。
resourceQueueId
否
队列名称。默认值为dev_queue。
networkServiceId
否
网络连接名称。
说明仅当Spark任务需要访问VPC资源时,才需要填写此项。具体操作,请参见EMR Serverless Spark与其他VPC间网络互通。
releaseVersion
否
EMR Serverless Spark版本号。例如,esr-2.2 (Spark 3.3.1, Scala 2.12, Java Runtime)。
步骤三:提交Spark任务
执行以下命令,进入EMR Serverless spark-submit工具目录。
cd emr-serverless-spark-tool-0.2.0
请按照以下格式提交任务。
Java/Scala类型任务
本文示例使用的spark-examples_2.12-3.3.1.jar,您可以单击spark-examples_2.12-3.3.1.jar,直接下载测试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和employee.csv,直接下载测试文件,然后上传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.2.0
./bin/spark-submit --status <jr-8598aa9f459d****>
查询Spark任务详情
cd emr-serverless-spark-tool-0.2.0
./bin/spark-submit --detail <jr-8598aa9f459d****>
UI方式
在EMR Serverless Spark页面,单击左侧导航栏中的任务历史。
在任务历史的开发任务页签,您可以查看提交的任务。
(可选)步骤五:终止Spark任务
cd emr-serverless-spark-tool-0.2.0
./bin/spark-submit --kill <jr-8598aa9f459d****>
仅能终止处于运行状态(running)的任务。