Spark2.1.0HA集群部署

今天带来的是Spark HA集群的搭建
在搭建之前,先简单介绍一下Spark
Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发的通用内存并行计算框架。
Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处,Spark以其先进的设计理念,迅速成为社区的热门项目,围绕着Spark推出了Spark SQL、Spark Streaming、MLLib和GraphX等组件,也就是BDAS(伯克利数据分析栈),这些组件逐渐形成大数据处理一站式解决平台。
Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集。Spark官网上介绍,它具有运行速度快、易用性好、通用性强和随处运行等特点。
了解Spark之后,VV来说一下HA集群的事情,为什么要搭建HA的集群呢?
Spark Standalone集群是Master-Slaves架构的集群模式,由一台master来调度资源,和大部分的Master-Slaves结构集群类似,都存在着Master单点故障的问题。
一个普通的集群,平时用起来没有问题,觉得有没有HA无所谓,不怕一万,就怕万一,有一天突然挂掉了,造成了损失,才知道HA的重要性。
目前Spark提供了两种方式来解决此问题,基于文件系统的单点恢复和基于Zookeeper的HA方式,ActiveMaster挂掉之后,Standby Master会立即切换过去继续对外提供服务。
Zookeeper的HA方式在生产环境中是最佳的选择。
大致的介绍一下Zookeeper的HA机制:
ZooKeeper提供了一个选举机制,利用这个机制,可在集群中开启多个master并注册到ZooKeeper实例,ZooKeeper会管理这些Master,使其中只有一个是Active的,其他的都是Standby,Active的master提供服务,standby状态的则不可以。
ZooKeeper保存了集群的状态信息,该信息包括所有的Worker,Driver 和Application。当Active的Master出现故障时,ZooKeeper会从其他standby的master中选举出一台切换其状态为Active,它会恢复挂掉了的master的状态信息,之后该Active Master就可以正常提供调度服务。
准备工作
1.Hadoop HA集群
2.Zookeeper集群
3.Spark软件包:spark-2.1.0-bin-hadoop2.7.tgz
4.Scala软件包:scala-2.11.8.tgz

还没有安装Hadoop、Zookeeper的同学,请查看:Hadoop高可用(HA)集群部署


为了节省大家时间!VV整理好了本篇文章所用的软件包和工具!

扫描下方二维码,关注公众号,输入“ hadoop ”即可获取软件包哦~


想要更多大数据学习资料吗?赶快关注吧
回复“ 资料 ”可获取大数据学习资料,分享到朋友圈更是有额外的课件、资料赠送哦!

