高可用的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狀態是否自動切換
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章