首先安装Zookeeper集群,并启动Zookeeper集群,同时开启hdfs集群
停止spark所有服务,修改配置文件spark-env.sh,在该配置文件中删掉SPARK_MASTER_IP并添加如下配置:
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=master,slave1,slave2
-Dspark.deploy.zookeeper.dir=/spark"
添加完成以后,同时注释掉如下内容:
#SPARK_MASTER_HOST=master
#SPARK_MASTER_PORT=7077
1 在master节点上修改slaves配置文件内容指定worker节点(这一步在安装spark集群时已经做过了,所以可省略)
2 将配置文件同步到所有节点:
scp spark-env.sh slave1:/home/groot/soft/spark/conf
scp spark-env.sh slave2:/home/groot/soft/spark/conf
分发完成以后,关闭Standalone模式:
stop-all.sh
然后重开集群,这个时候就是高可用了(需注意:在开启spark集群之前需先开启zookeeper集群和hdfs集群):
3 在master上执行start-all.sh
脚本,启动集群并启动第一个master节点,然后在slave1上执行start-all.sh
启动第二个master节点(也可以单独启动master,执行:start-master.sh
):
启动master上的第一个master节点:
启动slave1上的第二个master节点:
4 验证
启动完成以后,去Web界面查看Master状态:
master:
slave1:
由此可以看到,先开的master节点的master状态为ALIVE(活跃的),而后开的slave1的master则是STANDBY(副本)
这个时候,我们手动干掉master上面的Master进程,观察是否会自动进行切换:
干掉以后,再去Web界面查看Master的状态:
由于master的Master进程被干掉,所以无法访问,接下来查看slave1的Web界面
可以看到,这个时候的slave1上的Master的状态成为了ALIVE,这就说明实现了高可用。