基于zookeeper搭建sparkHA

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

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

    《基于zookeeper搭建sparkHA》

  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》

这里将之前手动指定的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:

《基于zookeeper搭建sparkHA》

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

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

配置zookeeper

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

《基于zookeeper搭建sparkHA》

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

《基于zookeeper搭建sparkHA》

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

《基于zookeeper搭建sparkHA》

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

《基于zookeeper搭建sparkHA》

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

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

《基于zookeeper搭建sparkHA》

创建一个脚本
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

《基于zookeeper搭建sparkHA》

同时为了方便,再创建一个
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》 批量启动

《基于zookeeper搭建sparkHA》 批量查看状态
《基于zookeeper搭建sparkHA》 批量关闭

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

《基于zookeeper搭建sparkHA》 进入zookeeper客户端

《基于zookeeper搭建sparkHA》

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

接下来启动Spark集群

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

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

《基于zookeeper搭建sparkHA》

《基于zookeeper搭建sparkHA》

《基于zookeeper搭建sparkHA》

现在就有了spark节点。里边存放了选举的信息,当前哪个master是活着的master。

《基于zookeeper搭建sparkHA》

在node-2上运行
start-master.sh命令,使用jps命令查看,发现也启动了Master进程。

《基于zookeeper搭建sparkHA》

这里可以看到node-2是一个standby的状态。内核和cpu的资源都是0。

先启动的node-1,所以node-1是alive,然后再启动的node-2,node-2就是standby的状态。

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

《基于zookeeper搭建sparkHA》

《基于zookeeper搭建sparkHA》

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

《基于zookeeper搭建sparkHA》

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

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

《基于zookeeper搭建sparkHA》

    原文作者:扣篮的左手
    原文地址: https://www.jianshu.com/p/3d17a074dcb2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