【大数据】Zookeeper 客户端的命令行操作

Zookeeper 客户端的命令行操作

  • 1.显示某个路径下的所有节点:ls
  • 2.显示某个路径下的所有节点,以及当前节点的详细信息:ls2
  • 3.创建节点:create
  • 4.创建临时节点:create -e
  • 5.创建顺序(带编号)节点:create -s
  • 6.获取节点内容:get
  • 7.修改节点内容:set
  • 8.监听某个节点的值的变化:get -w
  • 9.监听某个节点的子节点变化:ls -w
  • 10.删除节点:delete
  • 11.查看节点状态:stat

我们已经搭建好了 Zookeeper 集群,接下来就是启动客户端,在里面输入增删改查相关的命令,然后发送给服务端执行,就类似于 Redis 一样。

# 输入 zkCli.sh 即可启动
# 会自动连接本地的 zookeeper 服务端
# 如果想连接其它节点的端,那么需要加上 -server 参数
# 比如 zkCli.sh -server ip:2181
[root@satori ~]# zkCli.sh

回车之后,客户端便可连接至 Leader 节点。

在这里插入图片描述
然后来看看命令都有哪些?

1.显示某个路径下的所有节点:ls

在这里插入图片描述

2.显示某个路径下的所有节点,以及当前节点的详细信息:ls2

但是该参数已经废弃,推荐使用 ls -s

在这里插入图片描述

不但显示根节点下面的所有节点,还显示了当前根节点的详细信息,就是绿色框框内的部分。那么它们都代表啥含义呢,来解释一下。

  • cZxid:创建节点时的事务 ID,每次向 Zookeeper 写入或者修改数据时都会产生一个事务 ID。它是 Zookeeper 中所有修改的次序,如果 zxid1 小于 zxid2,那么 zxid1 对应的修改操作在 zxid2 之前发生。
  • ctime:当前节点的创建时间,时间戳形式,单位毫秒。
  • mZxid:当前节点最后一次更新的事务 ID。
  • mtime:当前节点最后一次更新的时间,时间戳形式,单位毫秒。
  • pZxid:当前节点的子节点最后一次更新的事务 ID。
  • cversion:当前节点的子节点变化了多少次。
  • dataVersion:当前节点的数据变化了多少次。
  • aclVersion:当前节点访问控制列表多少次。
  • ephemeralOwner:如果节点是临时节点,则表示节点拥有的 Session ID,如果不是则为 0 0 0
  • dataLength:节点可以存储数据,所以它表示数据的长度。
  • numChildren:当前节点的子节点数量。

3.创建节点:create

比如 / 下面只有 Zookeeper 这一个节点,我们再创建一个新的。

在这里插入图片描述

因为节点是用来存储数据的,所以创建节点的时候也应该指定相应的值,正如 Redis 在 set 一个 key 的时候也要指定 value 一样。当然不指定也可以,只不过不指定的话相当于值为 null

通过 create 创建的节点默认是持久节点,那么什么是持久节点呢?首先 Zookeeper 的节点是有类型的,可以分为持久节点和临时节点:

  • 持久节点persistent):客户端和服务端断开连接之后,创建的节点不删除,也就意味着节点上的数据会保留。
  • 临时节点ephemeral):客户端和服务端断开连接之后,创建的节点会自动删除,数据不会被保留。

此外节点还可以带编号和不带编号,如果带编号的话,Zookeeper 会自动在节点的末尾加上一串数字。比如上面的 /ow,它默认是不带编号的,如果我们创建的是带编号的,那么节点创建之后就会变成 /ow001

编号会依次递增,因此带编号的节点也叫做 顺序节点

因此组合起来,Zookeeper 的节点类型总共有 4 4 4 种。其中使用 Zookeeper 作为分布式锁,便是基于 临时顺序节点 实现的。多个客户端同时往 Zookeeper 上面创建临时顺序节点,谁的编号最小,那么谁就先创建成功,我们就认为它拿到了分布式锁。

当客户端操作完共享数据需要释放锁的时候,只需要断开连接即可,这样该客户端创建的临时节点就会自动删除。一旦节点删除,那么它的下一个顺序节点就成了编号最小的节点,从而拿到分布式锁,因此这个机制就避免了因客户端挂掉而导致的死锁问题。

顺序节点 非常有用,特别是在分布式系统中,编号可以用于为所有事件进行全局排序,这样客户端通过顺序号就能推断事件的顺序。

使用 create 创建的节点默认是 持久非顺序 节点,那么其它类型的节点怎么创建呢?

4.创建临时节点:create -e

在这里插入图片描述

临时节点创建完毕,如果此时客户端断开连接,临时节点就会被删除。

在这里插入图片描述
我们重启客户端,再次查看,发现临时节点已经被删除了。

5.创建顺序(带编号)节点:create -s

在这里插入图片描述
创建的时候,自动在结尾加上编号。我这里之前创建过几个,现在编号是从 11 11 11 开始,总之顺序节点的编号是递增的,只会增大,不会减小。

