• Spark Standalone HA基本原理及部署


    Spark Standalone HA基本原理

    • Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,会存在Master单点故障(SPOF)的问题。
    • 高可用HA(两种方案)
      • 基于文件系统的单点恢复(开发或测试环境)。
      • 基于zookeeper的Standby Masters(生产环境)。

    Zookeeper Standby Masters

    • ZooKeeper提供了一个Leader Election机制,利用这个机制可以保证虽然集群存在多个Master,但是只有一个是Active的,其他的都是Standby。当Active的Master出现故障时,另外的一个Standby Master会被选举出来。由于集群的信息,包括Worker, Driver和Application的信息都已经持久化到文件系统,因此在切换的过程中只会影响新Job的提交,对于正在进行的Job没有任何的影响
    • 架构图如下所示:
      在这里插入图片描述
      在这里插入图片描述
    • 总的来说StandAlone HA的原理就是基于Zookeeper做状态的维护, 开启多个Master进程, 一个作为活跃,其它的作为备份,当活跃进程宕机,备份Master进行接管。

    Spark Standalone HA部署

    • 基于之前部署的Spark Standalone群集,我们需要对一些配置文件进行修改。
    1. 先在spark-env.sh中, 注释掉SPARK_MASTER_HOST=node1。
    2. 添加以下内容:
    # spark.deploy.recoveryMode 指定HA模式 基于Zookeeper实现
    # 指定Zookeeper的连接地址
    # 指定在Zookeeper中注册临时节点的路径
    SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"
    
    • 1
    • 2
    • 3
    • 4
    1. spark-env.sh 分发到每一台服务器上
    cd $SPARK_HOME/conf
    scp spark-env.sh node2:`pwd`/
    scp spark-env.sh node3:`pwd`/
    
    • 1
    • 2
    • 3
    1. 停掉之前的群集
    sbin/stop-all.sh
    
    • 1
    1. 启动群集
    # 在node1上 启动一个master 和全部worker
    sbin/start-all.sh
    # node2上启动一个备用的master进程
    sbin/start-master.sh
    
    • 1
    • 2
    • 3
    • 4

    node1网址:http://node1:8081/ 因为zk占用8080,所以顺延到8081端口
    在这里插入图片描述

    node2网址:http://node2:8082/ 因为zk占用8080,而worker占用8081,所以就顺延到8082了,具体可以在日志中查看
    显示状态为:STANDBY
    在这里插入图片描述

    模拟故障切换

    1. 提交一个spark任务到当前ALIVE的master上
    bin/spark-submit --master spark://node1:7077 /export/server/spark-3.2.0/examples/src/main/python/pi.py 1000
    
    • 1
    1. 模拟故障切换
    # node1 master的进程
    kill -9  26822
    
    • 1
    • 2
    1. 观察node2节点的变化显示RECOVERING → ALIVE
      在这里插入图片描述
      在这里插入图片描述
    2. 重新启动node1的master之后发现node1的状态为STANDBY。
      在这里插入图片描述
      总结:HA模式下, 主备切换 不会影响到正在运行的程序,最大的影响是 会让它中断大约30秒左右。
  • 相关阅读:
    JOptionPane
    mirai Bot初始化配置
    Java面试题-Java核心基础-第七天(String)
    React源码分析4-深度理解diff算法
    vcpkg manifest 的使用
    Oracle-PLSQL编程
    UE4 回合游戏项目 10- 添加怪物死亡动画
    LCR 159.库存管理 III
    不堆概念、换个角度聊多线程并发编程
    Ansys Zemax | 手机镜头设计 - 第 1 部分:光学设计
  • 原文地址:https://blog.csdn.net/sinat_31854967/article/details/127697314