集群规划
主机名
IP地址
安装的软件
运行的进程
louisvv01 (主节点)
192.168.1.210
JDK、Hadoop、Zookeeper、Spark
NameNode、ResourceManager、QuorumPeerMain、
DataNode、DFSZKFailoverController、NodeManager、JournalNode、Master(Active)、Worker
louisvv02
192.168.1.211
JDK、Hadoop、Zookeeper、Spark
NameNode(StandBy)、QuorumPeerMain、DataNode、DFSZKFailoverController、NodeManager、JournalNode、Master(StandBy)、Worker
louisvv03
192.168.1.212
JDK、Hadoop、Zookeeper、Spark
QuorumPeerMain、DataNode、NodeManager、JournalNode、Worker
开始部署
1.上传软件
使用winscp将
spark-2.1.0-bin-hadoop2.7.tgz
scala-2.11.8.tgz
上传到louisvv01节点 的 /opt目录下
2.安装scala
解压scala-2.11.8.tgz
[root@louisvv01 opt]# tar -zxf scala-2.11.8.tgz
配置环境变量,并测试
[root@louisvv01 opt]# vim /etc/profile
#scala env
export SCALA_HOME=/opt/scala-2.11.8
export PATH=:$PATH:$SCALA_HOME/bin:
[root@louisvv01 opt]# source /etc/profile
[root@louisvv01 opt]# scala -version
Scala code runner version 2.11.8 — Copyright 2002-2016, LAMP/EPFL
将Scala远程拷贝到其他两台机器上,配置环境变量
[root@louisvv01 opt]# scp -r /opt/scala-2.11.8 louisvv02:/opt/
[root@louisvv01 opt]# scp -r /opt/scala-2.11.8 louisvv03:/opt/
3.安装spark
[root@louisvv01 opt]# tar -zxf spark-2.1.0-bin-hadoop2.7.tgz
[root@louisvv01 opt]# mv spark-2.1.0-bin-hadoop2.7 spark-2.1.0
配置环境变量
[root@louisvv01 opt]# vim /etc/profile
#spark env
export SPARK_HOME=/opt/spark-2.1.0
export PATH=:$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin:
[root@louisvv01 opt]# source /etc/profile
进入文件夹,拷贝配置文件spark-env.sh、slaves
[root@louisvv01 conf]# cd /opt/spark-2.1.0/conf/
[root@louisvv01 conf]# cp spark-env.sh.template spark-env.sh
[root@louisvv01 conf]# cp slaves.template slaves
修改配置文件spark-env.sh,添加如下内容
[root@louisvv01 conf]# vim spark-env.sh
export JAVA_HOME=/opt/jdk1.8.0_91
export SCALA_HOME=/opt/scala-2.11.8
export SPARK_HOME=/opt/spark-2.1.0
export HADOOP_CONF_DIR=/opt/hadoop-2.7.3/etc/hadoop
export SPARK_LIBRARY_PATH=$SPARK_HOME/lib
export SPARK_MASTER_IP=louisvv01
export SPARK_DAEMON_JAVA_OPTS=”-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=louisvv01:2181,louisvv02:2181,louisvv03:2181
-Dspark.deploy.zookeeper.dir=/spark”
修改配置文件slaves,添加如下内容
[root@louisvv01 conf]# vim slaves
louisvv01
louisvv02
louisvv03
将配置好的Spark远程拷贝到其他两台机器上,并配置环境变量
[root@louisvv01 opt]# scp -r /opt/spark-2.1.0 louisvv02:/opt/
[root@louisvv01 opt]# scp -r /opt/spark-2.1.0 louisvv03:/opt/
切换到louisvv02节点,修改spark-env.sh文件
[root@louisvv02 opt]# cd /opt/spark-2.1.0/conf/
[root@louisvv02 conf]# vim spark-env.sh
修改为如下内容:
export SPARK_MASTER_IP=louisvv02
4.启动集群并测试(顺序不能错)
1.开启Zookeeper集群 => 开启Hadoop集群 => 开启Spark集群
2.启动spark
在louisvv01节点上执行start-master.sh、start-slaves.sh命令
[root@louisvv01 opt]# start-master.sh
starting org.apache.spark.deploy.master.Master, logging to /opt/spark-2.1.0/logs/spark-root-org.apache.spark.deploy.master.Master-1-louisvv01.out
[root@louisvv01 opt]# start-slaves.sh
louisvv03: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark-2.1.0/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-louisvv03.out
louisvv02: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark-2.1.0/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-louisvv02.out
louisvv01: starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark-2.1.0/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-louisvv01.out
切换到louisvv02节点上执行
[root@louisvv02 opt]# start-master.sh
starting org.apache.spark.deploy.master.Master, logging to /opt/spark-2.1.0/logs/spark-root-org.apache.spark.deploy.master.Master-1-louisvv02.out
在各个节点上查看进程运行状况
louisvv01:
[root@louisvv01 opt]# jps
2656 DataNode
2421 QuorumPeerMain
4277 ResourceManager
4181 Worker
4376 NodeManager
4089 Master
3003 DFSZKFailoverController
2843 JournalNode
4412 Jps
2557 NameNode
louisvv02:
[root@louisvv02 opt]# jps
2368 DataNode
3489 Jps
2308 NameNode
2455 JournalNode
3274 Worker
2253 QuorumPeerMain
3454 NodeManager
2558 DFSZKFailoverController
3343 Master
louisvv03:
[root@louisvv03 conf]# jps
2642 NodeManager
2675 Jps
2564 Worker
2251 DataNode
2189 QuorumPeerMain
2317 JournalNode
在web页面上查看spark集群状态:
在浏览器输入:http://192.168.1.210:8080/

可以在页面上看到louisvv01的master状态为Alive,以及worker等状态信息


接着我们要看一下备用节点louisvv02的Master的运行状况
在浏览器中输入:http://192.168.1.211:8080/

可以在页面上看到louivv02的Master状态为StandBy


下面,让我们测试一下HA好不好用吧
在louisvv01上执行命令,然后使用jps命令查看进程,发现Master进程被杀掉了
[root@louisvv01 opt]# stop-master.sh
stopping org.apache.spark.deploy.master.Master
[root@louisvv01 opt]# jps
2656 DataNode
2421 QuorumPeerMain
4277 ResourceManager
4181 Worker
4376 NodeManager
4744 Jps
3003 DFSZKFailoverController
2843 JournalNode
2557 NameNode
回到louisvv02的web页面上,刷新页面,查看Master状况
在下图中,我们发现,louisvv02上的Master状态已经切换为Alive了,HA切换成功!
重启在louisvv01的Master
对spark集群进行测试
在HDFS上有一个文件,文件内容如下:
[root@louisvv01 ~]# hadoop fs -cat /1.txt
hello world
hello louisvv
hello you
hello me
进入Spark-shell,我们来写一个简单的workcount程序
[root@louisvv01 opt]# spark-shell
Setting default log level to “WARN”.
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://192.168.1.210:4040
Spark context available as ‘sc’ (master = local[*], app id = local-1513222696236).
Spark session available as ‘spark’.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ ‘_/
/___/ .__/\_,_/_/ /_/\_\ version 2.1.0
/_/
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_91)
Type in expressions to have them evaluated.
Type :help for more information.
scala> sc.textFile(“hdfs://192.168.1.210:9000/1.txt”).flatMap(line => line.split(” “)).map(word => (word,1)).reduceByKey(_ + _).collect.foreach(println)
(you,1)
(louisvv,1)
(hello,4)
(me,1)
(world,1)

赫墨拉

我是一个喜爱大数据的小菜鸡,这里是我分享我的成长和经历的博客

发表评论

电子邮件地址不会被公开。