目录

一、概述

二、基础命令使用


一、概述

前面一篇文章我们介绍了Zookeeper中节点Znode的数据结构以及特性,本篇我们将总结一些常用的Zookeeper操作数据节点的shell命令。

二、基础命令使用

zookeeper 命令用于在 zookeeper 服务上执行操作。首先执行命令,打开新的 session 会话,进入终端。下面我们介绍一些基本常用命令的使用。

进入bin目录启动zookeeper服务端和客户端:

[root@localhost bin]# ./zkCli.sh 

【a】ls 查看节点列表命令

ls 命令用于查看某个路径下目录列表。格式:

ls path   #path代表路径

如:查看 /路径下的所有节点:

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

可以看到,目前/根目录下只有一个节点:zookeeper节点。

【b】ls2 命令

ls2 命令用于查看某个路径下目录列表,它比 ls 命令列出更多的详细信息。格式:

ls2 path   #path代表路径

如查看 /根目录路径下节点详细信息:

[zk: localhost:2181(CONNECTED) 1] ls2 /
[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

【c】create创建节点命令

create 命令用于创建节点并赋值。格式:

create [-s] [-e] path data acl   #其中-s 为有序节点,-e 临时节点
  • [-s] [-e]:-s 和 -e 都是可选的,-s 代表顺序节点, -e 代表临时节点,注意其中 -s 和 -e 可以同时使用的,并且临时节点不能再创建子节点;
  • path:指定要创建节点的路径;
  • data:要在此节点存储的数据;
  • path:访问权限相关,默认是 world;

如创建持久化节点/animal并写入数据:

[zk: localhost:2181(CONNECTED) 2] create /animal 0
Created /animal
[zk: localhost:2181(CONNECTED) 3] ls2 /animal
[]
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0x6
mtime = Mon Dec 14 11:03:43 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0

如添加临时顺序节点,此时创建的节点名为指定节点名 + 自增序号:

[zk: localhost:2181(CONNECTED) 4] create -s -e /people "a"
Created /people0000000001
[zk: localhost:2181(CONNECTED) 5] create -s -e /people "b"
Created /people0000000002
[zk: localhost:2181(CONNECTED) 6] create -s -e /people "c"
Created /people0000000003
[zk: localhost:2181(CONNECTED) 7] create -s -e /people "d"
Created /people0000000004

可以看到, 此时创建的节点既是有序的,又是临时节点。注意:临时节点会在会话过期后被删除。

【d】set 更新节点命令

set 命令用于修改节点存储的数据。格式:

set path data [version]
  • path:节点路径。
  • data:需要存储的数据。
  • [version]:可选项,版本号(可用作乐观锁)。
[zk: localhost:2181(CONNECTED) 0] ls /
[animal, zookeeper]
[zk: localhost:2181(CONNECTED) 1] set /animal "a"
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0xe
mtime = Mon Dec 14 11:09:43 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0
[zk: localhost:2181(CONNECTED) 2] get /animal
a
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0xe
mtime = Mon Dec 14 11:09:43 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0

当然set更新命令也可以基于版本号进行更改,此时类似于乐观锁机制,当你传入的数据版本号(dataVersion) 和当前节点的数据版本号不符合时,zookeeper 会拒绝本次修改:

[zk: localhost:2181(CONNECTED) 2] get /animal
a
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0xe
mtime = Mon Dec 14 11:09:43 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 1    #当前数据节点的版本号为1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0
[zk: localhost:2181(CONNECTED) 3] set /animal "a" 0   #版本号0与当前版本号不一致,不允许修改
version No is not valid : /animal
[zk: localhost:2181(CONNECTED) 4] set /animal "a" 2
version No is not valid : /animal
[zk: localhost:2181(CONNECTED) 5] set /animal "a" 3
version No is not valid : /animal
[zk: localhost:2181(CONNECTED) 6] set /animal "aaaa" 1
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0x12
mtime = Mon Dec 14 11:11:52 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: localhost:2181(CONNECTED) 7] get /animal
aaaa
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0x12
mtime = Mon Dec 14 11:11:52 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

【e】get 查看节点命令

get 命令用于获取节点数据和状态信息。格式:

get path [watch]
  • path:代表路径。
  • [watch]:对节点进行事件监听。
[zk: localhost:2181(CONNECTED) 13] create /node "node"
Created /node
[zk: localhost:2181(CONNECTED) 14] get /node
node
cZxid = 0x58
ctime = Mon Dec 21 11:25:02 CST 2020
mZxid = 0x58
mtime = Mon Dec 21 11:25:02 CST 2020
pZxid = 0x58
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

节点各个属性如下表。其中一个重要的概念是 Zxid(ZooKeeper Transaction Id),ZooKeeper 节点的每一次更改都具有唯一的 Zxid,如果 Zxid1 小于 Zxid2,则Zxid1 的更改发生在 Zxid2 更改之前。

