Spark的安装部署

概览

1.安装scala
2.单机版的安装部署
3.spark集群的安装部署
4.基于Zookeeper的Spark高可用集群

准备

CentOS7
scala-2.10.5
spark-2.1.1-bin-hadoop2.7
hadoop高可用集群(或普通集群)
工具:VMware12 Xshell5 Xftp5

1.安装scala

因为spark需要scala的环境,所以需要先安装scala

启动虚拟机,利用Xshell连接,使操作更加方便,然后使用Xftp连接以便上传文件

首先在/usr路径下创建一个scala文件夹当作安装目录以及安装包的上传路径

1
2
3
4
5
6
7
8
9
10
[root@master ~]# cd /usr/
[root@master usr]# ls
bin flume hadoop hive java lib libexec sbin sqoop tmp zookeeper.out
etc games hbase include kafka lib64 local share src zookeeper
[root@master usr]# mkdir scala
[root@master usr]# ls
bin flume hadoop hive java lib libexec sbin share src zookeeper
etc games hbase include kafka lib64 local scala sqoop tmp zookeeper.out
[root@master usr]# cd scala/
[root@master scala]#

利用Xftp上传scala的压缩包到此路径下
在这里插入图片描述
在这里插入图片描述
解压

1
[root@master scala]# tar -zxf scala-2.10.5.tgz

配置环境变量

1
[root@master scala]# vim /etc/profile

在最后添加上两行

1
2
3
#scala的安装目录
export SCALA_HOME=/usr/scala/scala-2.10.5
export PATH=$PATH:$SCALA_HOME/bin

esc+:wq保存退出
刷新环境变量

1
[root@master scala]# source /etc/profile

验证是否安装成功

1
2
[root@master scala]# scala -version
Scala code runner version 2.10.5 -- Copyright 2002-2013, LAMP/EPFL

2.单机版的安装部署

在/usr下创建一个spark文件夹当作安装目录和安装包上传路径

1
2
3
4
[root@master scala]# cd ..
[root@master usr]# mkdir spark
[root@master usr]# cd spark/
[root@master spark]#

还是通过Xftp将spark安装包上传到此路径下
在这里插入图片描述

解压

1
[root@master spark]# tar -zxf spark-2.1.1-bin-hadoop2.7.tgz

配置环境变量

1
[root@master spark]# vim /etc/profile

在最后添加两行

1
2
export SPARK_HOME=/usr/spark/spark-2.1.1-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

保存退出刷新环境变量

1
[root@master spark]# source /etc/profile

测试
运行一个简单的spark程序
spark-shell
在这里插入图片描述

可以在/tmp文件夹下创建一个测试文件
先复制个Xshell窗口
在这里插入图片描述

在新的窗口操作

1
2
[root@master ~]# cd /tmp/
[root@master tmp]# vim a.log

我们在a.log中创建一些假数据

1
2
3
4
hello world
hello spark
hello boy
hello girl

然后在原来的窗口操作

1
2
3
4
5
6
scala> sc.textFile("/tmp/a.log").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).collect.foreach(println)
(spark,1)
(girl,1)
(hello,4)
(boy,1)
(world,1)

会出现如上的结果
这说明我们的单机版spark安装成功了
退出spark操作页面

1
scala> :q

接下来会在单机版的基础上安装spark集群

3.spark集群的安装部署

首先我们需要在master主机上配置好单机版spark

集群的搭建需要我们预先搭建好hadoop高可用集群(或普通集群)才行

集群规划
在这里插入图片描述

首先我们在已经安装好单机spark的master上继续配置

修改spark-env .sh

记住先停止单机版的spark
查看jps进程,如果还在运行就强制杀死进程

修改spark-env.sh文件

1
2
3
4
[root@master spark]# cd /usr/spark/spark-2.1.1-bin-hadoop2.7/conf/
[root@master conf]# ls
docker.properties.template log4j.properties.template slaves.template spark-env.sh.template
fairscheduler.xml.template metrics.properties.template spark-defaults.conf.template

我们会发现没有这个文件,但是却有一个spark-env.sh.template文件,利用这个模版复制出来一个spark-env .sh

1
[root@master conf]# cp spark-env.sh.template spark-env.sh

修改

1
[root@master conf]# vim spark-env.sh

在最后添加这几行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#Java的安装路径
export JAVA_HOME=/usr/java/jdk1.8.0_141
#scala安装路径
export SCALA_HOME=/usr/scala/scala-2.10.5
#master的IP地址或者配置过的主机映射名
export SPARK_MASTER_IP=master
#端口号
export SPARK_MASTER_PORT=7077
#核心线程
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
#设置处理内存
export SPARK_WORKER_MEMORY=1g
#Hadoop的路径
export HADOOP_CONF_DIR=/usr/hadoop/hadoop-2.7.3/etc/hadoop

保存退出

配置slaves文件

依然拷贝出来一个slaves配置文件

