默认情况下,standalone cluster manager对于worker节点的失败是具有容错性的(迄今为止,Spark自身而言对于丢失部分计算工作是有容错性的,它会将丢失的计算工作迁移到其他worker节点上执行)。然而,调度器是依托于master进程来做出调度决策的,这就会造成单点故障:如果master挂掉了,就没法提交新的应用程序了。为了解决这个问题,spark提供了两种高可用性方案,分别是基于zookeeper的HA方案以及基于文件系统的HA方案。
基于zookeeper的HA方案

概述

使用zookeeper来提供leader选举以及一些状态存储,你可以在集群中启动多个master进程,让它们连接到zookeeper实例。其中一个master进程会被选举为leader,其他的master会被指定为standby模式。如果当前的leader master进程挂掉了,其他的standby master会被选举,从而恢复旧master的状态。并且恢复作业调度。整个恢复过程(从leader master挂掉开始计算)大概会花费1~2分钟。要注意的是,这只会推迟调度新的应用程序,master挂掉之前就运行的应用程序是不被影响的。

配置

如果要启用这个恢复模式,需要在spark-env.sh文件中,设置SPARK_DAEMON_JAVA_OPTS选项:
spark.deploy.recoveryMode 设置为ZOOKEEPER来启用standby master恢复模式(默认为NONE)spark.deploy.zookeeper.url zookeeper集群url(举例来说,192.168.0.103:2181,192.168.0.104:2181)spark.deploy.zookeeper.dir zookeeper中用来存储恢复状态的目录(默认是/spark)
备注:如果在集群中启动了多个master节点,但是没有正确配置master去使用zookeeper,master在挂掉进行恢复时是会失败的,
因为没法发现其他master,并且都会认为自己是leader。这会导致集群的状态不是健康的,因为所有master都会自顾自地去调度。

细节

在启动一个zookeeper集群之后,启用高可用性是很直接的。简单地在多个节点上启动多个master进程,并且给它们相同的zookeeper
配置(zookeeper url和目录)。master就可以被动态加入master集群,并可以在任何时间被移除掉。

为了调度新的应用程序或者向集群中添加worker节点,它们需要知道当前leader master的ip地址。这可以通过传递一个master列表来完成。举例来说,我们可以将我们的SparkContext连接的地址指向spark://host1:port1,host2:port2。这就会导致你的
SparkContext尝试去注册所有的master,如果host1挂掉了,那么配置还是正确的,因为会找到新的leader master,也就是host2。

对于注册一个master和普通的操作,这是一个重要的区别。当一个应用程序启动的时候,或者worker需要被找到并且注册到当前的leader master的时候。一旦它成功注册了,就被保存在zookeeper中了。如果故障发生了,new leader master会去联系所有的之前注册过的应用程序和worker,并且通知它们master的改变。这样的话,它们甚至在启动的时候都不需要知道new master的存在。

正是由于这个属性,new master可以在任何时间被创建,并且我们唯一需要担心的一件事情就是新的应用程序和worker可以找到并且注册到master。一旦注册上去之后,我们就不用担心它了。

实验

1、将192.168.2.15机器上的spark集群先停止
./sbin/stop-all.sh
2、修改机器上的spark-env.sh文件,在其中加入上述三个属性
export SPARK_DAEMON_JAVA_OPTS=”-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=192.168.2.15:2181,192.168.2.16:2181 -Dspark.deploy.zookeeper.dir=/spark”
3、启动集群
在192.168.2.15上直接用启动集群:./sbin/start-all.sh

4、在192.168.2.16上部署spark安装包,并启动一个master进程

安装scala 2.11.4

1、将课程提供的scala-2.11.4.tgz使用WinSCP拷贝到/usr/local/src目录下。
2、对scala-2.11.4.tgz进行解压缩:tar -zxvf scala-2.11.4.tgz
3、对scala目录进行重命名:mv scala-2.11.4 scala
4、配置scala相关的环境变量
vi ~/.bashrc
export SCALA_HOME=/usr/local/scala
export PATH=$SCALA_HOME/bin
source ~/.bashrc
5、查看scala是否安装成功:scala -version

安装spark客户端

1、将spark-1.5.1-bin-hadoop2.4.tgz使用WinSCP上传到/usr/local/src目录下。
2、解压缩spark包:tar -zxvf spark-1.5.1-bin-hadoop2.4.tgz。
3、重命名spark目录:mv spark-1.5.1-bin-hadoop2.4 spark
4、修改spark环境变量
vi ~/.bashrc
export SPARK_HOME=/usr/local/spark
export PATH=SPARKHOME/binexportCLASSPATH=.:SPARKHOME/binexportCLASSPATH=.:SPARK_HOME/bin export CLASSPATH=.:CLASSPATH:JAVAHOME/lib:JAVAHOME/lib:JAVA_HOME/lib:JAVA_HOME/jre/lib
source ~/.bashrc

修改spark-env.sh文件

1、cd /usr/local/spark/conf
2、cp spark-env.sh.template spark-env.sh
3、vi spark-env.sh
export JAVA_HOME=/usr/java/latest
export SCALA_HOME=/usr/local/scala
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_MASTER_IP=192.168.2.16
export SPARK_DAEMON_MEMORY=100m
export SPARK_DAEMON_JAVA_OPTS=”-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=192.168.2.15:2181,192.168.2.16:2181 -Dspark.deploy.zookeeper.dir=/spark”

在192.168.2.16上单独启动一个standby master进程:./sbin/start-master.sh

4、提交应用程序
将master地址修改为192.168.2.15:7077,192.168.2.16:7078

5、杀掉原先的leader master,等到standby master接管集群
再次提交应用程序