所以 -e 表示临时节点,-s 表示顺序节点,那如果创建 临时顺序节点 呢?很简单,两个参数一块指定即可。

在这里插入图片描述

客户端退出之后,这个临时节点就会消失。

在这里插入图片描述
然后再次创建,发现编号从 14 14 14 开始,因为顺序节点的编号只会依次增加。

6.获取节点内容:get

在这里插入图片描述

如果加上 -s 参数,还可以获取节点的详细信息。

在这里插入图片描述
/china 节点存储的值是 beijing/china/henan 节点存储的值是 zhengzhou。所以 Zookeeper 的数据结构就类似一个树,树上的每一个节点都可以存储具体的值,并且节点之间具有父子关系。

7.修改节点内容:set

在这里插入图片描述
create 表示创建一个新的节点,每个节点会存储一个值,get 表示获取节点存储的值,set 表示修改节点存储的值。

需要注意的是,节点不能重复,所以我们不能这么做:

在这里插入图片描述
因为 /china/henan 这个节点已经存在了,我们不能重复 create,所以要修改节点的值的话,应该使用 set

8.监听某个节点的值的变化:get -w

假设现在有两个客户端同时连接至 Zookeeper 集群,客户端 A 执行 get -w /china 就表示监听 /china 这个节点。然后在客户端 B 上面对 /china 这个节点进行 set,那么 A 机器上就会收到提示,提示我们监听的节点被修改了。

satori 节点上执行 get -w /china,然后返回节点的值,看起来和 get /china 没有什么区别。

在这里插入图片描述

koishi 节点上执行 set /china 北京,将节点的值给改掉。

在这里插入图片描述

再来查看 satori 节点,发现有额外输出。

在这里插入图片描述
注意:监听是一次性的,如果再次 set 的话,那么 A 机器就不会再提示了,除非再次 watch。另外除了节点的值被修改之外会提示,当节点被删除时也会提示。

那么这背后的原理是怎么实现的呢?首先监听的时候,客户端会创建两个子线程,一个负责网络通信(connector),另一个负责监听(listener)。通过 connector 将注册的监听事件发送给服务端,服务端将注册的监听事件添加进注册监听器列表中。

当服务端监听到有数据变化,就会将这个消息发送给 listener 线程,然后 listener 线程将消息输出出来。

9.监听某个节点的子节点变化:ls -w

在这里插入图片描述
当新建一个子节点、或者删除一个子节点的时候,就会收到提示,但是修改不会,所以这里监听的变化指的是 子节点数量 的变化。

:这里只监听子节点的变化,子节点的子节点则不在范围之内。至于实现原理,和 get -w 相同,并且执行 ls -w 之后也只会监听一次。

10.删除节点:delete

在这里插入图片描述

注意:delete 只能删除叶子节点,而非叶子节点、比如这里的 /china 就无法删除。

在这里插入图片描述

在 3.5.0 之前删除非叶子节点使用的命令是 rmr,当然现在也可以使用,只不过废弃了。

在这里插入图片描述

11.查看节点状态:stat

在这里插入图片描述
这些字段的含义我们已经介绍过了,还可以通过 ls -s 或者 get -s 获取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/298161.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

程序员副业之无人直播助眠

介绍和概览 大家好,我是小黑,本文给大家介绍一个比较轻松简单的副业,无人直播助眠副业。 这个项目的核心就是通过直播一些助眠素材来赚钱。比如你可以放一些舒缓的雨声之类的,吸引观众进来。然后,咱们可以挂个小程序…

DS|哈希查找

题目一:DS哈希查找 -- 线性探测再散列 题目描述: 定义哈希函数为H(key) key%11,输入表长(大于、等于11)。输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字。 输入要求&#xf…

【C语言】Linux实现高并发处理的过程

一、实现高并发的几种策略 C语言本身并没有内建的多线程支持(新版C语言支持,但用得不多),但是在多数操作系统中,可以使用库来实现多线程编程。例如,在POSIX兼容系统上,可以使用 pthreads 库来创…

如何建立标准且有效的评审流程?6个重点

为了进一步提高项目质量,项目评审管理需要遵循一定的标准化流程。而建立标准且有效的评审流程,能够快速提高项目质量和效率,优化团队协作,降低风险,提高项目成功率。如果组织没有建立起标准化的评审流程,就…

JAVAEE初阶相关内容第二十弹--HTTP协议【续集】

写在前:在前一篇博客中我们初步掌握了HTTP(超文本传输协议)的相关知识【点击跳转】,认识了HYYP协议的工作过程,掌握抓包工具Fiddler的使用。在“方法”中重点需要理解“GET”方法与“POST”方法的格式与内容,并了解了请求“报头”…

万众期盼的剪辑新功能来了 会声会影2024旗舰版焕新登场

会声会影2024全新升级来袭,Corel公司这次为用户带来了多项功能更新,软件风格整体更偏向于“轻松剪辑,快速出片”。会声会影的本次更新还是很令人惊喜的,在各种人工智能算法的加持下,用户只需要进行几步简单地设置&…

sublim安装Autoprefixer插件

