高可用的Spark集群搭建

1,集群介绍

在之前Spark集群搭建博客中介绍了Spark的四种运行模式以及搭建。

  • local
  • standalone
  • yarn
  • mesos

目前接触的只有前三种,由于yarn集群本身就是高可用的,所以下面就只对standalone集群进行高可用搭建。

2,普通Spark集群介绍

在这里插入图片描述
如图所示,这种设计模式并不好,若是Master进程所在的几点负载过高,就会出现单点故障,整个集群也就OOM了,为了解决这个问题,我们又设计了另一种高可用的模式。

3,高可用Spark集群介绍

在这里插入图片描述如图所示,这种设计模式就是高可用的Spark集群搭建,与高可用的完全分布式集群相似,都是基于Zookeeper的,由zookeeper集群监控两个master的状态,当一个master挂掉后,立即进行准备切换,保持集群的正常运行。

问题探讨:
1,master主备切换过程中,能不能提交一个新的Application应用程序呢?

答案:不能,因为准备切换过程中有以下几个状态
STANDBY ==> RECOVERING ==>COMPLETED_RECOVERY ==>ALIVE
当你提交Application时,还处于切换过程中,此时旧的master已经挂掉,新的master还没切换成Alive状态

2,如果已经有一个Application已经在集群中运行了,那么此时进行主备切换,对这个Application有没有影响。

答案:没有影响,因为Spark是粗粒度资源调度,在任务运行之前就已经向master为Application申请好了资源,当Application运行时已经不需要master了,所以没有影响。

3,Spark准备切换过程,切换的几种状态
STANDBY ==> RECOVERING ==>COMPLETED_RECOVERY ==>ALIVE

4,Spark准备切换过程中,需要做哪些工作?

  • Zookeeper拉起备用master,将其状态置为Alive 备用master从
  • zookeeper集群拉取元数据
  • 备用master向worker节点发送信息,通知worker节点已经更masetr,以后想自己发送心跳信息

4,高可用Spark集群的搭建流程

此篇集群搭建是在原有Spark集群的基础上进行的,所以请参考Spark集群搭建这篇博客进行普通Spark集群的搭建。

若是已经参考上篇博客搭建完毕,接下来开始进行高可用的搭建

1,进入spark安装目录

[root@node01 /]# cd /opt/software/spark-1.6.3/conf/
[root@node01 conf]# ll
total 44
-rwxrwxrwx. 1 root root 1081 Nov  7 19:59 core-site.xml
-rwxrwxrwx. 1 root root  987 Nov  7 19:59 docker.properties.template
-rwxrwxrwx. 1 root root 1105 Nov  7 19:59 fairscheduler.xml.template
-rwxrwxrwx. 1 root root 2089 Nov  7 19:59 hdfs-site.xml
-rwxrwxrwx. 1 root root 1734 Nov  7 19:59 log4j.properties.template
-rwxrwxrwx. 1 root root 6671 Nov  7 19:59 metrics.properties.template
-rwxrwxrwx. 1 root root  898 Nov  7 19:59 slaves
-rwxrwxrwx. 1 root root 1292 Nov  7 19:59 spark-defaults.conf.template
-rwxrwxrwx. 1 root root 4624 Nov 10 12:24 spark-env.sh

2,修改spark-env.sh文件,修改配置如下

[root@node01 conf]# vim spark-env.sh 

SPARK_MASTER_IP=node01
SPARK_MASTER_PORT=7077
SPARK_WORKER_CORES=3
SPARK_WORKER_MEMORY=2g
SPARK_WORKER_DIR=/opt/software/spark/worker
SPARK_WORKER_INSTANCES=1
HADOOP_CONF_DIR=/opt/software/hadoop-2.6.5/etc/hadoop

#用于配置高可用
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node02:2181,node03:2181,node04:2181 -Dspark.deploy.zookeeper.dir=/spark-1106"

3,将配置好的spark-env.sh推送到其他节点上

scp -r spark-env.sh node02:`pwd`
scp -r spark-env.sh node03:`pwd`
scp -r spark-env.sh node04:`pwd`
................................

4,选择一台节点作为备用master,修改那台节点的spark-env.sh配置信息,将SPARK_MASTER_IP设为node02

SPARK_MASTER_IP=node02
SPARK_MASTER_PORT=7077
SPARK_WORKER_CORES=3
SPARK_WORKER_MEMORY=2g
SPARK_WORKER_DIR=/opt/software/spark/worker
SPARK_WORKER_INSTANCES=1
HADOOP_CONF_DIR=/opt/software/hadoop-2.6.5/etc/hadoop

#用于配置高可用
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node02:2181,node03:2181,node04:2181 -Dspark.deploy.zookeeper.dir=/spark-1106"

5,启动zookeeper集群,在node02,node03,node04节点分别启动zookeeper。

zkServer.sh start

6,启动Spark集群

start-spark.sh

7,手动启动备用master

//命令在spark的sbin目录下
start-master.sh

8,在WebUI界面查看
在这里插入图片描述

在这里插入图片描述如图所示,启动了两个Master,一个处于Alive状态,一个处于Standby状态,说明集群正常启动。

9,高可用测试(看看是否是假的高可用)
如图所示,node01是Alive状态的master,通过jps看下master进程的Id,使用kill -9 Id 杀死master(alive)

[root@node01 conf]# jps
24449 Master
89680 Jps
86853 NameNode
87157 DFSZKFailoverController
87276 ResourceManager
[root@node01 conf]# kill -9 24449

10,查看node02状态是否自动切换
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值