1. Master 的高可用原理
Standalone 集群只有一个 Master,如果 Master 挂了就无法提交应用
程序,需要给 Master 进行高可用配置,Master 的高可用可以使用
fileSystem(文件系统)和 zookeeper(分布式协调服务)。
fileSystem 只有存储功能,可以存储 Master 的元数据信息,用
fileSystem 搭建的 Master 高可用,在 Master 失败时,需要我们手动
启动另外的备用 Master,这种方式不推荐使用。
zookeeper 有选举和存储功能,可以存储 Master 的元素据信息,使用
zookeeper 搭建的 Master 高可用,当 Master 挂掉时,备用的
Master 会自动切换,推荐使用这种方式搭建 Master 的 HA。
2. Master 高可用搭建
1) 在 Spark Master 节点上配置主 Master,配置 spark-env.sh
添加参数
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node2:2181,node3:2181,node4:2181 -Dspark.deploy.zookeeper.dir=/sparkHA"
2) 发送到其他 worker 节点上
[root@node1 conf]# scp spark-env.sh node2:`pwd`
spark-env.sh 100% 4739 554.3KB/s 00:00
[root@node1 conf]# scp spark-env.sh node3:`pwd`
spark-env.sh
3) 找一台节点(非主 Master 节点)配置备用 Master,修改 spark-
env.sh 配置节点上的 MasterIP
[root@node2 conf]# vim spark-env.sh
# 修改备用Master host
export SPARK_MASTER_HOST=node2
# 启动master
[root@node2 conf]# ./../sbin/start-master.sh
4) 启动 spark Standalone 集群,启动备用 Master
[root@node2 conf]# ./../sbin/start-master.sh
5) 查看集群之前启动 zookeeper 集群:
[zk: localhost:2181(CONNECTED) 0] ls /
[hadoop-ha, hbase, hiveserver2_zk, registry, sparkHA, yarn-leader-election, zk01, zk02, zookeeper]
6) 打开主 Master 和备用 Master WebUI 页面,观察状态。
后启动的master为备用master
3. 注意点
- 主备切换过程中不能提交 Application。
- 主备切换过程中不影响已经在集群中运行的 Application。因为 Spark 是粗粒度资源调度。
4. 测试验证
杀死主master,观察从master的状态
[root@node2 conf]# jps
57552 Worker
57648 Jps
57448 Master
57370 QuorumPeerMain
[root@node2 conf]# kill -9 57448
在大约20s后,standby自动切换为alive。
另经验证,在这20s内,若有准备执行的application任务,则会影响其申请资源,直到切换成功为止,但不影响已正常运行的task任务执行(其在worker端运行,不受master影响)
5.遇到问题
访问备用master时出现404问题
经查这是因为我的备用master和某一台zookeeper在同一个节点上,而8080端口已被Zookeeper AdminServer占用
解决办法,更换备用Master至其他节点。或更改zookeeper AdminServer端口参考:https://developer.aliyun.com/article/613976