Spark Submit提交应用程序

时间:2015-04-07 17:34:35   收藏:0   阅读:33941

英文标题:Submitting Applications

英文原址:http://spark.apache.org/docs/latest/submitting-applications.html

Spark Version:1.3.0

      

Spark根目录的bin目录下spark-submit脚本用于在集群上启动应用程序,它通过统一接口使用Spark所支持的所有集群管理器,因此无需特殊配置每一个应用程序。

 

1,绑定应用程序依赖

如果代码依赖于其它项目,为了将代码分发到Spark集群,就需要将这些依赖一起打包到应用程序中去。sbt和Maven都有装配插件,在创建装配的jar时,要列出Spark和Hadoop作为规定的依赖,如果Spark和Hadoop在集群管理器的运行时中提供了,就无需将其绑定到应用程序中去。一旦装配好jar包,就可以调用bin/spark-submit脚本执行了。

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

 

2,用spark-submit启动应用程序

如果绑定了应用程序,就可以使用bin/spark-submit脚本启动应用程序了,这个脚本主要是进行Spark和应用程序依赖包的类路径(classpath)设置,并且可以支持不同的集群管理器和Spark支持的部署模式。提交任务后,无论时Standalone模式还是Spark on Yarn模式,都可以通过Web地址http://<driver-node>:4040来查看当前运行状态。

    ./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:集群的master URL(例如,spark://localhost:7077)

 --deploy-mode:将driver部署到worker节点(cluster模式)或者作为外部客户端部署到本地(client模式),默认情况下是client模式

--conf:用key=value格式强制指定Spark配置属性,用引号括起来

--application-jar:包含应用程序和所有依赖的jar包的路径,路径必须是在集群中是全局可见的,例如,hdfs://路径或者file://路径

--application-arguments:传递给主类中main函数的参数

一般的部署策略是在一个网关机器上提交应用程序,这个机器和Worker机器部署在一个网络中(例如,Standalone模式的EC2集群中的Master节点)。在此部署策略中,client模式更为合适,client模式中的driver直接跟spark-submit进程一起启动,spark-submit进程在此扮演集群中一个client的角色。应用程序的输入输出依赖于控制台,如此一来,这种模式就特别适合关于REPL(例如,Spark shell)的应用程序。

另一种部署策略是,应用程序通过一台远离Worker节点的机器提交(例如,本地或者便携设备),这种情况下,一般使用cluster模式最小化drivers和executors之间的网络延时。注意,cluster模式暂时不支持于Mesos集群或Python应用程序。Python应用程序中,简单地在application-jar处传递一个.py文件而不是JAR文件,然后用--py-files添加Python.zip,.egg或者.py文件到搜索路径。

还有一些集群管理器正在使用的可选项。例如,对于Spark Standalone的cluster部署模式,也可以使用--supervise以确定driver在遇到非0(non-zero)退出码的错误时进行自动重启。可运行spark-submit带上--help列出所有的可选项。以下是一些常用选项的例子:

# Run application locally on 8 cores

./bin/spark-submit \

  --classorg.apache.spark.examples.SparkPi \

 --master local[8] \

 /path/to/examples.jar \

  100

 

# Run on a Spark Standalone cluster in clientdeploy mode

./bin/spark-submit \

  --classorg.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 clusterdeploy mode with supervise

./bin/spark-submit \

  --classorg.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 cluster

export HADOOP_CONF_DIR=XXX

./bin/spark-submit \

  --classorg.apache.spark.examples.SparkPi \

  --masteryarn-cluster \  # can also be`yarn-client` for client mode

 --executor-memory 20G \

 --num-executors 50 \

 /path/to/examples.jar \

  1000

 

# Run a Python application on a SparkStandalone cluster

./bin/spark-submit \

 --master spark://207.184.161.138:7077 \

 examples/src/main/python/pi.py \

  1000

 

3,Master URLs

传递给Spark的master url可以是以下任意格式之一:

master URL

意义

local

使用1个worker线程本地运行Spark(即完全没有并行化)

local[K]

使用K个worker线程本地运行Spark(最好将K设置为机器的CPU核数)

local[*]

根据机器的CPU逻辑核数,尽可能多地使用Worker线程

spark://HOST:PORT

连接到给定的Spark Standalone集群的Master,此端口必须是Master配置的端口,默认为7077

mesos://HOST:PORT

连接到给定的Mesos集群的Master,此端口必须是Master配置的端口,默认为5050。若Mesos集群使用ZooKeeper,则master URL使用mesos://zk://……

yarn-client

以client模式连接到YARN集群,集群位置将通过HADOOP_CONF_DIR环境变量获得

yarn-cluster

以cluster模式连接到YARN集群,集群位置将通过HADOOP_CONF_DIR环境变量获得

 

4,从文件中加载配置

spark-submit脚本可以通过属性文件加载默认的Spark配置值并将其传递给应用程序。默认情况下会读取Spark目录中conf/spark-default.conf文件中的各配置项,详细信息参考“加载默认配置”。

加载默认配置可以取消spark-submit命令的某些参数选项。例如,如果设置了spark.master属性,那么可以直接省略 --master选项。一般情况下,直接使用SparkConf设置的属性值具有最高的优先级,然后是spark-submit命令中传递的选项,最后才是默认配置文件中的值。如果你不清楚配置选项是来自于哪里,可以运行spark-submit  --verbose打印处更细粒度的调试信息。

 

5,高级依赖管理

使用spark-submit时,应用程序的jar包以及通过—jars选项包含的任意jar文件都会被自动传到集群中。Spark使用了下面的URL格式允许不同的jar包分发策略。

file:,绝对路径且file:/URIs是作为driver的HTTP文件服务器,且每个executor会从driver的HTTP服务器拉取文件;

hdfs:,http:,https:,ftp:,从这些给定的URI中拉取文件和JAR包;

local:,以local:/开始的URI应该是每个worker节点的本定文件,这意味着没有网络IO开销,并且推送或通过NFS/GlusterFS等共享到每个worker大文件/JAR文件或能很好的工作。

注意,每个SparkContext的JAR包和文件都会被复制到executor节点的工作目录下,这将用掉大量的空间,然后还需要清理干净。在YARN下,清理是自动进行的。在Spark Standalone下,自动清理可以通过配置spark.worker.cleanup.appDataTtl属性做到,此配置属性的默认值是7*24*3600。

用户可以用--packages选项提供一个以逗号分隔的maven清单来包含任意其他依赖。其它的库(或SBT中的resolvers)可以用--repositories选项添加(同样用逗号分隔),这些命令都可以用在pyspark,spark-shell和spark-submit中来包含一些Spark包。对Python而言,--py-files选项可以用来向executors分发.egg,.zip和.py库。

 

附:集群模式概况描述了在分布式执行下时所涉及的组件,以及如何监控和调试应用程序。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!