Spark高可用集群搭建
Spark的安装与部署
Spark的安装部署方式有以下几种模式
- Standalone
- YARN
- Mesos
- Amazon EC2
伪分布式部署
配置:conf/spark-env.sh
vim conf/spark-env.sh
# 配置jdk
export JAVA_HOME=/root/training/jdk1.7.0_75
# 指定master
export SPARK_MASTER_HOST=hdp00
export SPARK_MASTER_PORT=7077
配置:conf/slave
vim conf/slave
# 指定worker节点
hdp00
分布式部署
conf/spark-env.sh中配置项和伪分布式配置是一样的,只不过在conf/slave中配置的worker节点不一样而已。
vim conf/slave
# 配置两个worker节点
hdp02
hdp03
启动spark集群
sbin/start-all.sh
Spark的HA
基于文件系统的单点恢复
主要用于开发或测试环境。当spark提供目录保存spark Application和worker的注册信息,并将他们的恢复状态写入该目录中,这时,一旦Master发生故障,就可以通过重新启动Master进程(sbin/start-master.sh),恢复已运行的spark Application和worker的注册信息。
基于文件系统的单点恢复,主要是在spark-en.sh里对SPARKDAEMONJAVA_OPTS设置:
spark.deploy.recoveryMode:设置为FILESYSTEM开启单点恢复功能,默认值:NONE
spark.deploy.recoveryDirectory:Spark 保存恢复状态的目录
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/root/training/spark-2.1.0-bin-hadoop2.7/recovery
测试:
1、在hdp00上启动Spark集群
2、在hdp02上启动spark shell
MASTER=spark://hdp00:7077 spark-shell
3、在hdp00上停止master
stop-master.sh
4、观察hdp02上的输出
5、sbin/start-master.sh
基于Zookeeper
ZooKeeper提供了一个Leader Election机制,利用这个机制可以保证虽然集群存在多个Master,但是只有一个是Active的,其他的都是Standby。当Active的Master出现故障时,另外的一个Standby Master会被选举出来。由于集群的信息,包括Worker, Driver和Application的信息都已经持久化到ZooKeeper,因此在切换的过程中只会影响新Job的提交,对于正在进行的Job没有任何的影响。加入ZooKeeper的集群整体架构如下图所示。
主要修改配置:conf/spark-env.sh
spark.deploy.recoveryMode 设置为ZOOKEEPER开启单点恢复功能,默认值:NONE
spark.deploy.zookeeper.url ZooKeeper集群的地址
spark.deploy.zookeeper.dir Spark信息在ZK中的保存目录,默认:/spark
# 注释如下两项
#export SPARK_MASTER_HOST=hdp00
#export SPARK_MASTER_PORT=7077
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hdp00:2181,hdp02:2181,hdp03:2181 -Dspark.deploy.zookeeper.dir=/spark"
启动spark集群
# 在hdp00上启动集群
sbin/start-all.sh
# 此时也可以在hdp02上再启动一个master
sbin/start-master.sh
在hdp02节点上,此时master节点宕掉,hdp02就会自动切换为master: