1概述
- saprk的运行模式:local/yarn/standalone/mesos/k8s;local模式是最常用的一种模式。
- spark目录介绍
total 108
drwxr-xr-x. 3 hadoop hadoop 4096 Mar 3 08:34 bin
drwxrwxr-x. 2 hadoop hadoop 4096 Apr 20 07:47 conf
drwxr-xr-x. 5 hadoop hadoop 4096 Mar 3 08:34 data
drwxrwxr-x. 4 hadoop hadoop 4096 Mar 3 08:34 examples
drwxrwxr-x. 2 hadoop hadoop 12288 Apr 20 03:31 jars
-rw-r--r--. 1 hadoop hadoop 17881 Mar 3 08:34 LICENSE
drwxr-xr-x. 2 hadoop hadoop 4096 Mar 3 08:34 licenses
drwxrwxr-x. 2 hadoop hadoop 4096 Apr 20 03:36 logs
-rw-r--r--. 1 hadoop hadoop 24645 Mar 3 08:34 NOTICE
drwxr-xr-x. 6 hadoop hadoop 4096 Mar 3 08:34 python
-rw-r--r--. 1 hadoop hadoop 3809 Mar 3 08:34 README.md
-rw-r--r--. 1 hadoop hadoop 136 Mar 3 08:34 RELEASE
drwxr-xr-x. 2 hadoop hadoop 4096 Mar 3 08:34 sbin
drwxrwxr-x. 3 hadoop hadoop 4096 Apr 19 20:45 work
drwxrwxr-x. 2 hadoop hadoop 4096 Mar 3 08:34 yarn
用户可执行文件:bin
系统可执行文件:sbin
配置文件:conf
放置的jar包:jars
(在saprk1.x中该目录下只有一个大的包,所有jar包都在这个包里面。在spark2.x该jars目录下就有很多的小的jar包。这里存在一个spark的调优,后面会讲解。)
spark中的例子:examples
3.核心配置文件
saprk-defaults.conf、spark-env.sh(自己cp一份spark-env.sh.template)
4.日志信息
执行spark的启动命令时,出现问题现有的打印在屏幕上的日志可能太少不便于debug,此时可进入spark的conf目录下,该目录下有一个log4j.properties.template文件,拷贝一份,将其中“log4j.rootCategory=INFO,console”中的”INFO”改成”DEBUG”即可。
其中 [level] 是日志输出级别,共有5级:
FATAL 0
ERROR 3 为严重错误 主要是程序的错误
WARN 4 为一般警告,比如session丢失
INFO 6 为一般要显示的信息,比如登录登出
DEBUG 7 为程序的调试信息
2 local模式
在spark-env.sh中配置如下信息,即可使用(只需启动start-dfs.sh)
export JAVA_HOME=/usr/java/jdk1.8.0_45
简单来说local就是一种OOTB: out of the box 开箱即用。基本不需要做任何改动。
- 启动方式:在${SPARK_HOME}/bin下执行
./spark-shell --master local[n]
n代表该作业所需要消耗的core的数量。 - 简单测试
本地文件测试
val file=sc.textFile("file:///home/hadoop/data/input.txt")
执行上面一句话后查看web UI :http://192.168.137.130:4040 并没有变化,因为没有进行action。
file.count(将会执行action,这是查看web UI )
3 Standalone模式(Spark集群)
Standalone模式相当于Spark集群模式,对于Hadoop集群我们知道: NN/DN RM/NM,部署在不同的机器上;Spark集群:和Hadoop集群是一样的,如果布置多台机器,那么每台机器都要有Master/Worker(主节点Master,从节点Worker)。
- 配置
(集群内的机器都要修改)
vi spark-env.sh 添加
SPARK_MASTER_HOST=192.168.149.141 ##配置Master节点
SPARK_WORKER_CORES=2 ##配置应用程序允许使用的核数(默认是所有的core)
SPARK_WORKER_MEMORY=2g ##配置应用程序允许使用的内存(默认是一个G)
vi slaves 添加
192.168.137.200
192.168.137.201
192.168.137.202
启动spark集群:
./sbin/start-all.sh
可以在web UI中查看:http://192.168.137.130:8080- 执行spark-shell
bin目录下: ./spark-shell --master spark://hadoop:7077
这是提交一个作业会默认占光所有的core,作业未完成重新开启一个作业,那么新作业则没有core,将会处于等待状态。可以进行参数修改:./spark-shell --master spark://hadoop:7077 --total-executor-cores 1
,来指定该spark-shell作业占用的core数为1;一个core默认占用一个G的内存。
Spark on YARN
这时候并不需要启动Master/Worker,因为他是把作业提交到yarn上运行的,所以不需要任何的spark相关的进程。仅仅是将spark作为一个客户端而已。
(这里可能会遇到错误,详见这篇博客)
启动yarn
start-yarn.sh
配置:
vi saprk-env.sh
添加:
HADOOP_CONF_DIR=/opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop
不添加这个配置会报错的。
- 启动:
./spark-shell --master yarn --jars /opt/software/hive/lib/mysql-connector-java-5.1.45
说明:--jars后面跟的是mysql驱动包,不加上会报错的。
总结:
这几种分布式部署方式各有利弊,通常需要根据实际情况决定采用哪种方案。进行方案选择时,往往要考虑公司的技术路线(采用Hadoop生态系统还是其他生态系统)、相关技术人才储备等。上面涉及到Spark的许多部署模式,究竟哪种模式好这个很难说,需要根据你的需求,如果你只是测试Spark Application,你可以选择local模式。而如果你数据量不是很多,Standalone 是个不错的选择。当你需要统一管理集群资源(Hadoop、Spark等),那么你可以选择Yarn或者mesos,但是这样维护成本就会变高。
从对比上看,mesos似乎是Spark更好的选择,也是被官方推荐的但如果你同时运行hadoop和Spark,从兼容性上考虑,Yarn是更好的选择。如果你不仅运行了hadoop,spark。还在资源管理上运行了docker,Mesos更加通用。Standalone对于小规模计算集群更适合!