![Hadoop大数据技术开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/392/27563392/b_27563392.jpg)
6.3 ZooKeeper命令行操作
ZooKeeper的命令行工具类似于Linux Shell。当ZooKeeper服务启动以后,可以在其中一台运行ZooKeeper服务的服务器中输入以下命令(需要进入ZooKeeper安装目录执行),启动一个客户端,连接到ZooKeeper集群:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P125_16262.jpg?sign=1739364597-tbc5p8oWn7xIYXx5u0zrsnA5RQ0aIr6U-0-051ecccb9b1078e664834159a5c8574e)
连接成功后,系统会输出ZooKeeper的运行环境及配置信息,并在屏幕输出“Welcome to ZooKeeper”等欢迎信息,之后就可以使用ZooKeeper命令行工具了。
以下是ZooKeeper命令行工具的一些简单操作示例。
1. 查询节点列表
使用ls命令,可以查看ZooKeeper相应路径下的所有znode节点。例如,列出ZooKeeper根目录下的所有znode节点:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P125_16263.jpg?sign=1739364597-8YjwNVv3eWfNApf8iuF2EwEwgG5CFdzl-0-fdfc5cefda47ae454398a3d0406c2047)
可以看到,当前根目录有一个名称为“zookeeper”的znode节点。
2. 创建节点
使用create命令,可以创建一个新的znode节点。例如,在根目录创建一个名为“zk”的znode以及在它上面存放的元数据字符串为“myData”,命令及输出信息如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P125_16264.jpg?sign=1739364597-x4mX6dgEiIGg2zPlMhjIp4ndV5DHfELQ-0-3ae85672629556e3a8955bcee561d495)
也可以在某个节点下创建子节点。例如,在/zk节点下创建新的节点node1,并关联其元数据为“childData”,命令及输出信息如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P125_16265.jpg?sign=1739364597-YHAOY5Ow8AfMKODM5slMaWg2QrOEgHcF-0-4786a97a53e987f83243b4b366eb6584)
注意
创建节点时必须指定节点中存放的元数据字符串,否则节点将创建失败。若执行创建命令没有返回任何信息,说明该命令执行失败。
3. 查看节点详细信息
使用get命令,可以查看某个znode的详细状态信息及其包含的元数据字符串。例如,查看znode节点/zk的详细信息,命令及输出信息如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P126_16385.jpg?sign=1739364597-YxALHNqLu4SQLyoaggvPezM99Mzkn2hk-0-4b4d6f312ff841d6fbb7dc578b4558bc)
上述返回结果中的状态属性解析如下:
ZooKeeper节点状态的每一次改变,都会产生一个唯一的zxid(用于递增的ZooKeeper事务id)形式的标记。如果zxid1小于zxid2,那么zxid1发生在zxid2之前。
ZooKeeper中每个znode的状态结构由以下字段组成。
- cZxid:节点被创建时产生的zxid值。
- ctime:节点被创建的时间。
- mZxid:节点最后被修改时产生的zxid值。节点每次被修改,mZxid的值都会以递增的形式改变到下一个值。
- pZxid:节点的子节点最后被修改时产生的zxid值。节点的子节点每次被修改,pZxid的值都会以递增的形式改变到下一个值。
- mtime:节点最后一次被修改的时间。
- dataVersion:节点被修改的版本号,即节点被修改的次数。节点创建时版本号为0,每被修改一次,版本号递增1。
- cversion:节点的所有子节点被修改的版本号,即节点的子节点被修改的次数。这里仅指所有子节点被创建和删除的次数,子节点的元数据被修改的次数不会记录在内。
- ephemeralOwner:如果节点为临时节点,则值代表节点拥有者的会话ID。如果节点不是临时节点,则值为0。
- dataLength:节点的元数据长度。
- numChildren:节点的子节点数量。
4. 修改节点
使用set命令,可以修改znode节点的元数据字符串。例如,将znode节点/zk所关联的字符串修改为“myDataUpdate”,命令及输出信息如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P127_16501.jpg?sign=1739364597-xREWTICHtD2dRGUzLwOpQOzz66ymX1hg-0-d743697d61e07bc6d1b7f714a30f8961)
5. 删除节点
使用delete命令,可以将某个znode节点删除。例如,删除上面创建的znode节点/zk,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P127_65053.jpg?sign=1739364597-sHOGkNaYUAOE9e9VqfuXjFV2cmaAXv0N-0-c36c8cfb3321b340e2d2e2e2ce2f3dbd)
注意
若被删除的节点有子节点,则需要先删除子节点。直接删除含有子节点的节点将删除失败。