• zookeeper第二章:API接口


    系列文章目录

    zookeeper第一章:集群搭建
    zookeeper第二章:API接口



    前言

    这一次来学习zookeeper的操作接口,期中包括命令行和客户端。


    一、命令行

    1.集群启动

    在这里插入图片描述
    直接启动会发现,我们连接的是本机zookeeper,单机模式的时候这样连接就可以,但当启动集群时,我们希望可以随时连接其客户端。quit退出。
    在这里插入图片描述
    使用-server指定客户端和端口

     bin/zkCli.sh -server hadoop102:2181
    
    • 1

    在这里插入图片描述
    仍然用本机做示例。
    在这里插入图片描述

    2.常用命令

    • 查看信息
    ls -s /
    
    • 1

    在这里插入图片描述
    (1)czxid:创建节点的事务 zxid
    每次修改 ZooKeeper 状态都会产生一个 ZooKeeper 事务 ID。事务 ID 是 ZooKeeper 中所
    有修改总的次序。每次修改都有唯一的 zxid,如果 zxid1 小于 zxid2,那么 zxid1 在 zxid2 之
    前发生。
    (2)ctime:znode 被创建的毫秒数(从 1970 年开始)
    (3)mzxid:znode 最后更新的事务 zxid
    (4)mtime:znode 最后修改的毫秒数(从 1970 年开始)
    (5)pZxid:znode 最后更新的子节点 zxid
    (6)cversion:znode 子节点变化号,znode 子节点修改次数
    (7)dataversion:znode 数据变化号
    (8)aclVersion:znode 访问控制列表的变化号
    (9)ephemeralOwner:如果是临时节点,这个是 znode 拥有者的 session id。如果不是
    临时节点则是 0。
    (10)dataLength:znode 的数据长度
    (11)numChildren:znode 子节点数量
    这些概念性的东西,了解即可。

    • 创建节点
      节点有两类持久/临时,有序号/无序号,所以共有四种节点。

      1. 永久节点(无序号)
      create /sanguo "diaochan"
      
      • 1

      在这里插入图片描述
      2. 永久节点(有序号)
      在这里插入图片描述
      带序号节点
      在这里插入图片描述
      说一下两者区别,带序号可以直接追加,无序号不能。
      在这里插入图片描述
      -临时节点(无序号)

      create -e /honglou "jiabaoyv"
      
      • 1
      • 临时节点(有序号)
       create -e -s /shuihu "linchong"
      
      • 1

      在这里插入图片描述
      查看一下现有节点,我们退出重进入。
      在这里插入图片描述
      可以看到临时节点已经消失了。
      在这里插入图片描述

    3.获取节点信息

    get -s /sanguo
    
    • 1

    在这里插入图片描述

    4.修改节点信息

    set /sanguo "lvbu"
    
    • 1

    在这里插入图片描述

    5.监听节点信息

    现在我在104进行监听注册,103进行修改。

    get -w /sanguo
    
    • 1

    在这里插入图片描述
    我们在103进行数据修改。
    在这里插入图片描述
    在104查看结果
    在这里插入图片描述
    现在我们再次修改
    在这里插入图片描述
    再次查看104
    在这里插入图片描述
    这次并没有变化,这类监听只能进行一次,第二次便需要重新申请。

    6.监听节点路径

    104操作

    ls -w /sanguo
    
    • 1

    在这里插入图片描述
    103修改
    在这里插入图片描述
    在104依旧可以监听。
    在这里插入图片描述

    7.删除节点

    在这里插入图片描述
    deteall就是递归删除,不管节点下面是否有子节点都可以删除。

    二、客户端

    1.创建maven工程

    这个不演示过程了
    在这里插入图片描述

    2.修改pom.xml

    可以根据自己需要修改版本。

    <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.18.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.7.1</version>
            </dependency>
        </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3.创建log4j.properties

    在这里插入图片描述

    log4j.rootLogger=INFO, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c]- %m%n
    log4j.appender.logfile=org.apache.log4j.FileAppender
    log4j.appender.logfile.File=target/spring.log
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c]- %m%n
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.创建客户端类

    在这里插入图片描述

    5.代码编写

    1. 初始化
    package com.atguigu.zk;
    
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.ZooKeeper;
    import org.junit.Test;
    
    import java.io.IOException;
    
    public class zkClient {
        
        //目标客户端
        private String connectString="hadoop102:2181,hadoop103:2181,hadoop104:2181";
        //超时等待4秒
        private int seesionTimeout=4000;
    
        @Test
        public void init() throws IOException {
            ZooKeeper zooClient = new ZooKeeper(connectString, seesionTimeout, new Watcher() {
                @Override
                public void process(WatchedEvent watchedEvent) {
                }
            });
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    初始化成功
    在这里插入图片描述

    1. 添加节点
      在这里插入图片描述
      现在我们的集群是干净的。
    package com.atguigu.zk;
    
    import org.apache.zookeeper.*;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    
    public class zkClient {
    
        //目标客户端
        private String connectString="hadoop102:2181,hadoop103:2181,hadoop104:2181";
        //超时等待4秒
        private int seesionTimeout=4000;
        private ZooKeeper zkClient;
    
        @Before
        public void init() throws IOException {
            zkClient = new ZooKeeper(connectString, seesionTimeout, new Watcher() {
                @Override
                public void process(WatchedEvent watchedEvent) {
                }
            });
        }
        //添加新节点
        @Test
        public void create() throws InterruptedException, KeeperException {
            String nodeCreated = zkClient.create("/atguigu", "ss.avi".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    在这里插入图片描述

    1. 节点监听
    package com.atguigu.zk;
    
    import org.apache.zookeeper.*;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.util.List;
    
    public class zkClient {
    
        //目标客户端
        private String connectString="hadoop102:2181,hadoop103:2181,hadoop104:2181";
        //超时等待4秒
        private int seesionTimeout=10000;
        private ZooKeeper zkClient;
    
        @Before
        public void init() throws IOException {
            zkClient = new ZooKeeper(connectString, seesionTimeout, new Watcher() {
                @Override
                public void process(WatchedEvent watchedEvent) {
                    System.out.println("---------------------------");
                    List<String> children = null;
                    try {
                        children = zkClient.getChildren("/", true);
                        for (String child : children) {
                            System.out.println(child);
                        }
                        System.out.println("---------------------------");
                    } catch (KeeperException e) {
                        throw new RuntimeException(e);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            });
        }
        //添加新节点
        @Test
        public void create() throws InterruptedException, KeeperException {
            String nodeCreated = zkClient.create("/atguigu", "ss.avi".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        }
        //监听节点
        @Test
        public void getChildren() throws InterruptedException, KeeperException {
            List<String> children = zkClient.getChildren("/", true);
            Thread.sleep(Long.MAX_VALUE);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    现在节点是清空的
    在这里插入图片描述
    我们创建一个节点在将其删除。
    在这里插入图片描述
    再次查看控制台。
    在这里插入图片描述

    1. 判断节点是否存在
    package com.atguigu.zk;
    
    import org.apache.zookeeper.*;
    import org.apache.zookeeper.data.Stat;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.util.List;
    
    public class zkClient {
    
        //目标客户端
        private String connectString="hadoop102:2181,hadoop103:2181,hadoop104:2181";
        //超时等待4秒
        private int seesionTimeout=10000;
        private ZooKeeper zkClient;
    
        @Before
        public void init() throws IOException {
            zkClient = new ZooKeeper(connectString, seesionTimeout, new Watcher() {
                @Override
                public void process(WatchedEvent watchedEvent) {
    //                System.out.println("---------------------------");
    //                List children = null;
    //                try {
    //                    children = zkClient.getChildren("/", true);
    //                    for (String child : children) {
    //                        System.out.println(child);
    //                    }
    //                    System.out.println("---------------------------");
    //                } catch (KeeperException e) {
    //                    throw new RuntimeException(e);
    //                } catch (InterruptedException e) {
    //                    throw new RuntimeException(e);
    //                }
    
    
                }
            });
        }
        //添加新节点
        @Test
        public void create() throws InterruptedException, KeeperException {
            String nodeCreated = zkClient.create("/atguigu", "ss.avi".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        }
        @Test
        public void getChildren() throws InterruptedException, KeeperException {
            List<String> children = zkClient.getChildren("/", true);
    
            Thread.sleep(Long.MAX_VALUE);
    
        }
        @Test
        public void exits() throws InterruptedException, KeeperException {
            Stat stat = zkClient.exists("/atguigu", false);
    
            System.out.println(stat==null?"not exists":"exists");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    在这里插入图片描述

    现在我们创建这个节点,然后在运行。
    在这里插入图片描述
    在这里插入图片描述


    总结

    zookeeper第二章API接口部分就到这里。

  • 相关阅读:
    C语言刷题篇(备赛中......)--------( 篇章1 )
    linux课程第一课------命令的简单的介绍
    python基础运用例子
    MySQL-锁分类-1
    Vue2问题:分享一个通用多文件类型预览库
    WPF/C#:显示分组数据的两种方式
    weblogic 系列漏洞
    链接装载与库:第四章——静态链接
    【Spark NLP】第 10 章:主题建模
    多线程之任务调度线程池
  • 原文地址:https://blog.csdn.net/weixin_50835854/article/details/126191458