问题导读:
1、Spar的应用程序部署工具都提供哪些功能?
2、Spar的应用程序部署工具有哪些?
3、什么是spark-submit?
随着Spark的应用越来越广泛,对支持多资源管理器应用程序部署工具的需求也越来越迫切。Spark1.0.0的出现,这个问题得到了逐步改善。从 Spark1.0.0开始,Spark提供了一个容易上手的应用程序部署工具bin/spark-submit,可以完成Spark应用程序在 local、Standalone、YARN、Mesos上的快捷部署。
1:使用说明
进入$SPARK_HOME目录,输入bin/spark-submit --help可以得到该命令的使用帮助。
- hadoop@wyy:/app/hadoop/spark100$ bin/spark-submit --help
- Usage: spark-submit [options] <app jar | python file> [app options]
复制代码
Options:
--master MASTER_URL spark://host:port, mesos://host:port, yarn, or local.
--deploy-mode DEPLOY_MODE driver运行之处,client运行在本机,cluster运行在集群
--class CLASS_NAME 应用程序包的要运行的class
--name NAME 应用程序名称
--jars JARS 用逗号隔开的driver本地jar包列表以及executor类路径
--py-files PY_FILES 用逗号隔开的放置在Python应用程序PYTHONPATH上的.zip, .egg, .py文件列表
--files FILES 用逗号隔开的要放置在每个executor工作目录的文件列表
--properties-file FILE 设置应用程序属性的文件放置位置,默认是conf/spark-defaults.conf
--driver-memory MEM driver内存大小,默认512M
--driver-java-options driver的java选项
--driver-library-path driver的库路径Extra library path entries to pass to the driver
--driver-class-path driver的类路径,用--jars 添加的jar包会自动包含在类路径里
--executor-memory MEM executor内存大小,默认1G
Spark standalone with cluster deploy mode only:
--driver-cores NUM driver使用内核数,默认为1
--supervise 如果设置了该参数,driver失败是会重启
Spark standalone and Mesos only:
--total-executor-cores NUM executor使用的总核数
YARN-only:
--executor-cores NUM 每个executor使用的内核数,默认为1
--queue QUEUE_NAME 提交应用程序给哪个YARN的队列,默认是default队列
--num-executors NUM 启动的executor数量,默认是2个
--archives ARCHIVES 被每个executor提取到工作目录的档案列表,用逗号隔开
关于以上spark-submit的help信息,有几点需要强调一下:
使用类似 --master spark://host:port --deploy-mode cluster会将driver提交给cluster,然后就将worker给kill的现象。
如果要使用--properties-file的话,在--properties-file中定义的属性就不必要在spark-sumbit中再定义了, 比如在conf/spark-defaults.conf 定义了spark.master,就可以不使用--master了。关于Spark属性的优先权为:SparkConf方式 > 命令行参数方式 >文件配置方式,具体参见Spark1.0.0属性配置。
和之前的版本不同,Spark1.0.0会将自身的jar包和--jars选项中的jar包自动传给集群。
Spark使用下面几种URI来处理文件的传播:
file:// 使用file://和绝对路径,是由driver的HTTP server来提供文件服务,各个executor从driver上拉回文件。
hdfs:, http:, https:, ftp: executor直接从URL拉回文件
local: executor本地本身存在的文件,不需要拉回;也可以是通过NFS网络共享的文件。
如果需要查看配置选项是从哪里来的,可以用打开--verbose选项来生成更详细的运行信息以做参考。
2:测试环境
测试程序来源于使用IntelliJ IDEA开发Spark1.0.0应用程序,将测试其中的WordCount1和WordCount2这两个Class。
测试数据来源于搜狗的用户查询日志(SogouQ),详见Spark1.0.0 开发环境快速搭建,虽然用这个数据集测试不是很理想,但由于其完整版足够大,可以分割其中部分数据进行测试,在加上其他例程需要使用,将就采用了这个数据 集。实验中分别截取100000行(SogouQ1.txt)和200000行(SogouQ2.txt)做实验。
3:准备工作
A:集群
切换到用户hadoop启动Spark1.0.0 开发环境快速搭建中搭建的虚拟集群
- [hadoop@hadoop1 ~]$ su - hadoop
- [hadoop@hadoop1 ~]$ cd /app/hadoop/hadoop220
- [hadoop@hadoop1 hadoop220]$ sbin/start-all.sh
- [hadoop@hadoop1 hadoop220]$ cd ../spark100/
- [hadoop@hadoop1 spark100]$ sbin/start-all.sh
复制代码
B:客户端
在客户端切换到用户hadoop并切换到/app/hadoop/spark100目录,将实验数据上传hadoop集群,然后将使用IntelliJ IDEA开发Spark1.0.0应用程序生成的程序包复制过来。
- mmicky@wyy:~/data$ su - hadoop
- hadoop@wyy:~$ cd /app/hadoop/hadoop220
- hadoop@wyy:/app/hadoop/hadoop220$ bin/hdfs dfs -mkdir -p /dataguru/data
- hadoop@wyy:/app/hadoop/hadoop220$ bin/hdfs dfs -put /home/mmicky/data/SogouQ1.txt /dataguru/data/
- hadoop@wyy:/app/hadoop/hadoop220$ bin/hdfs dfs -put /home/mmicky/data/SogouQ2.txt /dataguru/data/
复制代码
检查SogouQ1.txt的块分布
- hadoop@wyy:/app/hadoop/hadoop220$ bin/hdfs fsck /dataguru/data/SogouQ1.txt -files -blocks -locations -racks
- Connecting to namenode via http://hadoop1:50070
- FSCK started by hadoop (auth:SIMPLE) from /192.168.1.111 for path /dataguru/data/SogouQ1.txt at Sat Jun 14 03:47:39 CST 2014
- /dataguru/data/SogouQ1.txt 108750574 bytes, 1 block(s): OK
- 0. BP-1801429707-192.168.1.171-1400957381096:blk_1073741835_1011 len=108750574 repl=1 [/default-rack/192.168.1.171:50010]
复制代码
检查SogouQ2.txt的块分布
- hadoop@wyy:/app/hadoop/hadoop220$ bin/hdfs fsck /dataguru/data/SogouQ2.txt -files -blocks -locations -racks
- Connecting to namenode via http://hadoop1:50070
- FSCK started by hadoop (auth:SIMPLE) from /192.168.1.111 for path /dataguru/data/SogouQ2.txt at Sat Jun 14 03:48:07 CST 2014
- /dataguru/data/SogouQ2.txt 217441417 bytes, 2 block(s): OK
- 0. BP-1801429707-192.168.1.171-1400957381096:blk_1073741836_1012 len=134217728 repl=1 [/default-rack/192.168.1.173:50010]
- 1. BP-1801429707-192.168.1.171-1400957381096:blk_1073741837_1013 len=83223689 repl=1 [/default-rack/192.168.1.172:50010]
复制代码
切换到spark目录并复制程序包
- hadoop@wyy:/app/hadoop/hadoop220$ cd ../spark100
- hadoop@wyy:/app/hadoop/spark100$ cp /home/mmicky/IdeaProjects/week2/out/artifacts/week2/week2.jar .
复制代码
4:实验
下面给出了几种实验CASE的命令,具体的运行架构会抽取几个例子在Spark1.0.0 on Standalone 运行架构实例解析说明。
在使用spark-submit提交spark应用程序的时候,需要注意以下几点:
集群外的客户机向Spark Standalone部署Spark应用程序时,要注意事先实现该客户机和Spark Standalone之间的SSH无密码登录。
向YARN部署spark应用程序的时候,注意executor-memory的大小,其内存加上container要使用的内存(默认值是1G)不要超过NM可用内存,不然分配不到container来运行executor。
来源:oschina
链接:https://my.oschina.net/u/2004245/blog/736515