用 spark-submit 启动应用
如果用户的应用程序被打包好了,它可以使用 bin/spark-submit
脚本来启动。这个脚本负责设置 Spark 和它的依赖的 classpath,并且可以支持 Spark 所支持的不同的 Cluster Manager 以及 deploy mode(部署模式):
1 ./bin/spark-submit
2 --class <main-class>
3 --master <master-url>
4 --deploy-mode <deploy-mode>
5 --conf <key>=<value>
6 ... # other options
7 <application-jar>
8 [application-arguments]
一些常用的 options(选项)有 :
--class
: 您的应用程序的入口点(例如。org.apache.spark.examples.SparkPi
)--master
: 集群的 master URL (例如spark://23.195.26.187:7077
)--deploy-mode
: 是在 worker 节点(cluster
) 上还是在本地作为一个外部的客户端(client
) 部署您的 driver(默认:client
) †--conf
: 按照 key=value 格式任意的 Spark 配置属性。对于包含空格的 value(值)使用引号包 “key=value” 起来。application-jar
: 包括您的应用以及所有依赖的一个打包的 Jar 的路径。该 URL 在您的集群上必须是全局可见的,例如,一个hdfs://
path 或者一个file://
在所有节点是可见的。application-arguments
: 传递到您的 main class 的 main 方法的参数,如果有的话。常见的部署策略是从一台 gateway 机器物理位置与您 worker 在一起的机器(比如,在 standalone EC2 集群中的 Master 节点上)来提交您的应用。在这种设置中,
client
模式是合适的。在client
模式中,driver 直接运行在一个充当集群 client 的spark-submit
进程内。应用程序的输入和输出直接连到控制台。因此,这个模式特别适合那些设计 REPL(例如,Spark shell)的应用程序。另外,如果您从一台远离 worker 机器的机器(例如,本地的笔记本电脑上)提交应用程序,通常使用
cluster
模式来降低 driver 和 executor 之间的延迟。目前,Standalone 模式不支持 Cluster 模式的 Python 应用。对于 Python 应用,在
<application-jar>
的位置简单的传递一个.py
文件而不是一个 JAR,并且可以用--py-files
添加 Python.zip
,.egg
或者.py
文件到 search path(搜索路径)。这里有一些选项可用于特定的 cluster manager 中。例如, Spark standalone cluster 用cluster
部署模式, 您也可以指定--supervise
来确保 driver 在 non-zero exit code 失败时可以自动重启。为了列出所有spark-submit
, 可用的选项,用--help
. 来运行它。这里是一些常见选项的例子 :1 # Run application locally on 8 cores 2 ./bin/spark-submit 3 --class org.apache.spark.examples.SparkPi 4 --master local[8] 5 /path/to/examples.jar 6 100 7 8 # Run on a Spark standalone cluster in client deploy mode 9 ./bin/spark-submit 10 --class org.apache.spark.examples.SparkPi 11 --master spark://207.184.161.138:7077 12 --executor-memory 20G 13 --total-executor-cores 100 14 /path/to/examples.jar 15 1000 16 17 # Run on a Spark standalone cluster in cluster deploy mode with supervise 18 ./bin/spark-submit 19 --class org.apache.spark.examples.SparkPi 20 --master spark://207.184.161.138:7077 21 --deploy-mode cluster 22 --supervise 23 --executor-memory 20G 24 --total-executor-cores 100 25 /path/to/examples.jar 26 1000 27 28 # Run on a YARN cluster 29 export HADOOP_CONF_DIR=XXX 30 ./bin/spark-submit 31 --class org.apache.spark.examples.SparkPi 32 --master yarn 33 --deploy-mode cluster # can be client for client mode 34 --executor-memory 20G 35 --num-executors 50 36 /path/to/examples.jar 37 1000 38 39 # Run a Python application on a Spark standalone cluster 40 ./bin/spark-submit 41 --master spark://207.184.161.138:7077 42 examples/src/main/python/pi.py 43 1000 44 45 # Run on a Mesos cluster in cluster deploy mode with supervise 46 ./bin/spark-submit 47 --class org.apache.spark.examples.SparkPi 48 --master mesos://207.184.161.138:7077 49 --deploy-mode cluster 50 --supervise 51 --executor-memory 20G 52 --total-executor-cores 100 53 http://path/to/examples.jar 54 1000
Master URLs
传递给 Spark 的 master URL 可以使用下列格式中的一种 :
Master URL Meaning local
使用一个线程本地运行 Spark(即,没有并行性)。 local[K]
使用 K 个 worker 线程本地运行 Spark(理想情况下,设置这个值的数量为您机器的 core 数量)。 local[K,F]
使用 K 个 worker 线程本地运行 Spark并允许最多失败 F次 (查阅 spark.task.maxFailures 以获取对该变量的解释) local[*]
使用更多的 worker 线程作为逻辑的 core 在您的机器上来本地的运行 Spark。 local[*,F]
使用更多的 worker 线程作为逻辑的 core 在您的机器上来本地的运行 Spark并允许最多失败 F次。 spark://HOST:PORT
连接至给定的 Spark standalone cluster master. master。该 port(端口)必须有一个作为您的 master 配置来使用,默认是 7077。 spark://HOST1:PORT1,HOST2:PORT2
连接至给定的 Spark standalone cluster with standby masters with Zookeeper. 该列表必须包含由zookeeper设置的高可用集群中的所有master主机。该 port(端口)必须有一个作为您的 master 配置来使用,默认是 7077。 mesos://HOST:PORT
连接至给定的 Mesos 集群. 该 port(端口)必须有一个作为您的配置来使用,默认是 5050。或者,对于使用了 ZooKeeper 的 Mesos cluster 来说,使用 mesos://zk://...
. 。使用--deploy-mode cluster
, 来提交,该 HOST:PORT 应该被配置以连接到 MesosClusterDispatcher.yarn
连接至一个 YARN cluster in
client
orcluster
mode 取决于--deploy-mode
. 的值在 client 或者 cluster 模式中。该 cluster 的位置将根据HADOOP_CONF_DIR
或者YARN_CONF_DIR
变量来找到。-
高级的依赖管理
在使用
spark-submit
时,使用--jars
选项包括的应用程序的 jar 和任何其它的 jar 都将被自动的传输到集群。在--jars
后面提供的 URL 必须用逗号分隔。该列表会被包含到 driver 和 executor 的 classpath 中。--jars
不支持目录的形式。Spark 使用下面的 URL 格式以允许传播 jar 时使用不同的策略 :
- file: - 绝对路径和
file:/
URI 通过 driver 的 HTTP file server 提供服务,并且每个 executor 会从 driver 的 HTTP server 拉取这些文件。 - hdfs:, http:, https:, ftp: - 如预期的一样拉取下载文件和 JAR
- local: - 一个用 local:/ 开头的 URL 预期作在每个 worker 节点上作为一个本地文件存在。这样意味着没有网络 IO 发生,并且非常适用于那些已经被推送到每个 worker 或通过 NFS,GlusterFS等共享的大型的 file/JAR。
N注意,那些 JAR 和文件被复制到 working directory(工作目录)用于在 executor 节点上的每个 SparkContext。这可以使用最多的空间显著量随着时间的推移,将需要清理。在 Spark On YARN 模式中,自动执行清理操作。在 Spark standalone 模式中,可以通过配置
spark.worker.cleanup.appDataTtl
属性来执行自动清理。用户也可以通过使用
--packages
来提供一个逗号分隔的 maven coordinates(maven 坐标)以包含任何其它的依赖。在使用这个命令时所有可传递的依赖将被处理。其它的 repository(或者在 SBT 中被解析的)可以使用--repositories
该标记添加到一个逗号分隔的样式中。 (注意,对于那些设置了密码保护的库,在一些情况下可以在库URL中提供验证信息,例如https://user:password@host/...
.以这种方式提供验证信息需要小心。) 这些命令可以与pyspark
,spark-shell
和spark-submit
配置会使用以包含 Spark Packages(Spark 包)。 对于 Python 来说,也可以使用--py-files
选项用于分发.egg
,.zip
和.py
libraries 到 executor 中。# 更多信息
如果您已经部署了您的应用程序,集群模式概述 描述了在分布式执行中涉及到的组件,以及如何去监控和调试应用程序。
- file: - 绝对路径和