基于Zookeeper的Spark HA配置说明

来源:互联网 发布:夏普lcd70tx8008a知乎 编辑:程序博客网 时间:2024/05/17 04:28
默认情况下在Spark standalone集群中进行计算时,由于是RDD的计算模型,所以可以认为worker 已经是有HA特性的了,但是负责资源调度的Master节点有可能出现单点故障。所以为了保证环境的稳定,还是需要配置HA功能。
官方文档中提供了两种HA的机制 
  • 基于Zookeeper:利用ZooKeeper来提供主节点选举和集群状态的存储,可以在集群中运行多个连接到同一个Zookeeper集群的Master节点。其中一个将被选为“Leador”和其他的节点将会是Standby模式。如果当前的Leador挂了,会通过选举产生一个新的Leador。
    请注意,对于新运行的应用 -延迟可能会有1-2分钟,对于已经运行的应用不会受到影响。
  • 基于文件系统:将状态数据存在目录文件中,当主节点挂掉后,通过重启来解决问题。由于stop-master.sh方式停止Master节点是,不会将对应的数据删除,所以时间长了,可能会影响到启动速度
  • 官方原文:http://spark.apache.org/docs/1.6.0/spark-standalone.html
本文主要对第一种HA机制进行配置与演示
  1. 环境说明
    本次演示主要基于已有的Spark以及Zookeeper集群
    Spark:1.6.0,配置过程请参见:http://blog.csdn.net/eric_sunah/article/details/49705051
    Zookeeper:使用已有的Zookeeper集群,配置过程请参见:
    http://blog.csdn.net/eric_sunah/article/details/43969603
  2. 配置
    在Spark standlone单Master节点的基础上,只需要做如下修改
    1. 修改spark-env.sh
      1. 将Spark/conf/spark-env.sh中的SPARK_MASTER_IP 配置部分删除
      2. 在Spark/conf/spark-env.sh文件中加入如下配置
        export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=spark1:2181,spark2:2181 -Dspark.deploy.zookeeper.dir=/spark"
    2. 将spark-env.sh文件同步到所有节点
    3. 在原节点上(native-lufanfeng-1-5-24-137)执行
      Spark/sbin# ./start-all.sh
    4. 在备选的Master节点上(native-lufanfeng-2-5-24-138)执行
      Spark/sbin# ./start-master.sh
  3. 演示
    1. 启动Application的方式调整
      为了保证在App可以随着Master的迁移而连接到正确的Master,启动方式上也要做一些调整
      Spark/bin/spark-submit --master spark://
      native-lufanfeng-2-5-24-138
      :7077,native-lufanfeng-1-5-24-137:7077 batching_main.py
    2. 切换
      切换之前138为Active,137为standby.状态如下:


      此时在138上执行Spark/sbin# ./stop-master.sh操作,发现137的spark日志输出如下:

      此时打开137的状态如下:

  4. 常见问题
    1. 备用Master节点启动失败,查看日志发现以下问题:
      Set(SparkR); users with modify permissions: Set(SparkR)
      16/03/30 14:33:02 WARN util.Utils: Service 'sparkMaster' could not bind on port 7077. Attempting port 7078.
      16/03/30 14:33:02 WARN util.Utils: Service 'sparkMaster' could not bind on port 7078. Attempting port 7079.
      16/03/30 14:33:02 WARN util.Utils: Service 'sparkMaster' could not bind on port 7079. Attempting port 7080.
      16/03/30 14:33:02 WARN util.Utils: Service 'sparkMaster' could not bind on port 7080. Attempting port 7081.
      解决方案
      将Spark/conf/spark-env.sh中的SPARK_MASTER_IP 配置部分删除
0 0
原创粉丝点击