[1015]spark-submit提交任务及参数说明

本文详细介绍了如何使用spark-submit命令提交Python(pyspark)项目到Spark standalone、YARN集群执行,包括提交参数如`--master`、`--deploy-mode`、`--executor-memory`等的使用,并给出了错误示例及解决方法。同时,解释了不同部署模式下参数的适用场景,帮助理解Spark任务的提交过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spark-submit 可以提交任务到 spark 集群执行,也可以提交到 hadoop 的 yarn 集群执行。

例子

一个最简单的例子,部署 spark standalone 模式后,提交到本地执行。

./bin/spark-submit \
--master spark://localhost:7077 \
examples/src/main/python/pi.py

如果部署 hadoop,并且启动 yarn 后,spark 提交到 yarn 执行的例子如下。

注意,spark 必须编译成支持 yarn 模式,编译 spark 的命令为:

build/mvn -Pyarn -Phadoop-2.x -Dhadoop.version=2.x.x -DskipTests clean package

其中, 2.x 为 hadoop 的版本号。编译完成后,可执行下面的命令,提交任务到 hadoop yarn 集群执行。

./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 1 \
--queue thequeue \
examples/target/scala-2.11/jars/spark-examples*.jar 10

提交python脚本

在提交firstApp.py脚本时,使用如下指令

$ spark-submit \
--master local[2] \
--num-executors 2 \
--executor-memory 1G \
--py-files /home/hadoop/Download/test/firstApp.py

结果报如下错误“Error: Cannot load main class from JAR file:/home/hadoop/Download/spark-2.1.1-bin-hadoop2.7/bin/master”,其中:/home/hadoop/Download/spark-2.1.1-bin-hadoop2.7/bin/master与hadoop安装路径相关,虽然python脚本没有主类这一说,但是可以猜测到该错误是由于找不到函数入口导致,我在这里找打了一些答案,--py-fiels参数是用来添加应用程序所依赖的python文件的,我们要提交的应用程序可以直接采用如下方式提交,这样就没有报错了

$ spark-submit \
--master local[2] \
--num-executors 2 \
--executor-memory 1G \
 /home/hadoop/Download/test/firstApp.py

spark2-submit 提交 python(pyspark)项目

两种方式:localyarn

假设一个pyspark的项目下边有两个文件:main.py和utils.py。其中main.py是项目的主入口文件,utils.py中可能包含一些UDF。

local

(1)目录结构

(2)提交命令

spark2-submit --master local --deploy-mode client main.py

yarn

(1)目录结构

其中project.zipmain.pyutils.py两个文件的zip压缩文件。
(2)提交命令

spark2-submit --master yarn --deploy-mode client --py-files project.zip main.py

spark-submit 详细参数说明

--master

master 的地址,提交任务到哪里执行,例如 spark://host:portyarnlocal

MASTER_URL:设置集群的主URL,用于决定任务提交到何处执行。

常见的选项有

  • local:提交到本地服务器执行,并分配单个线程
  • local[k]:提交到本地服务器执行,并分配k个线程
  • spark://HOST:PORT:提交到standalone模式部署的spark集群中,并指定主节点的IP与端口
  • mesos://HOST:PORT:提交到mesos模式部署的集群中,并指定主节点的IP与端口
  • yarn:提交到yarn模式部署的集群中

--deploy-mode

在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client

  • DEPLOY_MODE:设置driver启动的位置,可选项如下,默认为client
  • client:在客户端上启动driver,这样逻辑运算在client上执行,任务执行在cluster上
  • cluster:逻辑运算与任务执行均在cluster上,cluster模式暂时不支持于Mesos集群或Python应用程序

--class

应用程序的主类,仅针对 java 或 scala 应用

CLASS_NAME:指定应用程序的类入口,即主类,仅针对java、scala程序,不作用于python程序

--name

应用程序的名称

--jars

用逗号分隔的本地 jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下

--packages

包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标

--exclude-packages

为了避免冲突 ,指定的参数--package中不包含的jars包

--repositories

远程 repository

附加的远程资源库(包含jars包)等,可以通过maven坐标进行搜索

--py-files

PY_FILES:逗号隔开的的.zip、.egg、.py文件,这些文件会放置在PYTHONPATH下,该参数仅针对python应用程序

--files

FILES:逗号隔开的文件列表,这些文件将存放于每一个工作节点进程目录下

--conf PROP=VALUE

指定spark配置属性的值,格式为PROP=VALUE, 例如 --conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"

--properties-file

指定需要额外加载的配置文件,用逗号分隔,如果不指定,默认为 conf/spark-defaults.conf

--driver-memory

Driver内存,默认 1G

--driver-java-options

传给 driver 的额外的 Java 选项

--driver-library-path

传给 driver 的额外的库路径

--driver-class-path

传给 driver 的额外的类路径,用–jars 添加的jar包会自动包含在类路径里

--driver-cores