有时候在写css样式的时候,分不清哪些属性需要前缀,哪些不需要写前缀,sublime text这款编辑器下安装autoprefixer这款插件可以省去很多问题,写起来也很方便。1 确保系统已经安装node.js 可直接去官网上下载并安装,我的系…

网络实训模拟考察题目和答案(华为eNSP综合实验考试)

拓扑中四个交换机五个路由器,共九个设备 答案是对应的九个脚本(从设备命名到保存) 全部复制粘贴后,从PC1、PC2都是能Ping通服务器的(保及格),其他要求没检查 题目 VLAN信息 设备名称端口链路…

【设计模式之美】面向对象分析方法论与实现(一):需求分析方法论

文章目录 一. 需求举例二. 对案例进行需求分析1. 第一轮基础分析2. 第二轮分析优化3. 第三轮分析优化4. 第四轮分析优化5. 最终确定需求 三. 小结 本文主要描述: 面向对象的需求分析方法论 一. 需求举例 假设,你正在参与开发一个微服务。微服务通过 HTT…

软件测试|SQL JOIN的用法,你会了吗?

SQL JOIN 是在关系型数据库中常用的操作,用于将两个或多个表中的数据合并起来,以满足查询需求。本文将介绍 SQL JOIN 的基本概念、不同类型的 JOIN,以及使用示例。 SQL JOIN 的概念 在关系型数据库中,数据通常分布在多个表中&am…

【C语言】关闭socket需要包含的头文件

一、问题 linux系统&#xff0c;包含了头文件<sys/socket.h>&#xff0c; 警告 warning: implicit declaration of function ‘close’; did you mean ‘pclose’? [-Wimplicit-function-declaration] close(sockclient); ^~~~~ pclose 二、解决 在 Linux 系统下…

网络安全是什么?一文认识网络安全

一、网络安全 1.概念 网络安全从其本质上讲就是网络上的信息安全&#xff0c;指网络系统的硬件、软件及数据受到保护。不遭受破坏、更改、泄露&#xff0c;系统可靠正常地运行&#xff0c;网络服务不中断。 &#xff08;1&#xff09;基本特征 网络安全根据其本质的界定&#…

labview 与三菱FX 小型PLC通信(OPC)

NI OPC服务器与三菱FX3U PLC通讯方法 一、新建通道名称为&#xff1a;MIT 二、选择三菱FX系列 三、确认端口号相关的参数&#xff08;COM端&#xff1a;7.波特率&#xff1a;9600&#xff0c;数据位&#xff1a;7&#xff0c;校验&#xff1a;奇校验&#xff0c;停止位&#xf…

码农的周末日常---2024/1/6

上周总结 按照规划进行开发&#xff0c;处事不惊&#xff0c;稳稳前行 2024.1.6 天气晴 温度适宜 AM 睡觉前不建议做决定是真的&#xff0c;昨天想着睡到中午&#xff0c;今天九点多醒了&#xff0c;得了&#xff0c;不想睡了 日常三连吧&#xff0c;…

面试官:String为什么要设计为不可变类

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

@JsonFormat与@DateTimeFormat

JsonFormat注解很好的解决了后端传给前端的格式&#xff0c;我们通过使用 JsonFormat可以很好的解决&#xff1a;后台到前台时间格式保持一致的问题 其次&#xff0c;另一个问题是&#xff0c;我们在使用WEB服务的时&#xff0c;可 能会需要用到&#xff0c;传入时间给后台&am…

数据处理四 基于图像hash进行数据整理(删除重复图片、基于模版查找图片)

一、背景知识 1.1 什么是hash Hash&#xff0c;一般翻译做“散列”&#xff0c;也有直接音译为“哈希”的&#xff0c;基本原理就是把任意长度的输入&#xff0c;通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法&#xff0c;而原始数据映射后的二进制串就…

如何使用免费的ZeroSSL证书保护您的网站

使用 ZeroSSL 在您的站点上轻松实施 SSL。我们的指南涵盖了免费证书设置&#xff0c;确保安全和加密的用户连接。 如今&#xff0c;保护您的网站不仅是一种建议&#xff0c;而且是一种必需品。这就是SSL证书发挥作用的地方。它们对用户浏览器和网站之间传输的数据进行加密&…

Golang高质量编程与性能调优实战

1.1 简介 高质量&#xff1a;编写的代码能否达到正确可靠、简洁清晰的目标 各种边界条件是否考虑完备异常情况处理&#xff0c;稳定性保证易读易维护 编程原则 简单性 消除多余的重复性&#xff0c;以简单清晰的逻辑编写代码不理解的代码无法修复改进 可读性 代码是写给人看…

云原生学习系列之基础环境准备(单节点安装kubernetes)

一、环境要求 操作系统CentOS 7.x-86_x64 硬件配置&#xff1a;内存2GB或2G&#xff0c;CPU 2核或CPU 2核&#xff0c;需要在虚拟机中提前设置好&#xff0c;不然后续会报错 二、系统初始化 1、设置主机名 # 在master节点执行 hostnamectl set-hostname master01 2、配置主…