全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

通过客户端提交Spark作业

最近更新时间:2025-09-11 09:10:06

本文介绍如何通过客户端工具提交Spark作业。

客户端说明

ksc-serverless-tool是金山云Serverless 计算引擎进行作业提交的客户端工具,您可以在本地电脑(支持mac、liunx、window操作系统)或者金山云VPC内进行安装使用。客户端支持作业提交、查看日志及监控指标等,可在一个客户端工具内面实现Serverless Spark、Serverless Ray、Serverless Flink、自定义Application作业相关操作,免部署、免登录、无需考虑环境依赖,有网即可使用。

前提条件

  1. 在提交Spark作业前,您需要先创建工作空间,具体创建流程详见:创建工作空间

  2. 如果使用IAM用户(子账号)提交Spark作业,需要赋予子账号相应KMR及KS3权限,具体操作步骤详见子账号授权

操作步骤

步骤一:下载作业示例

本文旨在带您快速熟悉操作流程,为您提供了一个作业示例,您可以直接下载以备后续步骤使用。

点击 spark-examples_2.12-3.3.1.jar下载作业示例,该作业为计算圆周率。

步骤二:上传示例文件至KS3

请将作业示例上传至KS3,具体步骤详见:文件上传

步骤三:下载并安装客户端

  1. 单击ksc-serverless-tool.tar.gz,下载客户端。

  2. 执行以下命令,解压并安装。

tar -zxvf ksc-serverless-tool.tar.gz

步骤四:配置相关参数

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

vim ksc-serverless-tool.tar.gz/conf/connection.properties
  1. 推荐按照如下内容对文件进行配置,参数格式为key=value,示例如下:

[Properties]
AccessKeyId ="****"
AccessKeySecret ="*****"
Region ="cn-beijing-6"
WorkspaceId ="xxx"
Endpoint = "http://kmr.cn-beijing-6.api.ksyun.com"

参数说明

参数

是否必填

说明

accessKeyId

执行Spark作业使用的金山云账号或RAM用户的AccessKey ID,获取操作详见:获取AK/SK

accessKeySecret

执行Spark作业使用的金山云账号或RAM用户的AccessKey Secret

Region

地域ID,目前仅支持北京:cn-beijing-6

workspaceId

工作空间ID

Endpoint

服务地址

服务接入点

地域名称

地域ID

公网接入地址

VPC接入地址

华北1(北京)

cn-beijing-6

kmr.cn-beijing-6.api.ksyun.com

kmr.cn-beijing-6.internal.api.ksyun.com

步骤五:提交Spark作业

  1. 执行以下命令,进入客户端工具目录。

cd ksc-serverless-tool
  1. 请按照以下格式提交作业,目前支持提交SparkJar、PySpark、SparkSQL类型作业,请根据下文内容操作:

Java类型作业

使用的作业示例为步骤一中下载的spark-examples_2.12-3.3.1.jar,请按照以下格式提交作业:

./bin/ksc-serverless-tool  --name SparkPi \
--num-executors 5 \
--driver-cores 1 \
--driver-memory 1g \
--executor-cores 2 \
--executor-memory 2g \
--class org.apache.spark.examples.SparkPi \
 ks3://<yourBucket>/path/to/spark-examples_2.12-3.3.1.jar \
1000
PySpark类型作业

使用的作业示例为DataFrame.py和employee.csv,单击DataFrame.pyemployee.csv下载示例,需按步骤二将示例上传至KS3,请按照以下格式提交作业:

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

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

./bin/ksc-serverless-tool --name Spark-test \
--num-executors 5 \
--driver-cores 1 \
--driver-memory 1g \
--executor-cores 2 \
--executor-memory 2g \
--conf spark.tags.key=value \
--files ks3://<yourBucket>/path/to/employee.csv \
ks3://<yourBucket>/path/to/DataFrame.py \
employee.csv
SQL类型作业

使用ksc-serverless-tool提交SparkSQL作业,以Spark读Kmr Hive为例,您可以在客户端直接输入SQL语句或执行SQL文件,具体操作如下:

  • 确定 HDFS NameNode地址和 Hive Metastore 地址:进入托管Hadoop(KMR)控制台,KMR集群详情页,点击左侧导航栏主机列表,查看列表信息,两个Master内网地址即为address1,address2

  • 将address1和address2替换到如下配置中:

--conf spark.hadoop.fs.defaultFS=hdfs://hdfs-ha \
--conf spark.hadoop.dfs.nameservices=hdfs-ha \
--conf spark.hadoop.dfs.ha.namenodes.hdfs-ha=nn1,nn2 \
--conf spark.hadoop.dfs.namenode.rpc-address.hdfs-ha.nn1=address1:8020 \
--conf spark.hadoop.dfs.namenode.rpc-address.hdfs-ha.nn2=address2:8020 \
--conf spark.hadoop.dfs.client.failover.proxy.provider.hdfs-ha=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider \
--conf spark.hive.metastore.uris=thrift://address1:9083,thrift://address2:9083 \
  • 直接执行SQL语句:

./bin/ksc-serverless-tool \
--engine SparkSql \
--name spark-hive-test \
--num-executors 1 \
--driver-cores 1 \
--driver-memory 2g \
--executor-cores 1 \
--executor-memory 2g \
--conf spark.hadoop.fs.defaultFS=hdfs://hdfs-ha \
--conf spark.hadoop.dfs.nameservices=hdfs-ha \
--conf spark.hadoop.dfs.ha.namenodes.hdfs-ha=nn1,nn2 \
--conf spark.hadoop.dfs.namenode.rpc-address.hdfs-ha.nn1=address1:8020 \
--conf spark.hadoop.dfs.namenode.rpc-address.hdfs-ha.nn2=address2:8020 \
--conf spark.hadoop.dfs.client.failover.proxy.provider.hdfs-ha=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider \
--conf spark.hive.metastore.uris=thrift://address1:9083,thrift://address2:9083 \
--sql "show tables;"
  • 执行指定SQL文件:

