文章目录
- 例子
- 提交python脚本
- spark2-submit 提交 python(pyspark)项目
- spark-submit 详细参数说明
- `--master`
- `--deploy-mode`
- `--class`
- `--name`
- `--jars`
- `--packages`
- `--exclude-packages`
- `--repositories`
- `--py-files`
- `--files`
- `--conf PROP=VALUE`
- `--properties-file`
- `--driver-memory`
- `--driver-java-options`
- `--driver-library-path`
- `--driver-class-path`
- `--driver-cores`
- `--executor-memory`
- `--total-executor-cores`
- `--num-executors`
- `--executor-core`
- 参数设置
- Yarn
- Standalone
- Mesos
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)项目
两种方式:local
,yarn
假设一个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.zip
是main.py
和utils.py
两个文件的zip压缩文件。
(2)提交命令
spark2-submit --master yarn --deploy-mode client --py-files project.zip main.py
spark-submit 详细参数说明
--master
master 的地址,提交任务到哪里执行,例如 spark://host:port
, yarn
, local
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-mode
为cluster
时,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-cores | driver驱动程序的核数,默认为1,只有在部署模式为cluster的时候有效 |
–num-executors | executor的个数,默认为2个executor |
–executor-cores | executor的核数,默认为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-cores | driver驱动程序的核数,默认为1,只有在部署模式为cluster的时候有效 |
–kill | 如果给定则杀死指定的程序,只有在部署模式为cluster的时候有效 |
–status | 如果给定,则请求指定驱动程序的状态,只有在部署模式为cluster的时候有效 |
–supervise | 如果给定,则在出现故障时重新启动驱动程序,只有在部署模式为cluster的时候有效 |
–executor-cores | executor的核数,默认为所有可用的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