美文网首页
基于zookeeper搭建sparkHA

基于zookeeper搭建sparkHA

作者: 扣篮的左手 | 来源:发表于2018-06-06 22:19 被阅读0次

    企业中一般都使用zookeeper的高可用搭建Spark。其原理就是通过zookeeper来选举一个Master,其它的Master都处于Standby状态。

    1. 首先将conf/spark-env.sh中master的地址注释掉


    2. 然后引用zookeeper相关的配置,添加一个属性SPARK_DAEMON_JAVA_OPTS

    export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER  -Dspark.deploy.zookeeper.url=node-1:2181,node-2:2181,node-3:2181  -Dspark.deploy.zookeeper.dir=/spark"
    

    在zookeeper中的spark目录中保存元数据信息。


    这里将之前手动指定的master注释掉,master由zookeeper指定选出。
    然后引入zookeeper:
    这里的3个参数,分别指定:恢复模式为zookeeper;zookeeper的server地址和端口号(这里的2181);元信息的保存目录,在zookeeper下的spark目录下。

    参数说明
    spark.deploy.recoveryMode:恢复模式(Master重新启动的模式)
    有三种:(1)ZooKeeper (2) FileSystem (3)NONE
    FileSystem在测试阶段用,生产中用Zookeeper,因为基于文件系统的需要我们手动启动挂掉的Master,NONE表示不恢复;
    spark.deploy.zookeeper.url:ZooKeeper的Server地址,以及端口号;
    spark.deploy.zookeeper.dir:指定对应保存在zookeeper上的节点目录。即集群元数据信息的文件、目录,包括Worker,Driver和Application的信息。

    通过上边这3个参数,构建高可用的Spark。

    配置结束以后,发放到node-2和node-3:


    致此,高可用的Spark集群搭建好了。

    企业当中一般启动两个Master。


    配置zookeeper

    为了方便快速启动zookeeper,首先添加zookeeper的环境变量:
    /etc/profile中添加


    保存之后,将profile文件发送的node-2和node-3上:

    刷新一下各机器的/etc/profile

    测试一下环境变量配置成功:

    前边配置了zookeeper的环境变量,下边编写批量启动和停止zookeeper的脚本文件

    在export目录下创建script目录,用于存放脚本文件


    创建一个脚本start_zk.sh批量启动所有机器上的zookeeper:
    #!/bin/sh
    for host in node-1 node-2 node-3
    do
      ssh $host "source /etc/profile;zkServer.sh start"
      echo "$host zk is running"
    done
    

    同时为了方便,再创建一个stop_zk.sh批量关闭zookeeper:
    #!/bin/sh
    for host in node-1 node-2 node-3
    do
      ssh $host "source /etc/profile;zkServer.sh stop"
      echo "$host zk is stopping"
    done
    

    查看所有节点上的zookeeper状态信息status_zk.sh

    #!/bin/sh
    for host in node-1 node-2 node-3
    do
      ssh $host "source /etc/profile;zkServer.sh status"
      echo "$host zk's status"
    done
    

    编写完成之后测试一下脚本:


    批量启动
    批量查看状态 批量关闭

    使用jps可以查看zookeeper进程是否启动,使用zkServer.sh status查看启动状态。

    进入zookeeper客户端

    可以看到现在只有zookeeper节点,目前还没有spark节点。

    接下来启动Spark集群

    启动Spark HA 之前先要启动zookeeper集群。

    先在哪台机器上运行启动命令,就会先在哪台机器上构建Master。




    现在就有了spark节点。里边存放了选举的信息,当前哪个master是活着的master。

    在node-2上运行start-master.sh命令,使用jps命令查看,发现也启动了Master进程。

    这里可以看到node-2是一个standby的状态。内核和cpu的资源都是0。
    先启动的node-1,所以node-1是alive,然后再启动的node-2,node-2就是standby的状态。

    这个时候做一个测试,到node-1上杀死Master进程:
    使用kill -9 进程号 命令杀死进程

    恢复不是一瞬间的,先感知到Master挂掉,再对其它所有处于standby状态的master进行选举,再来选举出一个活着的master,然后就开始恢复到之前的master的状态。需要一到两分钟。



    CPU核数和内存是所有节点之和。

    再次启动node-1上的master,node-1变为了standby的状态,而node-2为alive状态。


    相关文章

      网友评论

          本文标题:基于zookeeper搭建sparkHA

          本文链接:https://www.haomeiwen.com/subject/kdcisftx.html