Driver 的核数,默认是1。在 yarn 或者 standalone 下使用

--executor-memory

每个 executor 的内存,默认是1G

--total-executor-cores

所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用

--num-executors

启动的 executor 数量。默认为2。在 yarn 下使用

--executor-core

每个 executor 的核数。在yarn或者standalone下使用

参数设置

--master参数设置为Standalone--deploy-mode参数设置为cluster时,如下选项可以设置:

  • --driver-cores NUM:driver使用的内核数,默认为1

--master参数设置为Standalone或者Mesos--deploy-mode参数设置为cluster时,如下选项可以设置:

  • --supervise:如果设置了该参数,driver失败是会重启
  • --kill SUBMISSION_ID:如果设置了该参数,则会杀死指定SUBMISSION_ID的driver进程
  • --status SUBMISSION_ID:如果设置了该参数,则请求返回指定SUBMISSION_ID的driver的状态

--master参数设置为Standalone或者Mesos时,如下选项可以设置:

  • --total-executor-cores NUM:设置集群中所有工作节点上executor使用的内核总数

--master参数设置为Standalone或者YARN时,如下选项可以设置:

  • --executor-cores NUM:每个executor使用的核数

--master参数设置为YARN时,如下选项可以设置:

  • --driver-cores NUM :当--deploy-modecluster时,driver使用的内核数,默认为1
  • --queue QUEUE_NAME :将任务提交给哪个YARN队列,默认为YARN的默认队列
  • --num-executors NUM:设置启动的executor数量,默认为2
  • --archives ARCHIVES :被每个executor提取到工作目录的档案列表,用逗号隔开

Yarn

参数说明
–master值为yarn
–deploy-mode部署模式,运行driver进程在客户端还是集群上,默认为客户端(client),可以指定为cluster
–class运行程序的类的全限定名
–name运行程序的名称
–jars运行程序的jar包,一般放在hdfs上面
–conf运行程序需要指定配置信息
–driver-memory运行程序指定的driver的内存,默认为1G
–executor-memory单个executor需要分配的内存大小,默认为1G
–proxy-user NAME提交应用程序时要模拟的用户,此参数不适用于–principal/–keytab
-v打印其他调试输出
–version打印当前的spark版本
–driver-coresdriver驱动程序的核数,默认为1,只有在部署模式为cluster的时候有效
–num-executorsexecutor的个数,默认为2个executor
–executor-coresexecutor的核数,默认为1个cpu核数

Standalone

参数说明
–master值为spark://host:port
–deploy-mode部署模式,运行driver进程在客户端还是集群上,默认为客户端(client),可以指定为cluster
–class运行程序的类的全限定名
–name运行程序的名称
–jars运行程序的jar包,一般放在hdfs上面
–conf运行程序需要指定配置信息
–driver-memory运行程序指定的driver的内存,默认为1G
–executor-memory单个executor需要分配的内存大小,默认为1G
–proxy-user NAME提交应用程序时要模拟的用户,此参数不适用于–principal/–keytab
-v打印其他调试输出
–version打印当前的spark版本
–driver-coresdriver驱动程序的核数,默认为1,只有在部署模式为cluster的时候有效
–kill如果给定则杀死指定的程序,只有在部署模式为cluster的时候有效
–status如果给定,则请求指定驱动程序的状态,只有在部署模式为cluster的时候有效
–supervise如果给定,则在出现故障时重新启动驱动程序,只有在部署模式为cluster的时候有效
–executor-coresexecutor的核数,默认为所有可用的cpu内核数
–total-executor-cores所有的executor的核数,

Mesos

参数说明
–master值为mesos://host:port
–deploy-mode部署模式,运行driver进程在客户端还是集群上,默认为客户端(client),可以指定为cluster
–class运行程序的类的全限定名
–name运行程序的名称
–jars运行程序的jar包,一般放在hdfs上面
–conf运行程序需要指定配置信息
–driver-memory运行程序指定的driver的内存,默认为1G
–executor-memory单个executor需要分配的内存大小,默认为1G
–proxy-user NAME提交应用程序时要模拟的用户,此参数不适用于–principal/–keytab
-v打印其他调试输出
–version打印当前的spark版本
–total-executor-cores所有的executor的核数,
–supervise如果给定,则在出现故障时重新启动驱动程序,只有在部署模式为cluster的时候有效
–kill如果给定则杀死指定的程序,只有在部署模式为cluster的时候有效
–status如果给定,则请求指定驱动程序的状态,只有在部署模式为cluster的时候有效

参考:https://www.cnblogs.com/weiweifeng/p/8073553.html
https://www.cnblogs.com/hgz-dm/p/11356392.html
https://blog.csdn.net/qq_28637799/article/details/102529280
https://blog.csdn.net/wangqinyi574110/article/details/106267966
https://www.cnblogs.com/jason-dong/p/10244736.html

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周小董

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值