1、命令讲解
1、#####查看所有命令
[zk: localhost:2181(CONNECTED) 5] help
ZooKeeper -server host:port cmd args
connect host:port
get path [watch]
ls path [watch]
set path data [version]
rmr path
delquota [-n|-b] path
printwatches on|off
create [-s] [-e] path data acl
stat path [watch]
ls2 path [watch]
history
listquota path
setAcl path acl
getAcl path
sync path
redo cmdno
addauth scheme auth
delete path [version]
setquota -n|-b val path
2、#####部分常用命令讲解
创建节点:
create [-s] [-e] path data acl
-s:创建带顺序节点
-e:创建临时节点
示例:
[zk: localhost:2181(CONNECTED) 8] create /clr clr
Created /clr #####节点创建成功
[zk: localhost:2181(CONNECTED) 13] create /clr/dsg dsg
Created /clr/dsg #####子节点创建成功
[zk: localhost:2181(CONNECTED) 15] create /hadoop/zk zookeeper
Node does not exist: /hadoop/zk #####不支持递归创建节点
查看节点:
get path [watch]
示例:
[zk: localhost:2181(CONNECTED) 10] get /clr
clr #####节点内容
cZxid = 0x6 #####创建id
ctime = Fri Apr 12 10:34:55 CST 2019 #####修改时间
mZxid = 0x6 #####修改id。未修改时数值和cZxid一样,修改过后就不一样了
mtime = Fri Apr 12 10:34:55 CST 2019 #####修改时间
pZxid = 0x6 #####父节点id
cversion = 0 #####子节点更新的次数
dataVersion = 0 #####节点的版本,每次修改版本号加1
aclVersion = 0 #####acl版本
ephemeralOwner = 0x0 #####是否是临时节点,0x0表示临时节点,否则为节点的session id
dataLength = 3 #####节点长度
numChildren = 0 #####有多少个子节点
stat path [watch]
该命令和get命令唯一区别是,该命令无法获得节点的内容,该命令等介于ls2
修改节点:
set path data [version]
示例:
[zk: localhost:2181(CONNECTED) 11] set /clr clrdsg
cZxid = 0x6
ctime = Fri Apr 12 10:34:55 CST 2019
mZxid = 0x7
mtime = Fri Apr 12 10:58:49 CST 2019
pZxid = 0x6
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
修改节点:
delete path [version]
示例:
[zk: localhost:2181(CONNECTED) 16] delete /clr
Node not empty: /clr #####使用delete不能递归删除非空目录
rmr path
示例:
[zk: localhost:2181(CONNECTED) 18] rmr /clr
面试题:
zookeeper命令:ls和ls2有什么区别?
答:
[zk: localhost:2181(CONNECTED) 4] ls /clr
[] #####罗列出存在的子节点
[zk: localhost:2181(CONNECTED) 5] ls2 /clr
[] #####罗列出存在的子节点和本节点的状态信息
cZxid = 0xf
ctime = Fri Apr 12 11:59:09 CST 2019
mZxid = 0xf
mtime = Fri Apr 12 11:59:09 CST 2019
pZxid = 0xf
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
2、zookeeper数据模型
a)节点:
一说到节点,大家可能就想到了一台一台的服务器,但在zookeeper中,节点可以分为两类。
一类是集群中的机器,另一类则是指数据模型中的数据单元。
b)数据节点(znode):
数据模型:
唯一。带版本,每次修改版本号加1。
存储的数据量不宜太大。可以通过acl设置安全机制。
可以设置监听器watcher。
临时节点:
只存在当前session中,session消失则节点消失(不是立即消失,有一个时间差),不存在子节点。
永久节点:
只能人为地删除。
两种类型派生四种形式:
c)
临时节点:
create -e /eclr eclr
带顺序的临时节点:
create -e -s /esclr esclr
永久节点:
create /clr clr
带顺序的永久节点:
create -s /sclr sclr
测试顺序:
[zk: localhost:2181(CONNECTED) 9] create -s /sclr sclr
Created /sclr0000000002
[zk: localhost:2181(CONNECTED) 10] create -s /sclr sclr
Created /sclr0000000003
[zk: localhost:2181(CONNECTED) 11] create -s /sclr sclr
Created /sclr0000000004
[zk: localhost:2181(CONNECTED) 12] create -s /sclr sclr
Created /sclr0000000005
[zk: localhost:2181(CONNECTED) 13] create -s /sclr sclr
Created /sclr0000000006
[zk: localhost:2181(CONNECTED) 15] ls /
[clr, zookeeper, sclr0000000006, sclr0000000002, sclr0000000003, sclr0000000004, sclr0000000005]
3、监听器Watcher
属性:
一次性的触发器。
分类:
节点监控:关注节点的创建删除和数据的修改
NodeCreated、NodeDataChanged、NodeDeleted
子节点监控:只关注子节点的创建和删除,不关注子节点数据的修改
NodeChildrenChanged
节点监控:
stat/get path watch
示例:
[zk: localhost:2181(CONNECTED) 0] stat /clr watch
Node does not exist: /clr
[zk: localhost:2181(CONNECTED) 1] create /clr
clr
WATCHER::
WatchedEvent state:SyncConnected type:NodeCreated path:/clr
Created /clr
示例:
[zk: localhost:2181(CONNECTED) 3] stat /clr watch
clrdsg
[zk: localhost:2181(CONNECTED) 4] set /clr clrdsgy
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/clr
示例:
[zk: localhost:2181(CONNECTED) 5] stat /clr watch
clrdsgy
[zk: localhost:2181(CONNECTED) 6] delete /clr
WATCHER::
WatchedEvent state:SyncConnected type:NodeDeleted path:/clr
注:
get path watch无法监控到节点的创建
子节点监控:
ls/ls2 path watch
示例:
[zk: localhost:2181(CONNECTED) 4] ls /clr watch
[]
[zk: localhost:2181(CONNECTED) 5] create /clr/dsg dsg
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/clr
Created /clr/dsg
示例:
[zk: localhost:2181(CONNECTED) 9] ls /clr watch
[dsg]
[zk: localhost:2181(CONNECTED) 10] delete /clr/dsg
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/clr