对于主从分布式集群来说,最可怕的灾难莫过于“单点故障”——主节点宕机了,因为一旦主节点死掉了,就会导致整个集群无法使用。Spark也是主从结构的集群,因此Spark也会存在单点故障的风险。针对单点故障,通常的做法就是搭建一个“高可用集群”,也就是HA集群。对于Spark集群来说,实现HA一般有两种方式:1.基于文件的单节点的HA方式;2.基于Zookeeper的多节点的HA方式。本节先来介绍第一种HA方式:即基于文件的单节点的HA方式。
基于文件的单节点的HA方式,其实是一种伪HA方式。因为这种HA方式并没有真的产生一个新的备用的master节点(从始至终都只有一个master节点,故叫做单节点的HA),而是将Spark运行的任务信息保存到一个目录中(比如master节点上的一个目录),一旦master节点宕机了,可以通过手动的方式重启master节点,以达到恢复任务运行的目的。这种伪HA方式,即适用于伪分布模式的Spark集群,也适用于全分布模式的Spark集群;由于需要人工介入,所以并不适用于实际生产环境,但是可以作为开发测试用的HA方案。
下面就来详细介绍一下这种基于文件的单节点HA的实现过程:
这里以Spark的伪分布模式为例介绍:
1. 搭建Spark集群
搭建Spark集群的过程请参考文章《Spark从入门到精通2:Spark伪分布模式的安装和配置》。
2. 配置HA参数
2.1 创建用于恢复的目录
[root@spark111 ~]# cd /root/training/spark-2.1.0-bin-hadoop2.7/
[root@spark111 spark-2.1.0-bin-hadoop2.7]# mkdir recovery
[root@spark111 spark-2.1.0-bin-hadoop2.7]# cd recovery/
[root@spark111 recovery]# pwd
/root/training/spark-2.1.0-bin-hadoop2.7/recovery
2.2编辑spark-env.sh配置文件
[root@spark111 recovery]# cd /root/training/spark-2.1.0-bin-hadoop2.7/conf/
[root@spark111 conf]# vim spark-env.sh
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM
-Dspark.deploy.recoveryDirectory=/root/training/spark-2.1.0-bin-hadoop2.7/recovery"
2.3测试该伪HA的功能
(1) 启动Spark集群
[root@spark111 ~]# start-all.sh
[root@spark111 ~]# jps
2144 Worker
2256 Jps
2073 Master
先看一下recovery目录下面的内容:
[root@spark111 ~]# ls /root/training/spark-2.1.0-bin-hadoop2.7/recovery/
worker_worker-20180530222706-192.168.179.111-35480
(2) 启动一个Spark任务
这里启动一个spark-shell即可:
[root@spark111 ~]# spark-shell --master spark://spark111:7077
Setting default log level to "WARN".
……
Welcome to
____ __
/ / ___ _____/ /__
\ / _ / _ `/ / '/
// ./_,// //_\ version 2.1.0
/_/Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144)
Type in expressions to have them evaluated.
Type :help for more information.scala>
这时就启动了一个Spark任务,可以在网页上查看到这个任务:
在recovery目录下也可以查看到任务信息:
[root@spark111 ~]# ls /root/training/spark-2.1.0-bin-hadoop2.7/recovery/
app_app-20180530223210-0000
worker_worker-20180530222706-192.168.179.111-35480
(3) 杀死master进程
新建一个SSH会话,查看master进程号PID:
使用kill -9命令杀死master进程,注意看下面会话窗口的变化:
这时Spark任务报错:等待master重连….
(4) 手动恢复master进程
这时只需要单独启动master进程即可。master重启后,只需在下面的会话窗口敲一个回车键即可重新连接到master,任务恢复。
以上介绍了Spark集群的基于文件的单节点的HA的实现方式,这种方式在开发和测试Spark程序中会非常实用。祝你玩的愉快!