./bin/ksc-serverless-tool \
--engine SparkSql \
--name spark-hive-test \
--num-executors 1 \
--driver-cores 1 \
--driver-memory 2g \
--executor-cores 1 \
--executor-memory 2g \
--conf spark.hadoop.fs.defaultFS=hdfs://hdfs-ha \
--conf spark.hadoop.dfs.nameservices=hdfs-ha \
--conf spark.hadoop.dfs.ha.namenodes.hdfs-ha=nn1,nn2 \
--conf spark.hadoop.dfs.namenode.rpc-address.hdfs-ha.nn1=address1:8020 \
--conf spark.hadoop.dfs.namenode.rpc-address.hdfs-ha.nn2=address2:8020 \
--conf spark.hadoop.dfs.client.failover.proxy.provider.hdfs-ha=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider \
--conf spark.hive.metastore.uris=thrift://address1:9083,thrift://address2:9083 \
--files hdfs://xxx/file.sql

1. 需要指定--engine SparkSql,多条sql语句,使用分号隔开。

2. --files指定sql文件,默认只执行一个sql文件,文件路径可为hdfs或ks3路径。

相关参数说明
  • 兼容开源spark-submit工具的参数:

参数名称

示例值

是否必填

说明

--class

org.apache.spark.examples.SparkPi

指定Spark作业的入口类名(Java程序),Python程序无需此参数

--num-executors

10

Spark作业的Executor数量

或者--conf spark.executor.instances 覆盖

--driver-cores

1

Spark作业的Driver核数

或者--conf spark.driver.cores 覆盖

--driver-memory

4g

Spark作业的Driver内存

或者--conf spark.driver.memory 覆盖

--executor-cores

1

Spark作业的Executor核数

或者--conf sparkexecutor.cores 覆盖

--executor-memory

1g

Spark作业的Executor内存

或者--conf spark.executor.memory 覆盖

--files

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

Spark作业需要引用的资源文件,仅支持KS3资源,多个文件使用逗号(,)分隔

--py-files

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

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

--jars

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

Spark作业需要引用的JAR包资源,仅支持KS3资源,多个文件使用逗号(,)分隔

--archives

ks3://<yourBucket>/archive2.zip#envip

Spark作业需要引用的archive包资源,仅支持KS3资源,多个文件使用逗号(,)分隔

--packages

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

Spark作业指定外部依赖包,仅支持KS3资源,多个文件使用逗号(,)分隔

--conf

spark.tags.key=value

Spark作业自定义参数,可通过该参数指定hive-site配置,如:--conf spark.hive.metastore.uris=thrift://address1:9083,thrift://address2:9083 \

--status

spark-java-job-2024081917xxxx

输入作业ID,查看Spark作业状态

--kill

spark-java-job-2024081917xxxx

输入作业ID,终止Spark作业,多个作业使用逗号隔开

--cache-file Archive

ks3://xxx/xxx.tar.gz#pyspark_env.zip

用于缓存加速archive资源

--high-priority

p0

默认优先级为p1, 设置为p0的作业将高优插入执行

--engine

SparkSql

如果执行SQL语句或提交SparkSQL类型作业,必须指定为SparkSql

--net-id

1564ba1a-0cb9-49d2-beef-24fb538xxxxx

如果需连接用户自有VPC下服务或数据源,需配置该参数,填写网络连接ID

--sql

"show tables;"

可以在客户端直接提交申sql语句,多条语句用分号隔开

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

参数名称

示例值

说明

--list

5

查询作业列表,不指定则默认为10

--detail

spark-java-job-2024081917xxxx

输入作业ID,查看作业详情

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

    • --deploy-mode

    • --master

    • --proxy-user

    • --repositories

    • --keytab

    • --principal

    • --total-executor-cores

    • --driver-library-path

    • --driver-class-path

    • --supervise

    • --verbose

  • 启用RSS:

在使用Serverless Spark进行数据分析、机器学习模型训练等遇到的大量数据Shuffle操作的计算任务在做Mapper 做排序时会占用较大内存,甚至触发堆外排序,引入额外的磁盘IO等问题,因此引入RSS作为 Spark引擎的统一中间数据服务,接入RSS,在原提交命令中添加以下参数即可:

--conf spark.RemoteShuffle.enabled=true \

参数名称

示例值

是否必填

说明

spark.RemoteShuffle.enabled

true

默认为false,即使用spark本地缓存

true:启用远端缓存

步骤六:其他操作

查询Spark作业详情

./bin/ksc-serverless-tool --detail spark-java-job-20240819172832

查询Spark作业状态

./bin/ksc-serverless-tool --status  spark-java-job-2024081917xxxx

终止Spark作业

./bin/ksc-serverless-tool --kill spark-java-job-20240819172832

查询工作空间内作业列表

./bin/ksc-serverless-tool --list  2  #展示两条

查询Spark driver日志

客户端默认展示最后200行,如需更多日志内容,建议您前往控制台查看。

./bin/ksc-serverless-tool --logs spark-java-job-2024081917xxxx

查询最后N行日志

./bin/ksc-serverless-tool --logs spark-java-job-2024081917xxxx --tail 200

跟随查询

./bin/ksc-serverless-tool --logs spark-java-job-2024081917xxxx --follow

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