spark基于zookeeper的高可用异常启动分析

1、背景:

spark采用了stand alone模式,其中master基于zookeeper部署了高可用;

zookeeper维护了当前的active master信息,以及所属worker信息

worker和active  master进行通信

而spark的启动脚本SPARK_HOME/sbin/start-all.sh脚本里,默认会将启动的worker与本机启动的master进行通信.

2、正确操作:

高可用的spark集群重新启动时:

先杀死standby master,然后在master节点依次执行stop-all.sh  start-all.sh  最后登陆standby master节点,启动;

3、异常分析:

如果没有杀死standby  master,直接在active master节点执行了stop-all.sh  start-all.sh会发生什么问题呢?

实验一:

高可用spark集群启动:此时,worker与g3-test-26的master进行通信。(worker默认与本机启动的master进行通信)

g3-test-26: start-all.sh           (active master)
g3-test-27: start-master.sh (standby. master)

异常关闭集群:

g3-test-26上执行命令:
g3-test-26:/opt/cslc/spark-2.4.5-bin-hadoop2.7/sbin/stop-all.sh
g3-test-26:/opt/cslc/spark-2.4.5-bin-hadoop2.7/sbin/start-all.sh
此时,g3-test-27变成active  master(zookeeper记录这个active master的所有worker均为head状态)

新启动的g3-test-26为standby master,而启动的worker在和standby master 进行通信,无法在zk进行注册,结果g3-test-27:8080上显示无worker,g3-test-26上显示无worker,并且任务无法正常运行。

解决办法1:先杀死当前standby master,然后在active master节点执行重启操作,最后再启动standby master

解决办法2:停止所有进程,清理zookeeper里面spark的元数据,然后先start-all.sh启动,然后切换到另一个节点启动standby master

 4、worker单独启动:

先查找active  master节点:

可以在对应master的web ui 查看
例如:
http://104.21.51.77:8080

可以在zookeeper的客户端查看:
get  /spark/master_status

然后登陆worker节点,执行

${SPARK_HOME}/sbin/start-slave.sh  spark://104.21.51.76:7077

或者登陆active master节点,执行

${SPARK_HOME}/sbin/start-slaves.sh

原文地址:https://www.cnblogs.com/students/p/12452480.html