Spark -7:提交spark应用程序

来源:互联网 发布:北京淘宝纸箱 企业05 编辑:程序博客网 时间:2024/05/18 00:00

Spark的bin目录中的 spark-submit脚本用于启动集群上的应用程序。它可以通过统一的接口使用Spark的所有支持的集群管理器,因此您不必为每个集群管理器专门配置您的应用程序


捆绑应用程序的依赖关系


如果您的代码依赖于其他项目,则需要将它们与应用程序一起打包,以便将代码分发到Spark集群。为此,请创建一个包含代码及其依赖关系的程序集jar(或“uber”jar)。 sbt和Maven都有程序集插件。创建组件jar时,将Spark和Hadoop列为提供的依赖关系;这些不需要捆绑,因为它们在运行时由集群管理器提供。一旦你有一个组装的jar,你可以调用bin / spark-submit脚本,如下所示,同时传递你的jar。


对于Python,您可以使用spark-submit的--py-files参数来添加.py,.zip或.egg文件以与应用程序一起分发。如果你依赖于多个Python文件,我们建议将它们打包成.zip或.egg文件。


使用spark-submit启动应用程序


捆绑用户应用程序后,可以使用bin / spark-submit脚本启动。此脚本负责使用Spark及其依赖关系设置类路径,并且可以支持Spark支持的不同集群管理器和部署模式:


./bin/spark-submit \  --class <main-class> \  --master <master-url> \  --deploy-mode <deploy-mode> \  --conf <key>=<value> \  ... # other options  <application-jar> \  [application-arguments]


一些常用的选项是:


--class:应用程序的入口点(例如org.apache.spark.examples.SparkPi)

