Spark 2.x管理与开发-Spark HA的实现(二)基于Zookeeper的Standby Masters

前言:

基于Zookeeper与Hadoop类似

(1)复习Zookeeper:

Zookeeper相当于一个数据库(相当稳定的),可将集群的信息都放入Zookeeper当中。

另外,Zookeeper还提供了一些功能:数据同步、选举、分布式锁

  • 数据同步:在一个节点上写数据可以快速地同步到其他节点上。
  • 选举:Leader、Follower 如果Leader挂掉了,Zookeeper就会在Follower里再选举出一个Leader。
  • 分布式锁:就是锁的分布式的形态。

ZooKeeper提供了一个Leader Election机制,利用这个机制可以保证虽然集群存在多个Master,但是只有一个是Active的,其他的都是Standby。

当Active的Master出现故障时,另外的一个Standby Master会被选举出来。

由于集群的信息,包括Worker, Driver和Application的信息都已经持久化到ZooKeeper,因此在切换的过程中只会影响新Job的提交,对于正在进行的Job没有任何的影响。加入ZooKeeper的集群整体架构如下图所示。

               

 

(2)大致操作概述

 


配置参数

参考值

spark.deploy.recoveryMode

设置为ZOOKEEPER开启单点恢复功能,默认值:NONE

spark.deploy.zookeeper.url

ZooKeeper集群的地址

spark.deploy.zookeeper.dir

Spark信息在ZK中的保存目录,默认:/spark

参考:

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata111:2181,bigdata112:2181,bigdata113:2181 -Dspark.deploy.zookeeper.dir=/spark"

另外:每个节点上,需要将以下两行注释掉。

ZooKeeper中保存的信息:

 

 启动:

在主节点上启动 start-all

在另外从节点上 start-master.sh

 

************************自己操作*****************************

这里操作的是完全分布式

1.配置要保证时间的同步

(1)查看时间:date

 

像我这里的就是同步的

(2)如果不同步需要同步时间:

  1. 简单的:可以用date -s 2020-7-5来同步时间,但是这个命令的效果是三台主机时间都是2020-7的零时。
  2. 准确地按照自己主机的调整时间:参考 https://www.cnblogs.com/liuxinrong/articles/12818431.html

2.修改关于从节点的配置文件-slaves

[root@bigdata111 conf]# vi slaves

 

3.修改关于主节点的配置文件:spark-env.sh

[root@bigdata111 conf]# vi spark-env.sh

由Zookeeper管理去管理Master,所以Master的相关信息要注释上。

再加上一行:

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata111:2181,bigdata112:2181,bigdata113:2181 -Dspark.deploy.zookeeper.dir=/spark"

 

 

-Dspark.deploy.zookeeper.dir=/spark的意思是:

我们可以先进入Zookeeper的客户端进行查看:

[root@bigdata113 zookeeper-3.4.10]# zkCli.sh

 

4.然后将spark-env.sh发送到另外两个节点上

[root@bigdata111 conf]# scp spark-env.sh root@bigdata112:/usr/local/spark-2.1.0-bin-hadoop2.7/conf/

之前有的会被自动覆盖掉

[root@bigdata111 conf]# scp spark-env.sh root@bigdata113:/usr/local/spark-2.1.0-bin-hadoop2.7/conf/

5.启动Zookeeper、查看Zookeeper状态

由于之前配置了Zookeeper环境变量,所以可以在任意路径下直接启动

 

6.启动Spark

[root@bigdata111 zookeeper-3.4.10]# cd /usr/local/spark-2.1.0-bin-hadoop2.7/sbin/

[root@bigdata111 sbin]# ./start-all.sh

 

7.查看Spark可视化界面

 

 

 8.手动启动一个Spark的Master-在bigdata112上

[root@bigdata112 zookeeper-3.4.10]# cd /usr/local/spark-2.1.0-bin-hadoop2.7/sbin/

[root@bigdata112 sbin]# ./start-master.sh

jps查看,发现bigdata112上多了一个Master进程

 

9.接着打开bigdata112上的Spark的可视化页面

 

10.现在停掉bigdata111上的Master进程

 

11.再刷新查看bigdata112上的Spark可视化页面

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3