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
master 的地址,提交任务到哪里执行,例如 spark://host:port, yarn, local
MASTER_URL:设置集群的主URL,用于决定任务提交到何处执行。
常见的选项有
在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client
应用程序的主类,仅针对 java 或 scala 应用
CLASS_NAME:指定应用程序的类入口,即主类,仅针对java、scala程序,不作用于python程序
应用程序的名称
用逗号分隔的本地 jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下
包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标
为了避免冲突 ,指定的参数–package中不包含的jars包
远程 repository
附加的远程资源库(包含jars包)等,可以通过maven坐标进行搜索
PY_FILES:逗号隔开的的.zip、.egg、.py
文件,这些文件会放置在PYTHONPATH下,该参数仅针对python应用程序
FILES:逗号隔开的文件列表,这些文件将存放于每一个工作节点进程目录下
指定spark配置属性的值,格式为PROP=VALUE, 例如 -conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"
指定需要额外加载的配置文件,用逗号分隔,如果不指定,默认为 conf/spark-defaults.conf
Driver内存,默认 1G
传给 driver 的额外的 Java 选项
传给 driver 的额外的库路径
传给 driver 的额外的类路径,用–jars 添加的jar包会自动包含在类路径里
Driver 的核数,默认是1。在 yarn 或者 standalone 下使用
每个 executor 的内存,默认是1G
所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用
启动的 executor 数量。默认为2。在 yarn 下使用
每个 executor 的核数。在yarn或者standalone下使用
当’–master’参数设置为Standalone,‘–deploy-mode’参数设置为cluster时,如下选项可以设置:
当’–master’参数设置为Standalone或者Mesos,‘–deploy-mode’参数设置为cluster时,如下选项可以设置:
当’–master’参数设置为Standalone或者Mesos时,如下选项可以设置:
当’–master’参数设置为Standalone或者YARN时,如下选项可以设置:
当’–master’参数设置为YARN时,如下选项可以设置:
在提交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
两种方式
假设一个pyspark的项目下边有两个文件:main.py和utils.py。其中main.py是项目的主入口文件,utils.py中可能包含一些UDF。
(1)目录结构
(2)提交命令
spark2-submit --master local --deploy-mode client main.py
(1)目录结构
其中project.zip是main.py和utils.py两个文件的zip压缩文件。 (2)提交命令
spark2-submit --master yarn --deploy-mode client --py-files project.zip main.py
参考: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