Skip to content

客户端命令行操作

1. 命令行语法

基本语法功能描述
help显示所有操作命令
ls path使用 ls 命令来查看当前 znode 的子节点 [可监听]
-w 监听子节点变化
-s 附加次级信息
create普通创建
-s 含有序列
-e 临时(重启或者超时消失)
get path获得节点的值 [可监听]
-w 监听节点内容变化
-s 附加次级信息
set设置节点的具体值
stat查看节点状态
delete删除节点
deleteall递归删除节点

2. 显示所有操作命令

sh
[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port -client-configuration properties-file cmd args
	addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
	addauth scheme auth
	close 
	config [-c] [-w] [-s]
	connect host:port
	create [-s] [-e] [-c] [-t ttl] path [data] [acl]
	delete [-v version] path
	deleteall path [-b batch size]
	delquota [-n|-b|-N|-B] path
	get [-s] [-w] path
	getAcl [-s] path
	getAllChildrenNumber path
	getEphemerals path
	history 
	listquota path
	ls [-s] [-w] [-R] path
	printwatches on|off
	quit 
	reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
	redo cmdno
	removewatches path [-c|-d|-a] [-l]
	set [-s] [-v version] path data
	setAcl [-s] [-v version] [-R] path acl
	setquota -n|-b|-N|-B val path
	stat [-w] path
	sync path
	version 
	whoami 
Command not found: Command not found help

3. znode节点数据信息

3.1 查看当前znode中所包含的内容

sh
[zk: hadoop105:2181(CONNECTED) 0] ls /
[zookeeper]

3.2 查看当前节点详细数据

sh
[zk: hadoop105:2181(CONNECTED) 5] ls -s /
[zookeeper]cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 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拥有者的sessionid。如果不是临时节点则是0。
  10. dataLength:znode的数据长度。
  11. numChildren:znode子节点数量。

4. 节点类型(持久/短暂/有序号/无序号)

  • 持久节点(Persistent):客户端和服务器端断开连接后,创建的节点不删除。
  • 短暂节点(Ephemeral):客户端和服务器端断开连接后,创建的节点自己删除。
  • 有序节点(sequential):并不算是一种单独种类的节点,而是在之前提到的持久节点和临时节点特性的基础上,增加了一个节点有序的性质。在我们创建有序节点的时候会自动使用一个单调递增的数字作为后缀。
  • TTL节点(ttl):当一个TTL节点在 TTL 内没有被修改并且没有子节点,会被删除。注意:默认此功能不开启,需要修改配置文件extendedTypesEnabled=true
  • 容器节点(container):3.5.3版本新增节点类型,当一个容器节点的最后一个子节点被删除后,容器节点也会被删除。可以用于leader或者锁的场景中。

提示

  1. 有序节点的创建:创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序。
  2. TTL不能用于临时节点。

Alt text (1)持久化目录节点, 客户端与Zookeeper断开连接后,该节点依旧存在。
(2)持久化顺序编号目录节点, 客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号。
(3)临时目录节点, 客户端与Zookeeper断开连接后,该节点被删除。
(4)临时顺序编号目录节点,客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。

5. 分别创建2个普通节点(永久节点+不带序号)

sh
[zk: localhost:2181(CONNECTED) 3] create /sanguo "diaochan"
Created /sanguo
[zk: localhost:2181(CONNECTED) 4] create /sanguo/shuguo 
"liubei"
Created /sanguo/shuguo

注意:创建节点时,要赋值

6. 获得节点的值

sh
[zk: localhost:2181(CONNECTED) 5] get -s /sanguo
diaochan
cZxid = 0x100000003
ctime = Wed Aug 29 00:03:23 CST 2018
mZxid = 0x100000003
mtime = Wed Aug 29 00:03:23 CST 2018
pZxid = 0x100000004
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 1
[zk: localhost:2181(CONNECTED) 6] get -s /sanguo/shuguo
liubei
cZxid = 0x100000004
ctime = Wed Aug 29 00:04:35 CST 2018
mZxid = 0x100000004
mtime = Wed Aug 29 00:04:35 CST 2018
pZxid = 0x100000004
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

7. 创建带序号的节点(永久节点+带序号)

  1. 先创建一个普通的根节点/sanguo/weiguo
sh
[zk: localhost:2181(CONNECTED) 1] create /sanguo/weiguo 
"caocao"
Created /sanguo/weiguo
  1. 创建带序号的节点
sh
[zk: localhost:2181(CONNECTED) 2] create -s 
/sanguo/weiguo/zhangliao "zhangliao"
Created /sanguo/weiguo/zhangliao0000000000
[zk: localhost:2181(CONNECTED) 3] create -s 
/sanguo/weiguo/zhangliao "zhangliao"
Created /sanguo/weiguo/zhangliao0000000001
[zk: localhost:2181(CONNECTED) 4] create -s 
/sanguo/weiguo/xuchu "xuchu"
Created /sanguo/weiguo/xuchu0000000002

如果原来没有序号节点,序号从0开始依次递增。如果原节点下已有2个节点,则再排序时从2开始,以此类推。

8. 创建短暂节点(短暂节点+不带序号or带序号)

  1. 创建短暂的不带序号的节点
sh
[zk: localhost:2181(CONNECTED) 7] create -e /sanguo/wuguo 
"zhouyu"
Created /sanguo/wuguo
  1. 创建短暂的带序号的节点
sh
[zk: localhost:2181(CONNECTED) 2] create -e -s /sanguo/wuguo 
"zhouyu"
Created /sanguo/wuguo0000000001
  1. 在当前客户端是能查看到的
sh
[zk: localhost:2181(CONNECTED) 3] ls /sanguo 
[wuguo, wuguo0000000001, shuguo]
  1. 退出当前客户端然后再重启客户端
sh
[zk: localhost:2181(CONNECTED) 12] quit
[jack@hadoop104 zookeeper-3.5.7]$ bin/zkCli.sh
  1. 再次查看根目录下短暂节点已经删除
sh
[zk: localhost:2181(CONNECTED) 0] ls /sanguo
[shuguo]

9. 节点删除与查看

  1. 删除节点
sh
[zk: localhost:2181(CONNECTED) 4] delete /sanguo/jin
  1. 递归删除指定目录下的所有节点
sh
[zk: localhost:2181(CONNECTED) 15] deleteall /sanguo/shuguo
  1. 查看节点状态
sh
[zk: localhost:2181(CONNECTED) 17] stat /sanguo
cZxid = 0x100000003
ctime = Wed Aug 29 00:03:23 CST 2018
mZxid = 0x100000011
mtime = Wed Aug 29 00:21:23 CST 2018
pZxid = 0x100000014
cversion = 9
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 1