1、masert的HA
元数据:包括比如管理哪些workers、哪些worker与我(master)通信、当前我启动的driver有哪些,使用本地文件系统确实能管理这些存在于master的元数据。但是存在的问题是需要手动切换master。
zookeeper也可以存储元数据,并且有自动选举的功能。
zookeeper管理着元数据,一旦zookeeper发现原有的master down了,就会在另一台处于standby状态的master上:
(1)恢复原数据
(2)通知所有worker与此节点通信。
(3)切换成alive
2、搭建master-HA
(https://spark.apache.org/docs/2.3.1/spark-standalone.html)
注意master-ha针对的是standalone模式;在yarn模式下为resourceManager。
具体的配置过程:
(1)进入$SPARK_HOME/conf/spark-env.sh:
对于参数SPARK_DAEMON_JAVA_OPTS这个可以配置多个参数,参数之间使用-D分割开,使用空格分隔开。
(2)分发spark-env.sh这个配置文件到其他的spark节点。
(现在有3个spark节点node01、node02、node03),如果我想让node01作为master(alive)、node02作为standalone的master。在$SPARK_HOME/sbin下的start-all.sh脚本中,分别先执行了start-master.sh 以及 start-slaves.sh:
在node02上不能直接./start-master.sh 因为会去读配置文件spark-env.sh,即:
所以需要更改SPARK_MASTER_HOST为node02。
最后启动:需要在node01上执行./start-all.sh以及在node02上执行./start-master.sh
验证:
访问node01:8080是alive状态;访问node02:8080是standby状态。此时kill -9 node01上的master,刷新8080的界面(需要等一会)。如果真的没有成功,可以去zookeeper/bin执行zkCli.sh进入客户端,执行命令:
```ls /```
看是否有刚刚创建的主目录。
重新提交任务:
因为配置了HA,所以提交任务的命令会发生变化:
在执行上述任务过程中,kill掉主master,发现正在执行的任务并未受到影响。且standby的master已经将任务接管过来了。