--master:群集的主网址(例如spark://23.195.26.187:7077)

--deploy-mode:是否在工作节点(集群)上或在本地作为外部客户端(客户端)部署驱动程序(默认值:客户端)

--conf:key = value格式的任意Spark配置属性。对于包含空格的值,在引号中换行“key = value”(如图所示)。

application-jar:绑定的jar包的路径,包括你的应用程序和所有依赖。 URL必须在集群内部全局可见,例如,所有节点上存在的hdfs://路径或file://路径。

application-arguments:参数传递给你的主类的main方法,如果有的话



†常见的部署策略是从与工作机器物理位置相同的网关机器(例如独立EC2群集中的主节点)提交应用程序。在此设置中,客户端模式是适当的。在客户端模式下,驱动程序直接在火花提交过程中启动,该过程充当集群的客户端。应用程序的输入和输出连接到控制台。因此,此模式特别适合涉及REPL的应用程序(例如Spark shell)。


或者,如果您的应用程序是从远离工作机器的机器(例如在笔记本电脑上本地)提交的,则通常使用集群模式以最小化驱动程序和执行程序之间的网络延迟。目前,独立模式不支持Python应用程序的集群模式。


对于Python应用程序,只需在<application-jar>而不是JAR的地方传递一个.py文件,然后使用--py-files将Python .zip,.egg或.py文件添加到搜索路径。有几个特定于正在使用的集群管理器的可用选项。例如,对于具有集群部署模式的Spark独立集群,您还可以指定--supervise以确保驱动程序在发生非零退出代码失败时自动重新启动。要枚举spark-submit可用的所有这些选项,请使用--help运行它。以下是常见选项的几个示例:


# Run application locally on 8 cores./bin/spark-submit \  --class org.apache.spark.examples.SparkPi \  --master local[8] \  /path/to/examples.jar \  100# Run on a Spark standalone cluster in client deploy mode./bin/spark-submit \  --class org.apache.spark.examples.SparkPi \  --master spark://207.184.161.138:7077 \  --executor-memory 20G \  --total-executor-cores 100 \  /path/to/examples.jar \  1000# Run on a Spark standalone cluster in cluster deploy mode with supervise./bin/spark-submit \  --class org.apache.spark.examples.SparkPi \  --master spark://207.184.161.138:7077 \  --deploy-mode cluster \  --supervise \  --executor-memory 20G \  --total-executor-cores 100 \  /path/to/examples.jar \  1000# Run on a YARN clusterexport HADOOP_CONF_DIR=XXX./bin/spark-submit \  --class org.apache.spark.examples.SparkPi \  --master yarn \  --deploy-mode cluster \  # can be client for client mode  --executor-memory 20G \  --num-executors 50 \  /path/to/examples.jar \  1000# Run a Python application on a Spark standalone cluster./bin/spark-submit \  --master spark://207.184.161.138:7077 \  examples/src/main/python/pi.py \  1000# Run on a Mesos cluster in cluster deploy mode with supervise./bin/spark-submit \  --class org.apache.spark.examples.SparkPi \  --master mesos://207.184.161.138:7077 \  --deploy-mode cluster \  --supervise \  --executor-memory 20G \  --total-executor-cores 100 \  http://path/to/examples.jar \  1000


Master URLs

传递给Spark的master URL可以采用以下格式之一


Master URLMeaninglocalRun Spark locally with one worker thread (i.e. no parallelism at all).local[K]Run Spark locally with K worker threads (ideally, set this to the number of cores on your machine).local[*]Run Spark locally with as many worker threads as logical cores on your machine.spark://HOST:PORTConnect to the given Spark standalone cluster master. The port must be whichever one your master is configured to use, which is 7077 by default.mesos://HOST:PORTConnect to the given Mesos cluster. The port must be whichever one your is configured to use, which is 5050 by default. Or, for a Mesos cluster using ZooKeeper, use mesos://zk://.... To submit with --deploy-mode cluster, the HOST:PORT should be configured to connect to the MesosClusterDispatcher.yarnConnect to a YARN cluster in client or cluster mode depending on the value of --deploy-mode. The cluster location will be found based on the HADOOP_CONF_DIR or YARN_CONF_DIR variable.从文件加载配置


spark-submit脚本可以从属性文件中加载默认的Spark配置值,并将它们传递给你的应用程序。默认情况下,它将从Spark目录中的conf / spark-defaults.conf中读取选项。有关详细信息,请参阅加载默认配置一节。


以这种方式加载默认Spark配置可以避免需要某些标志来进行spark-submit。例如,如果设置了spark.master属性,则可以安全地忽略spark提交中的--master标志。一般来说,在SparkConf上显式设置的配置值采用最高优先级,然后标志传递到spark-submit,然后传递到默认文件中的值。


如果您不清楚配置选项来自哪里,您可以通过使用--verbose选项运行spark-submit打印出细粒度的调试信息。



高级依赖管理

使用spark-submit时,应用程序jar以及包含在-jars选项中的任何jar将自动传输到集群。 --jars之后提供的URL必须用逗号分隔。该列表包含在驱动程序和执行程序类路径中。目录扩展不能与--jars一起使用。


Spark使用以下URL方案来允许不同的策略传播jar:

file: - 绝对路径和文件:/ URI由驱动程序的HTTP文件服务器提供,每个执行器从驱动程序HTTP服务器拉取文件。

hdfs :, http :, https :, ftp: - 这些从URI中下拉文件和JAR文件

local: - 以local:/开头的URI应该作为每个工作节点上的本地文件存在。这意味着不会产生网络IO,并且适用于推送到每个工作线程或通过NFS,GlusterFS等共享的大文件/ JAR。


请注意,JAR和文件被复制到执行器节点上每个SparkContext的工作目录。这可能会占用大量的空间,随着时间的推移,需要清理。使用YARN,自动处理清除,使用Spark独立的,可以使用spark.worker.cleanup.appDataTtl属性配置自动清除。


用户还可以通过用--packages提供逗号分隔的maven坐标列表来包括任何其他依赖项。使用此命令时将处理所有传递依赖性。可以使用标志--repositories以逗号分隔的方式添加其他存储库(或SBT中的解析器)。 (请注意,在某些情况下,可以在存储库URI中提供受密码保护的存储库的凭据,例如https:// user:password @ host / ....请谨慎提供凭据。)这些命令可以是与pyspark,spark-shell和spark-submit一起使用以包括Spark Packages。


对于Python,等效的--py-files选项可用于将.egg,.zip和.py库分发给执行程序。




0 0
原创粉丝点击