6、再次手动启动原来的leader master(死掉)

问题

1、集群中包含两个节点,在192.168.2.15上配置了master和worker,
在192.168.2.16上配置了worker
但是在15集群上 ./sbin/start-all.sh
在16 集群上不启动 worker!! 原因在 在conf中的slaves.template 没有重命名,重命名为slaves 即可
slaves中:
A Spark Worker will be started on each of the machines listed below.
Spark1
Spark2
2、在15 上直接启动 ./sbin/start-all.sh
在16 上 ./sbin/start-master.sh
3、此时在文本上查看 192.168.2.15:8088
192.168.2.16:8088
查看,一个为standby 一个为alive !
将aliver 的jps kill-9 杀死掉
大概一分钟,之后 standby将变为aliver状态,此时基于zookeeper的主备机切换完成!

~

基于ZooKeeper实现HA高可用性以及自动主备切换相关推荐

  1. 京东一面:MySQL 主备延迟有哪些坑?主备切换策略

    大家好,我是Tom哥 作为一名开发同学,大家对 MySQL 一定不陌生,像常见的 事务特性.隔离级别 .索引等也都是老生常谈. 今天,我们就来聊个深度话题,关于 MySQL 的 高可用 一.什么是高可 ...

  2. Spark集群基于Zookeeper的HA搭建部署笔记(转)

    原文链接:Spark集群基于Zookeeper的HA搭建部署笔记 1.环境介绍 (1)操作系统RHEL6.2-64 (2)两个节点:spark1(192.168.232.147),spark2(192 ...

  3. pgpool mysql_PGPool-II+PG流复制实现HA主备切换

    基于PG的流复制能实现热备切换,但是是要手动建立触发文件实现,对于一些HA场景来说,需要当主机down了后,备机自动切换,经查询资料知道pgpool-II可以实现这种功能.本文基于PG流复制基础上 , ...

  4. PGPool-II+PG流复制实现HA主备切换

    基于PG的流复制能实现热备切换,但是是要手动建立触发文件实现,对于一些HA场景来说,需要当主机down了后,备机自动切换,经查询资料知道pgpool-II可以实现这种功能.本文基于PG流复制基础上 , ...

  5. 《MySQL——基于位点orGTID的主备切换协议》

    一主多从的设置,用于读写分离,主库负责所有的写入和一部分读,其他读请求则由从库分担. 一主多从架构下,主库故障后的主备切换问题.相比于一主一备,多了从库指向新主库的过程. 基于位点的主备切换同步 把节 ...

  6. mysql主备切换 自动_核电生产管理信息系统EAM完成首次备用环境切换演练

    安全是核电事业稳步发展的基石,中国核电始终将安全放在第一位,在系统设计及日常管理中,注重安全备用及安全冗余的考虑.核电生产管理信息系统作为核电现场业务的主要承载工具,在核电日常生产运行中发挥着越来越重 ...

  7. Namenode主备切换或报 IPC Server handler 23 on 8020

    转自:http://blog.csdn.net/u014033218/article/details/75570313 可能是以下原因,未测试: NameNode 高可用整体架构概述 在 Hadoop ...

  8. MySQL 集群(三):MySQL + Mycat 实现读写分离,主备切换集群

    MySQL 集群(三):MySQL + Mycat 实现读写分离,主从切换集群 下载 Mycat Mycat 主要文件 端口 Mycat 命令 配置文件 server.xml schema.xml 配 ...

  9. redis主从读写分离replication复制数据+sentienl哨兵集群主备切换

    说明:最近公司在自己搭建了一套redis主从读写分离+sentinel哨兵集群主备切换,通过手工去搭建replication复制+主从架构+读写分离+哨兵集群+高可用redis集群架构 公司的已经搭建 ...

最新文章

  1. suse linux通过iso文件安装gcc
  2. Python快速教程博客园地址
  3. CSS 从入门到放弃系列:CSS的引入方式
  4. 【中级软考】什么是实时操作系统?(RTOS:Real Time Operating System)
  5. java assetmanager_AssetManager asset的使用
  6. python处理数据0和负数跳过_Python第十一章-常用的核心模块03-json模块
  7. mysql查找最大值最小值_查找两个8位数字的最大值| 8086微处理器
  8. 使用postman测试接口
  9. Android中如何查看内存(上)
  10. ECharts 学习笔记
  11. window.open怎么设置title_企业seo怎么优化 都有那些策略?
  12. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——A题 切蛋糕
  13. 解决uni-app开发中iphoneX下背景不能全屏铺满的问题
  14. 深入浅出事件流处理NEsper(三)
  15. iphone中各种文件路径
  16. 人工智能时代都需要哪些数学知识?这些经典教材给你划重点
  17. @Resource报错
  18. 三菱485BD板学习和认识
  19. 用JScript编写命令行程序
  20. java大鱼吃小鱼_大鱼吃小鱼Java课程设计

热门文章

  1. pip 安装 imagecodecs 失败
  2. Dubbo——增强SPI的实现
  3. Codeforces Round #712 (Div. 2) E. Travelling Salesman Problem 思维转换
  4. P1527 [国家集训队]矩阵乘法 整体二分 + 二维树状数组
  5. Codeforces Round #691 (Div. 1)
  6. Hills And Valleys CodeForces - 1467B
  7. 牛客题霸 [两个链表生成相加链表] C++题解/答案
  8. 【学习笔记】Miller-Rabin(米勒-拉宾)素性测试,附常用表
  9. 震惊!递推与递归竟然可以这么编!%99的程序员都不知道!
  10. 【树链剖分】【倍增】宝石(2021GDOI Day2 T1)