1
2
3
4
[root@master conf]# ls
docker.properties.template log4j.properties.template slaves.template spark-env.sh
fairscheduler.xml.template metrics.properties.template spark-defaults.conf.template spark-env.sh.template
[root@master conf]# cp slaves.template slaves

修改

1
[root@master conf]# vim slaves

配置成如下
在这里插入图片描述

修改启动文件

为了避免和hadoop中的start/stop-all.sh脚本发生冲突,将spark/sbin/的start/stop-all.sh重命名

1
2
3
[root@master conf]# cd /usr/spark/spark-2.1.1-bin-hadoop2.7/sbin/
[root@master sbin]# mv start-all.sh start-spark-all.sh
[root@master sbin]# mv stop-all.sh stop-spark-all.sh

发送
将配置好的scala和spark发送给其他主机

1
2
3
4
5
6
7
8
9
#发送scala
[root@master usr]# scp -r /usr/scala root@slave1:/usr/
[root@master usr]# scp -r /usr/scala root@slave2:/usr/
#发送spark
[root@master usr]# scp -r /usr/spark root@slave1:/usr/
[root@master usr]# scp -r /usr/spark root@slave2:/usr/
#发送环境变量配置
[root@master usr]# scp -r /etc/profile root@slave1:/etc
[root@master usr]# scp -r /etc/profile root@slave2:/etc

分别在slave1和slave2上刷新环境变量

1
2
[root@slave1 ~]# source /etc/profile
[root@slave2 ~]# source /etc/profile

再安装上面验证scala是否成功安装

启动

①启动Zookeeper集群
分别在三台主机上启动

1
zkServer.sh start

启动之后查看状态

1
zkServer.sh status

如果是leader或者follower便启动成功

②启动hadoop集群
在master主节点上启动hadoop集群

1
start-all.sh

查看jps
master

1
2
3
4
5
6
7
8
[root@master usr]# jps
2936 DataNode
3656 Jps
2682 QuorumPeerMain
3131 JournalNode
3275 DFSZKFailoverController
2829 NameNode
3518 NodeManager

slave1

1
2
3
4
5
6
7
8
[root@slave1 ~]# jps
2338 DataNode
2626 NodeManager
2515 DFSZKFailoverController
2771 Jps
2436 JournalNode
2268 NameNode
2207 QuorumPeerMain

slave2

1
2
3
4
5
6
7
[root@slave2 ~]# jps
2752 Jps
2641 ResourceManager
2502 NodeManager
2234 QuorumPeerMain
2412 JournalNode
2317 DataNode

如果少启动尝试各自启动其功能,例如ResourceManager没启动可以在slave2上使用start-yarn.sh启动,或者重新启动所有服务

③启动spark集群
在职责为master的主机上启动

start-spark-all.sh

如果启动出错请仔细查看异常,检查配置文件是否配置出错

测试

我们将之前的在tmp上创建的a.log上传到hdfs上

1
2
3
4
5
[root@master usr]# hadoop fs -put /tmp/a.log /
[root@master usr]# hadoop fs -ls /
Found 2 items
-rw-r--r-- 3 root supergroup 45 2018-12-10 21:31 /a.log
drwx-wx-wx - root supergroup 0 2018-10-23 22:24 /tmp

然后在master上启动spark-shell

1
[root@master usr]# spark-shell

如果启动出错请仔细查看异常,检查配置文件是否配置出错

然后输入scala命令

1
2
3
4
5
6
7
8
#这里的master:9000是hadoop中active的namenode节点
#如果有疑问可以去查看hadoop的高可用集群搭建
scala> sc.textFile("hdfs://master:9000/a.log").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).collect.foreach(println)
(spark,1)
(girl,1)
(hello,4)
(boy,1)
(world,1)

如果得出以上结果便正面spark集群正常
你可以访问master的IP地址:8080查看spark
在这里插入图片描述

4.基于Zookeeper的Spark高可用集群

spark高可用是基于普通集群版的基础上搭建的

①修改spark-env. sh

注释掉spark-env.sh中的两行

1
2
[root@master spark]# cd /usr/spark/spark-2.1.1-bin-hadoop2.7/conf/
[root@master spark]# vim spark-env.sh

1
2
#export SPARK_MASTER_IP=master
#export SPARK_MASTER_PORT=7077

注释掉
在最后添加一行

1
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181 -Dspark.deploy.zookeeper.dir=/spark"

解释
spark.deploy.recoveryMode设置成 ZOOKEEPER
spark.deploy.zookeeper.url ZooKeeper URL
spark.deploy.zookeeper.dir ZooKeeper 保存恢复状态的目录,缺省为 /spark

②重启集群
首先确保Zookeeper和hadoop集群的启动,防火墙的关闭

在任何一台spark节点上启动start-spark-all. sh

手动在集群中其他从节点上再启动master进程:在slave1上启动sbin/start-master.sh

③测试
通过浏览器方法 master:8080 /slave1:8080–>Status: STANDBY Status: ALIVE
验证HA高可用,只需要手动停掉master上spark进程Master,等一会slave1上的进程Master状态会从STANDBY变成ALIVE