基于zookeeper搭建sparkHA

企业中一般都使用zookeeper的高可用搭建Spark。其原理就是通过zookeeper来选举一个Master,其它的Master都处于Standby状态。

  1. 首先将conf/spark-env.sh中master的地址注释掉


  2. 然后引用zookeeper相关的配置,添加一个属性SPARK_DAEMON_JAVA_OPTS

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER  -Dspark.deploy.zookeeper.url=node-1:2181,node-2:2181,node-3:2181  -Dspark.deploy.zookeeper.dir=/spark"

在zookeeper中的spark目录中保存元数据信息。

基于zookeeper搭建sparkHA_第1张图片

这里将之前手动指定的master注释掉,master由zookeeper指定选出。
然后引入zookeeper:
这里的3个参数,分别指定:恢复模式为zookeeper;zookeeper的server地址和端口号(这里的2181);元信息的保存目录,在zookeeper下的spark目录下。

参数说明
spark.deploy.recoveryMode:恢复模式(Master重新启动的模式)
有三种:(1)ZooKeeper (2) FileSystem (3)NONE
FileSystem在测试阶段用,生产中用Zookeeper,因为基于文件系统的需要我们手动启动挂掉的Master,NONE表示不恢复;
spark.deploy.zookeeper.url:ZooKeeper的Server地址,以及端口号;
spark.deploy.zookeeper.dir:指定对应保存在zookeeper上的节点目录。即集群元数据信息的文件、目录,包括Worker,Driver和Application的信息。

通过上边这3个参数,构建高可用的Spark。

配置结束以后,发放到node-2和node-3:


致此,高可用的Spark集群搭建好了。

企业当中一般启动两个Master。


配置zookeeper

为了方便快速启动zookeeper,首先添加zookeeper的环境变量:
/etc/profile中添加


保存之后,将 profile文件发送的node-2和node-3上:

刷新一下各机器的 /etc/profile

测试一下环境变量配置成功:

前边配置了zookeeper的环境变量,下边编写批量启动和停止zookeeper的脚本文件

在export目录下创建script目录,用于存放脚本文件


创建一个脚本 start_zk.sh批量启动所有机器上的zookeeper:

#!/bin/sh
for host in node-1 node-2 node-3
do
  ssh $host "source /etc/profile;zkServer.sh start"
  echo "$host zk is running"
done


同时为了方便,再创建一个 stop_zk.sh批量关闭zookeeper:

#!/bin/sh
for host in node-1 node-2 node-3
do
  ssh $host "source /etc/profile;zkServer.sh stop"
  echo "$host zk is stopping"
done

查看所有节点上的zookeeper状态信息status_zk.sh

#!/bin/sh
for host in node-1 node-2 node-3
do
  ssh $host "source /etc/profile;zkServer.sh status"
  echo "$host zk's status"
done

编写完成之后测试一下脚本:


基于zookeeper搭建sparkHA_第2张图片
批量启动

基于zookeeper搭建sparkHA_第3张图片
批量查看状态
基于zookeeper搭建sparkHA_第4张图片
批量关闭

使用jps可以查看zookeeper进程是否启动,使用zkServer.sh status查看启动状态。

进入zookeeper客户端


可以看到现在只有zookeeper节点,目前还没有spark节点。

接下来启动Spark集群

启动Spark HA 之前先要启动zookeeper集群。

先在哪台机器上运行启动命令,就会先在哪台机器上构建Master。

基于zookeeper搭建sparkHA_第5张图片

基于zookeeper搭建sparkHA_第6张图片


现在就有了spark节点。里边存放了选举的信息,当前哪个master是活着的master。
基于zookeeper搭建sparkHA_第7张图片

在node-2上运行 start-master.sh命令,使用jps命令查看,发现也启动了Master进程。
基于zookeeper搭建sparkHA_第8张图片

这里可以看到node-2是一个standby的状态。内核和cpu的资源都是0。
先启动的node-1,所以node-1是alive,然后再启动的node-2,node-2就是standby的状态。

这个时候做一个测试,到node-1上杀死Master进程:
使用kill -9 进程号 命令杀死进程

基于zookeeper搭建sparkHA_第9张图片

基于zookeeper搭建sparkHA_第10张图片

恢复不是一瞬间的,先感知到Master挂掉,再对其它所有处于standby状态的master进行选举,再来选举出一个活着的master,然后就开始恢复到之前的master的状态。需要一到两分钟。


基于zookeeper搭建sparkHA_第11张图片

CPU核数和内存是所有节点之和。

再次启动node-1上的master,node-1变为了standby的状态,而node-2为alive状态。


基于zookeeper搭建sparkHA_第12张图片

你可能感兴趣的:(基于zookeeper搭建sparkHA)