状态属性说明如下:

  • cZxid:数据节点创建时的事务 ID。
  • ctime:数据节点创建时的时间。
  • mZxid:数据节点最后一次更新时的事务 ID。
  • mtime:数据节点最后一次更新时的时间。
  • pZxid:数据节点的子节点最后一次被修改时的事务 ID。
  • cversion:子节点的更改次数。
  • dataVersion:节点数据的更改次数。
  • aclVersion:节点的 ACL 的更改次数。
  • ephemeralOwner:如果节点是临时节点,则表示创建该节点的会话的SessionID;如果节点是持久节点,则该属性值为 0。
  • dataLength:数据内容的长度
  • numChildren:数据节点当前的子节点个数。

【f】stat查看节点状态命令

stat 命令用于查看节点状态,它的返回值和 get 命令类似,但不会返回节点数据。格式:

stat path [watch]
  • path:代表路径。
  • [watch]:对节点进行事件监听。

如查看 /animal 节点状态:

[zk: localhost:2181(CONNECTED) 1] stat /animal
cZxid = 0x6
ctime = Mon Dec 14 11:03:43 CST 2020
mZxid = 0x14
mtime = Mon Dec 14 11:16:57 CST 2020
pZxid = 0x6
cversion = 0
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0

【g】delete 删除节点命令

delete 命令用于删除某节点,和更新节点数据一样,也可以传入版本号,当你传入的数据版本号 (dataVersion)和当前节点的数据版本号不符合时,zookeeper 不会执行删除操作。格式:

delete path [version]
  • path:节点路径。
  • [version]:可选项,版本号(同 set 命令)。

如删除 /animal 节点的子节点:

[zk: localhost:2181(CONNECTED) 2] ls /animal
[]
[zk: localhost:2181(CONNECTED) 4] create /animal/dog "dog"
Created /animal/dog
[zk: localhost:2181(CONNECTED) 5] create /animal/cat "cat"
Created /animal/cat
[zk: localhost:2181(CONNECTED) 6] ls /animal
[dog, cat]
[zk: localhost:2181(CONNECTED) 7] delete /animal/dog
[zk: localhost:2181(CONNECTED) 8] ls /animal
[cat]
[zk: localhost:2181(CONNECTED) 9] delete /animal/cat
[zk: localhost:2181(CONNECTED) 10] ls /animal
[]

注意:删除数据节点只能一级一级删除,如果需要递归删除,可以使用rmr命令,如下示例:

[zk: localhost:2181(CONNECTED) 5] create /node "node"
Created /node
[zk: localhost:2181(CONNECTED) 6] create /node/node11 "node11"
Created /node/node11
[zk: localhost:2181(CONNECTED) 7] create /node/node22 "node22"
Created /node/node22
[zk: localhost:2181(CONNECTED) 8] ls /node
[node11, node22]
[zk: localhost:2181(CONNECTED) 9] delete /node   #子节点不为空,不允许删除父节点
Node not empty: /node
[zk: localhost:2181(CONNECTED) 10] rmr /node   #递归删除/node以及子节点
[zk: localhost:2181(CONNECTED) 11] ls /node
Node does not exist: /node

【h】监听器get path [watch]

使用 get path [watch] 注册的监听器能够在节点内容发生改变的时候,向客户端发出通知。需要注意的是 zookeeper 的触发器是一次性的 (One-time trigger),即触发一次后就会立即失效。这里我们启动两个终端窗口:

终端一:查看节点的值并设置监听

[zk: localhost:2181(CONNECTED) 16] create /node1 "node1"
Created /node1
[zk: localhost:2181(CONNECTED) 17] get /node1 watch
node1
cZxid = 0x5b
ctime = Mon Dec 21 11:36:27 CST 2020
mZxid = 0x5b
mtime = Mon Dec 21 11:36:27 CST 2020
pZxid = 0x5b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

终端二:设置节点的值

[zk: localhost:2181(CONNECTED) 1] set /node1 "node11"

再次回到终端一,可以看到,监听反馈的事件信息:

WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/node1

可以看到,成功监听到NodeDataChanged 节点数据变更的事件。

【i】监听器stat path [watch]

使用 stat path [watch] 注册的监听器能够在节点状态发生改变的时候,向客户端发出通知。

终端一:查看节点的状态并设置监听

[zk: localhost:2181(CONNECTED) 18] stat /node1 watch
cZxid = 0x5b
ctime = Mon Dec 21 11:36:27 CST 2020
mZxid = 0x5c
mtime = Mon Dec 21 11:36:55 CST 2020
pZxid = 0x5b
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0

终端二:设置节点的值

[zk: localhost:2181(CONNECTED) 2] set /node1 "node111111"

再次回到终端一,可以看到,监听反馈的事件信息:

[zk: localhost:2181(CONNECTED) 19]
WATCHER::WatchedEvent state:SyncConnected type:NodeDataChanged path:/node1

【j】监听器ls\ls2 path [watch]

使用 ls path [watch] 或 ls2 path [watch] 注册的监听器能够监听该节点下所有子节点的增加和删除操作。

终端一:查看节点的状态并设置监听

[zk: localhost:2181(CONNECTED) 19] ls /node1 watch
[]

