基于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目录中保存元数据信息。


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

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


批量启动

批量查看状态
批量关闭

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

进入zookeeper客户端


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

接下来启动Spark集群

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

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




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

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

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

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

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



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

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 入门指南 1. 简介 Quickstart会让你启动和运行一个单节点单机HBase。 2. 快速启动 – 单点HB...
    和心数据阅读 4,977评论 1 41
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,314评论 19 139
  • 在大学里,平均每个学期有19周,其中你的成绩,是由考试前的最后2周决定的,而你与别人的差距,则是由另外的17周决定...
    浮生梦苏阅读 255评论 0 0
  • “曾经拥有的,不要忘记;已经得到的,更要珍惜;属于自己的,不要放弃;已经失去的,留着回忆;想要得到的,必须努力;但...
    猎鹰8866阅读 199评论 0 0
  • 这篇文章的想法,受启发于1月17号彭萦在公众号“改变自己”中写的引语: “今年不想读书。变胖十斤。不剁手,继续买买...
    YiWei_阅读 567评论 2 1

友情链接更多精彩内容