Zookeeper安装配置(单机测试版)

Zookeeper 是hadoop的分布式协调服务。本文为单机测试版本,旨在熟悉API。

说在前面
  • 工作环境:VMware® Workstation 12 Pro 12.5.6 build-5528349
  • linux版本:CentOS-7-x86_64-Minimal-1611.iso
  • JDK版本:jdk-8u65-linux-x64.tar.gz
  • Hadoop版本:hadoop-2.7.6.tar.gz
  • Zookeeper版本:zookeeper-3.4.12.tar.gz
Zookeeper的特点
  • Zookeeper的核心是精简的文件系统,它提供了一些简单的操作和一些额外的抽象操作,例如:排序和通知。

  • Zookeeper的基本操作是一组丰富的构建,可用于实现多种协调数据结构和协议。例如:分布式对列,分布式锁和一组节点中的”领导者选举”(leader election)。

  • Zookeeper具有高可用性,Zookeeper可以帮助系统避免单点故障,可以用于构建一个可靠的应用程序。

  • Zookeeper采用松耦合交互方式,在Zookeeper支持的交互过程中,参与者不需要彼此了解。

  • Zookeeper是一个资源库,Zookeeper提供了一个通用协调模式实现方法的开源共享库,是程序员免于写这类通用的协议。

Zookeeper的安装
  • 下载 zookeeper-3.4.12.tar.gz,解压于 /soft 目录下,并为其创建符号链接 zk
//解压
$> tar -xzvf /mnt/hgfs/bigdata/soft/zookeeper-3.4.12.tar.gz -C /soft

//创建符号链接
$> ln -s zookeeper-3.4.12 zk
  • 配置zk的环境变量,source profile :立即生效
$> sudo nano /etc/profile

//导入环境变量
export ZK_HOME=/soft/zk
export PATH=$PATH:$ZK_HOME/bin
  • 进入 /soft/zk/conf 目录下,配置zk
$> cp /soft/zk/conf/zoo.cfg.sample zoo.cfg .

$> nano /soft/zk/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/centosmin0/zookeeper //配置临时文件路径
clientPort=2181

image

  • 启动zk服务器
//进入bin目录下启动
$> cd /soft/zk/bin
$> zkServer.sh start

//验证是否启动
$>netstat -anop | grep 2181

image

image

  • 启动客户端链接到zk服务器(s201:192.168.32.201)
$>zkCli.sh -server s201:2181   //进入zk命令行
$zk]help                       //查看帮助
$zk]quit                       //退出
$zk]create /a tom              //
$zk]get /a                     //查看数据
$zk]ls /                       //列出节点
$zk]set /a tom                 //设置数据
$zk]delete /a                  //删除一个节点
$zk]rmr /a                     //递归删除所有节点。
使用JavaAPI访问zk服务器
  • 导入依赖
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.12</version>
</dependency>
  • 访问zk服务器
/**
     * 列出指定路径下的目录
     */
    @Test
    public void ls() throws Exception {
        ZooKeeper zk = new ZooKeeper("s201:2181", 5000, null);
        List<String> list = zk.getChildren("/a", null);
        for (String s : list) {
            System.out.println(s);
        }
    }

    /**
     * 设置数据
     */
    @Test
    public void setData() throws Exception {
        ZooKeeper zk = new ZooKeeper("s201:2181", 5000, null);
        zk.setData("/a", "scaca".getBytes(), 0);
    }

    /**
     * 创建临时节点
     */
    @Test
    public void createEmph() throws Exception {
        ZooKeeper zk = new ZooKeeper("s201:2181", 5000, null);
        zk.create("/c/c1", "toms".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);

        System.out.println("hello");
    }

    /**
     * 测试观察者模式
     */
    @Test
    public void testWatch() throws Exception {
        final ZooKeeper zk = new ZooKeeper("s201:2181", 5000, null);
        //设置状态
        Stat st = new Stat();

        Watcher w = null;
        w = new Watcher() {
            //回调函数
            public void process(WatchedEvent event) {
                try {
                    System.out.println("数据被修改了!");
                    zk.getData("/a", this, null);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        //得到数据时加注册,注册的同时给Client一个观测器Watcher
        byte[] data = zk.getData("/a", w, st);

        System.out.println(new String(data));

        while (true) {
            Thread.sleep(1000);
        }
    }
zk服务器架构

猜你喜欢

转载自blog.csdn.net/king123456man/article/details/81738018