本地需已安装JDK8 / JDK17,并已设置JAVA_HOME环境变量。
echo $JAVA_HOME #查询JAVA_HOME目录位置 java -version #查看版本
cd /工具包路径/ tar -xzf emr.spark.serverless_spark_submit_{version}.tar.gz
文件目录的结构如下。
export SPARK_HOME=/工具包路径/ export PATH=$SPARK_HOME/bin:$PATH
spark-submit --help
在提交之前,您需根据实际情况修改conf文件夹下spark-defaults.conf文件中的如下参数:
spark.app.name=serverless-spark-jar #修改为您的的作业名称,也可在命令行提交时指定 serverless.spark.region=cn-beijing #修改为您需要访问的Serverless Spark产品Region serverless.spark.endpoint=https://open.volcengineapi.com #固定值,暂无需修改 serverless.spark.service=emr_serverless #固定值,暂无需修改 serverless.spark.access.key=YOUR_ACCESS_KEY #修改为您的账号Access Key serverless.spark.secret.key=YOUR_SECRET_KEY #修改为您的账号Secret Key serverless.spark.tos.bucket=YOUR_TOS_BECKET_NAME #修改为您的TOS桶名,请确保您的AK/SK对此TOS桶有访问权限,该桶将被用于上传本地jar等依赖文件,这些文件会在Spark运行时被加载。
说明
说明
文件中#及其后面部分为注释,用户修改完参数后需删除该部分注释。
使用spark-submit 命令提交SparkJar示例作业,极简版提交示例 如下(已配置上述参数)。
spark-submit --class com.volcengine.emr.serverless.demo.ServerlessSparkDemo lib/serverless-spark-submit-example-1.0.0.jar
说明
示例中的serverless-spark-submit-example-1.0.0.jar文件在工具包解压后的lib目录下。
说明
命令行指定的参数优先级更高,同时配置的情况下,spark-defaults.conf文件中的参数将被覆盖。
spark-submit --name ServerlessJarDemo --async --jars /path/to/dependency1.jar --region cn-beijing --access-key-id your-access-key --access-key-secret your-secret-key --tos-bucket your-tos-bucket --class your-main-class /path/to/primary-dependency.jar arg1 arg2
spark-submit --name ServerlessJarDemo --async --jars tos://your-bucket/dependency1.jar --region cn-beijing --access-key-id your-access-key --access-key-secret your-secret-key --class your-main-class tos://your-bucket/primary-dependency.jar arg1 arg2
spark-sql命令可用于提交SQL作业,支持提交存储于TOS桶、存储于本地系统或来自命令行输入的SQL文本,详见下述示例。
spark-sql -f tos://your-bucket/path/to/query.sql
spark-sql -f /path/to/query.sql
spark-sql -e "select 1"
命令行的参数具体说明如下:
说明
命令行参数名 | 对应spark-defaults.conf参数值 | 是否必须 | 默认值 | 说明 |
|---|---|---|---|---|
--name | spark.app.name | 是 | 无 | 任务名称 |
--class | tqs.spark.jar.class | 否 | 无 | 任务执行的主类,不填写时会从jar包中尝试获取Main Class。 |
--region | serverless.spark.region | 是 | 无 | 执行 Serverless spark 任务的火山引擎地域。
|
--access-key-id | serverless.spark.access.key | 是 | 无 | 您的账号Access Key |
--access-key-secret | serverless.spark.secret.key | 是 | 无 | 您的账号Secret Key |
--session-token | serverless.spark.session.token | 否 | 无 | 在Assume Role场景下,需要填写session token |
--tos-bucket | serverless.spark.tos.bucket | 否 | 无 | 指定一个TOS桶,用来将您本地的jar文件上传到此桶中,Spark任务启动时将从该tos桶加载jar文件。如您的文件已存在TOS桶中,则此参数可不填写 |
--tos-endpoint | serverless.spark.tos.endpoint | 否 | 无 | 指定tos endpoint地址,在火山引擎内部网络访问TOS桶时可以配置为TOS内网的endpoint,比如华北可以配置为tos-cn-beijing.ivolces.com |
--conf | 无 | 否 | 无 | Spark运行时参数,可参考:Spark 配置官网文档 |
--properties-file | spark.properties | 否 | $SPARK_HOME/conf/spark-defaults.conf | spark配置文件所在路径,默认为$SPARK_HOME/conf/spark-defaults.conf,即上述安装包所在位置下conf/spark-defaults.conf |
--driver-cores | spark.driver.cores | 否 | 4 | Driver的核数 |
--driver-memory | spark.driver.memory | 否 | 16g | Driver的内存大小 |
--driver-java-options | spark.driver.extraJavaOptions | 否 | 无 | Driver JVM的参数 |
--driver-class-path | spark.driver.extraClassPath | 否 | 无 | Driver 的额外class path |
--print-driver-log | 无 | 否 | 无 | 是否打印driver的执行日志,可选值:
|
--executor-memory | spark.executor.memory | 否 | 16g | Executor的内存大小 |
--executor-cores | spark.executor.cores | 否 | 4 | Executor的核数 |
--num-executors | spark.executor.instances | 否 | 1 | Executor的个数 |
--queue | las.execute.queuename | 否 | 无 | 任务运行的队列名称 |
--async | 无 | 否 | 无 | 若指定,则spark-submit命令将在任务成功提交后退出,不会等待任务运行结束。 |
--jars | spark.jars | 否 | 无 | 逗号分隔的jar文件路径,Spark运行时将加载这些jar文件,可支持本地文件或tos文件。 |
--archives | spark.archives | 否 | 无 | 逗号分隔的archive文件,将被加载到Spark运行时的工作目录下,可支持本地文件或tos文件。 |
--files | spark.files | 否 | 无 | 逗号分隔的其他文件,将被加载到Spark运行时的工作目录下,可支持本地文件或tos文件。 |
--kill-job-on-signal | serverless.spark.kill.job.on.signal | 否 | 无 | 指定该参数后,如果spark-submit的进程被kill,或运行的终端接收到 SIGINT(Ctrl+C)信号,提交的 EMR Serverless Spark 作业也将同步被终止。 |
-f | 无 | 否 | 无 | spark-sql命令接收的SQL文件位置,可填位于tos桶的SQL文件或位于本地的SQL文件。 |
-e | 无 | 否 | 无 | spark-sql命令接收的SQL文本。 |
参数类型 | 参数key | 说明 | 默认值 |
|---|---|---|---|
Driver 相关 |
| Driver 堆内内存大小 | 12g |
| Driver 堆外内存大小 | 4g | |
| Driver 程序的 CPU 核心数 | 4 | |
| Driver 返回结果的最大大小 | 3g | |
Executor 相关 |
| 每个 Executor 的 CPU 核心数 | 4 |
| 每个 Executor 的内存大小 | 12g | |
| 每个 Executor 的堆外内存大小 | 4g | |
| Executor 实例数(默认开启了dynamic,无需设置此参数) | 1 | |
dynamic相关 |
| 是否开启dynamic | true |
| 最少Executor个数 | 1 | |
| 最大Executor个数 | 30 | |
文件读并行度 |
| Map 单个task的文件大小 | 268435456 |
| Shuffle 操作时生成的分区数 | 200 | |
AQE |
| Adaptive execution开关,包含自动调整并行度,解决数据倾斜等优化 | true |
| 动态最大的并行度,对于shuffle量大的任务适当增大可以减少每个task的数据量,如1024 | 500 | |
| AQE 动态调整 shuffle 分区数时的下限。 | 5 |