大数据教程(3.6):zookeeper的命令行客户端+znode数据结构类型+监听等功能_

一个人想着一个人 提交于 2020-02-29 07:56:27

    上一篇文章,博主介绍了zookeeper集群的搭建全过程;今天博主将为大家分享的是zookeeper的命令行客户端使用、zookeeper的数据结构和监听功能。

   zookeeper启动与关闭服务的命令:

./bin/zkServer.sh  start 开启zookeeper
./bin/zkServer.sh  stop 停止zookeeper

    一、zookeeper数据结构

        zookeeper特性:

         1)、Zookeeper:一个leader,多个follower组成的集群
         2)、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
         3)、分布式读写,更新请求转发,由leader实施
         4)、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
         5)、数据更新原子性,一次数据更新要么成功,要么失败
         6)、实时性,在一定时间范围内,client能读到最新数据

        zookeeper数据结构:

         1)、层次化的目录结构,命名符合常规文件系统规范(见下图)
         2)、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
         3)、节点Znode可以包含数据和子节点(EPHEMERAL短暂类型的节点不能有子节点)
         4)、客户端应用可以在节点上设置监视器  

        数据结构的图:

        节点类型

         1)、Znode有两种类型:
                短暂(ephemeral)(断开连接自己删除)
                持久(persistent)(断开连接不删除)
         2)、Znode有四种形式的目录节点(默认是persistent )
                PERSISTENT                                 -----永久节点
                PERSISTENT_SEQUENTIAL(持久序列/test0000000019 ) ------永久序号节点
                EPHEMERAL                                 -----临时节点(短暂节点)
                EPHEMERAL_SEQUENTIAL           ------短暂序号节点           
         3)、创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
         4)、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

  二、zookeeper命令行客户端初识   

         zookeeper的客户端和其它可执行命令都在其bin目录中,分别是zkCli.sh和zkCli.cmd,前者是Linux中使用的客户端启动脚本,后者是windows系统中的客户端启动脚本。

        1)、运行 zkCli.sh –server <ip>进入命令行工具:./zkCli.sh -server 192.168.29.135

cd /opt/apps/zookeeper-3.4.13/bin     
./zkCli.sh -server 192.168.29.135   如果不指定-server参数,连接的是本机ip

        2)、命令行客户端连接上zookeeper后,输入help可查看zookeeper命令帮助

        3)、客户端命令例子

1、使用 ls 命令来查看当前 ZooKeeper 中所包含的内容:
[zk: 192.168.29.135(CONNECTED) 1] ls /
2、创建一个新的 znode ,使用 create /zk myData 。这个命令创建了一个新的 znode 节点“ zk ”以及与它关联的字符串,默认为创建永久节点:
[zk: 192.168.29.135(CONNECTED) 2] create /zk "myData“
3、我们运行 get 命令来确认 znode 是否包含我们所创建的字符串:
[zk: 192.168.29.135(CONNECTED) 3] get /zk
//数据描述信息
""
cZxid=0x30000004创建事务id
ctime=Tue apr 05 02:35:02 CST 2016
mZxid=0x30000004修改事务id
mtime=Tue apr 05 02:35:02 CST 2016
cversion=1创建版本号,
dataversion=1 数据版本号
aclversion=0 权限版本号
ephemeralOwner
dataLength=5数据长度
numChildren=1子节点数
#监听这个节点的变化,当另外一个客户端改变/zk时,它会打出下面的
#WATCHER::
#WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk
[zk: 192.168.29.135(CONNECTED) 4] get /zk watch
4、下面我们通过 set 命令来对 zk 所关联的字符串进行设置:
[zk: 192.168.29.135(CONNECTED) 5] set /zk "zsl“
5、下面我们将刚才创建的 znode 删除,只能删除叶子节点:
[zk: 192.168.29.135(CONNECTED) 6] delete /zk
6、删除节点,可删除非叶子节点及其下的子节点的所有数据:rmr
[zk: 192.168.29.135(CONNECTED) 7] rmr /zk
7、创建短暂节点(客户端退出后自动删除)
[zk: 192.168.29.135(CONNECTED) 8] create -e  /aap2 “bbb” 
8、带序号的短暂节点,zookeeper在创建带序号的节点时,如果从来没创建过,序号冲0开始,反之从1开始
[zk: 192.168.29.135(CONNECTED) 9] create  -s  -e  /aap2 “bbb” 
9、设置值
[zk: 192.168.29.135(CONNECTED) 10] set /app1  bbbb
10、拿数据并且注册监听本节点数据的变化(监听只生效一次)
[zk: 192.168.29.135(CONNECTED) 11] get /app1 watch 
11、获取子节点变化的监听
[zk: 192.168.29.135(CONNECTED) 12] ls /app1 watch 
12、quit退出zookeeper客户端
[zk: 192.168.29.135(CONNECTED) 12] quit

三、zookeeper命令行客户端命令详解

        1)、connect命令,连接zk服务端,(与close命令配合使用可以连接或者断开zk服务端),可用于更换连接的zookeeper服务器:

        2)、close命令,用于关闭与服务端的链接

        3)、get命令,用于获取节点的信息,注意节点的路径必须是以/开头的绝对路径。如get /

数据详细信息说明:
cZxid:节点创建时的zxid
ctime:节点创建时间
mZxid:节点最近一次更新时的zxid
mtime:节点最近一次更新的时间
cversion:子节点数据更新次数
dataVersion:本节点数据更新次数
aclVersion:节点ACL(授权信息)的更新次数
ephemeralOwner:如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0
dataLength:节点数据长度,本例中为根节点/的长度
numChildren:子节点个数    

        4)、stat命令,用于查看节点的状态信息,如stat /;该命令的结果参数说明同get命令

        5)、set命令,用于设置节点的数据,如:set /userid2 32222

        6)、ls命令是用于获取路径下的节点信息,注意路径为绝对路径,如:ls2 /userid2

        7)、ls2命令是ls命令的增强版,比ls命令多输出本节点信息,如:ls2 /userid2

        8)、listquota命令用于显示配额,如listquota /userid3

        9)、setquota命令用于设置节点个数以及数据长度的配额,如:

setquota –n 4 /userid3 设置/userid3子节点个数最大为4
setquota –b 100 /userid3 设置/userid3节点长度最大为100

        10)、delquota命令用于删除配额,-n为子节点个数,-b为节点数据长度,如:delquota –n 2

        11)、history用于列出最近的命令历史,可以和redo配合使用。如history

        12)、redo命令用于再次执行某个命令,使用方式为redo cmdid 如 redo 20,常与history配合使用

        13)、create命令用于创建节点,其中-s为顺序充点,-e临时节点

        14)、delete命令用于删除节点,如delete /userid3

        15)、addauth命令用于节点认证,使用方式:如addauth digest username:password

        16)、setAcl命令用于设置节点Acl

                Acl由三部分构成:1为scheme,2为user,3为permission,一般情况下表示为scheme:id:permissions

        17)、getAcl命令获取节点的Acl,如getAcl /node1

        18)、sync命令用于强制同步,由于请求在半数以上的zk server上生效就表示此请求生效,那么就会有一些zk server上的数据是旧的。sync命令就是强制同步所有的更新操作。

        19)、printWatchers命令用于设置和显示监视状态,值为on或则off

        20)、quit命令退出客户端

              

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!