终端二:创建一个子节点

[zk: localhost:2181(CONNECTED) 3] create /node1/node11 "node11"
Created /node1/node11

再次回到终端一,可以看到,监听反馈的事件信息:

[zk: localhost:2181(CONNECTED) 20]
WATCHER::WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/node1

Zookeeper 常用Shell命令总结相关推荐

  1. hbase 数据插入指定rowkey_「HBase大爆炸」HBase之常用Shell命令

    HBase之常用Shell命令 1.进入 HBase客户端命令操作界面 2.查看帮助命令 3.查看当前数据库中有哪些表 4.创建一张表 创建user表,包含info.data两个列族 或者 5.添加数 ...

  2. 八、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(中)

    @Author : Runsen @Date:2020/9/11 文章是Runsen在Gitchat付费文章分享:Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程 顺便同步到C ...

  3. 七、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(上)

    @Author : Runsen @Date:2020/9/11 文章是Gitchat付费文章分享:Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程 顺便同步到CSDN中,这里 ...

  4. Hadoop之HDFS常用Shell命令

    Hadoop之HDFS常用Shell命令 启动Hadoop集群 sbin/start-dfs.shsbin/start-yarn.sh -help:输出这个命令参数 hadoop fs -help r ...

  5. Windows常用shell命令大全

    From: http://blog.csdn.net/yunzhongfeiniao/article/details/6564577 基于鼠标操作的后果就是OS界面外观发生改变,就得多花学习成本.更主 ...

  6. Linux基础(2)--Linux常用shell命令

    Linux常用shell命令 显示命令 查看当前工作路径 切换目录 清屏 显示和配置网络属性 新建文件夹 删除命令 压缩和解压命令 拷贝命令 帮助命令man 显示命令 – 命令:ls – 参数:a,l ...

  7. Linux 基础操作、常用shell命令、vi常用命令、man帮助手册

    Linux 基础操作.常用shell命令.vi常用命令.man帮助手册 一.简述 记录简单的Linux 基础操作.常用shell命令.vi编辑器常用命令.man帮助手册的使用. 二.Linux 基础操 ...

  8. hadoop fs –ls /hbase 无内容_Hadoop学习---HDFS的常用shell命令详解

    注意:访问hdfs系统的指令 hadoop dfs --- 已过时 hadoop fs -- 使用范围更大 hdfs dfs --范围相对较小hadoop fs 和 hdfs dfs之间没有太大的区别 ...

  9. ZooKeeper【基础 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)

    我使用的安装文件是 apache-zookeeper-3.6.0-bin.tar.gz ,以下内容均以此版本进行说明.这个是官网的3.6.0<CLI命令说明> 感兴趣的可以查看. 1.1 ...

  10. ZooKeeper【基础知识 02】zookeeper-3.6.0 常用Shell命令(节点增删改查+监听器+四字指令)

    我使用的安装文件是 apache-zookeeper-3.6.0-bin.tar.gz ,以下内容均以此版本进行说明.这个是官网的3.6.0<CLI命令说明> 感兴趣的可以查看. 1.1 ...

最新文章

  1. 漫画:什么是“低代码”开发平台?
  2. 中小型互联网公司微服务实践-经验和教训
  3. r语言逻辑向量相加_R语言基础教程——第3章:数据结构——向量
  4. Linux ping不通百度的解决方法
  5. Atitit.获取approot api 应用根路径 java c#.net php asp
  6. Linux Vim 光标错位,技术|Vim 复制粘帖格式错乱问题的解决办法
  7. [转帖]关于win7共享的问题和解答
  8. 【XMPP】XMPP协议之原理篇
  9. STM32 HAL库使用IIC
  10. Redmi 9将升级双频WiFi:定义2020入门机新标准
  11. 业务人员自助BI分析不够用,还要自助数据准备?
  12. zabbix 获取不到自定义脚本的值解决
  13. 论文中图片加方框 matlab代码
  14. ペイペイ mini program_小姐姐最爱的MINI,你了解吗?
  15. 盘点vivo手机的HiFi之路 极致的信仰
  16. 计算机任务栏隐藏恢复,电脑任务栏不见了怎么办?如何找回?
  17. python编写一个产品管理系统
  18. c语言模拟uart协议的收发
  19. 用python祝节日快乐_节日快乐祝福语有哪些?
  20. 怎么关闭windows中不在控制面板上的smartscreen筛选器

热门文章

  1. php5.1 0day,关于phpwind 5.01-5.3 0day的分析
  2. DataGame : AIIA 2019
  3. TensorFlow1.1搭建自编码网络
  4. JSON Web Token从入门到精通
  5. spite用法 java_despite 和in spite of 用法
  6. 341.扁平化嵌套列表迭代器
  7. 329.矩阵中的最长递增路径
  8. linux桌面系统开启wifi,8089B开启Wifi的方法(默认的红旗linux系统)
  9. pandaboard 安装_pandaboard ES学习之旅——3 Uboot源码下载与编译
  10. DL实战(1):tensorflow在mnist上实现siamese net