微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