当前位置: 首页 > article >正文

三、zookeeper 常用shell命令

作者:IvanCodes
日期:2025年5月28日
专栏:Zookeeper教程

ZooKeeper Shell (zkCli.sh) 是与ZooKeeper服务器交互的核心工具。本教程将详细介绍常用命令,并重点解析ZooKeeper数据节点 (ZNode) 的特性与分类

思维导图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一、连接 ZooKeeper 服务

使用 zkCli.sh 前,需连接到ZooKeeper服务器或集群。

命令:

zkCli.sh -server host1,host2,...

示例 (连接到您的 hadoop01,hadoop02,hadoop03 集群):

zkCli.sh -server hadoop01

成功连接后,提示符会显示连接状态。输入 quitclose 退出。

二、常用 Shell 命令详解

1. help
显示可用命令列表。

help

2. ls path [watch]
列出指定路径的直接子节点名称

ls /
ls /zookeeper watch

3. ls -s path [watch]
ls 类似,但除了列出子节点名称外,还会同时返回该路径节点自身stat 信息 (元数据)。

ls -s /
ls -s /zookeeper watch

对比 lsls -s: ls -s 在列出子节点的同时,省去了你再执行一次 stat /parent_path 的操作。

4. create [-s] [-e] path data [acl]
创建ZNode (不同类型如上文所述)。

create /my_persistent_node "Permanent Data"
create -e /my_ephemeral_node "Session Data"
create -s /my_sequential_node- "Sequential Data"
create -s -e /my_ephemeral_sequential_node- "Temp Seq Data"

5. get [-s] path [watch]
获取节点数据及元数据。

get -s /my_persistent_node

6. set path data [version]
更新节点数据。

set /my_persistent_node "Updated Data"
set /my_persistent_node "Versioned Update" 0 # 假设当前dataVersion为0

7. delete path [version]
删除无子节点的ZNode。

delete /my_ephemeral_node

8. deleteall path [ignoreErrors] (或 rmr path)
递归删除节点及其所有子节点。

# 较新版本
deleteall /my_persistent_node
# 较早版本
# rmr /my_persistent_node

9. stat path [watch]
仅获取节点元数据。

stat /

10. setAcl path acl
设置节点访问权限。

# 示例:将/secret节点设置为只有创建者有所有权限 (需要先进行认证)
# setAcl /secret auth:your_user:your_password_hashed:cdrwa (这是一个复杂场景,通常API操作)
setAcl /public_readable world:anyone:r # 任何人可读

11. getAcl path
获取节点访问权限。

getAcl /public_readable

12. history
列出当前会话中已执行的命令历史记录,最多显示最近10条。

history

13. redo cmdnum
重新执行历史记录中指定编号的命令。编号从 history 命令的输出中获取。

# 假设 history 输出的第3条命令是你想要的
redo 3

14. sync path
强制与Leader同步。

sync /

15. quit / close
退出客户端。

quit

练习题

  1. 连接到您的ZooKeeper集群,并使用 history 查看初始命令。
  2. 在根路径下创建一个名为 /app_root 的持久节点,数据为 “Application Root Node”。
  3. 使用 ls2 / 查看根路径子节点及根节点的stat信息,确认 /app_root 存在。
  4. /app_root 下创建一个名为 config- 的持久顺序节点,数据为 “Config v1”。记录下实际生成的节点名。
  5. 获取刚创建的持久顺序节点的数据和 dataVersion
  6. /app_root 下创建一个名为 live_instance 的临时节点,数据为 “Instance XYZ running”。
  7. 使用 stat /app_root/live_instance 查看其 ephemeralOwner 字段,理解其含义。
  8. 修改第4步创建的持久顺序节点的数据为 “Config v2”,并使用版本号进行乐观更新。
  9. 尝试使用 delete /app_root (不使用递归删除),观察结果。然后使用 deleteall (或 rmr) 正确删除 /app_root 及其所有子节点。
  10. 执行 history 命令,然后使用 redo 命令重新执行您创建 /app_root 的那条命令。

练习题答案

  1. 连接并查看history:
zkCli.sh -server hadoop01:2181,hadoop02:2181,hadoop03:2181
history

讲解: history 会显示连接命令本身或为空(如果这是第一个命令)。

  1. 创建 /app_root
create /app_root "Application Root Node"

讲解: 创建一个标准持久节点。

  1. 使用 ls2 / 查看:
ls2 /

讲解: ls2会列出 [zookeeper, app_root, ...] 等子节点,并紧随其后打印出 / 节点的stat信息(如 numChildren 会增加)。

  1. 创建持久顺序节点 config-
create -s /app_root/config- "Config v1"

讲解: ZooKeeper会自动生成类似 /app_root/config-0000000000 的节点。你需要记下这个实际名称。

  1. 获取持久顺序节点数据和版本: (假设上一步生成了 /app_root/config-0000000000)
get /app_root/config-0000000000

讲解: 记下 dataVersion 的值,初始应为0。

  1. 创建临时节点 live_instance
create -e /app_root/live_instance "Instance XYZ running"

讲解: -e 参数创建临时节点。

  1. 查看 live_instanceephemeralOwner
stat /app_root/live_instance

讲解: ephemeralOwner 字段会显示一个非零的会话ID,表示这个节点是临时的,并由该会话拥有。

  1. 修改持久顺序节点数据 (带版本): (假设 dataVersion 为0,节点名为 /app_root/config-0000000000)
set /app_root/config-0000000000 "Config v2" 0

讲解: 使用获取到的 dataVersion 进行条件更新。成功后,dataVersion 会变为1。

  1. 尝试删除及递归删除 /app_root
delete /app_root
# 这会失败,因为有子节点
# 使用 deleteall (或 rmr)
deleteall /app_root
# 或 rmr /app_root

讲解: 直接 delete 非空节点会失败。deleteallrmr 可以递归删除。

  1. 使用 historyredo
history
# 找到创建 /app_root "Application Root Node" 的命令编号,假设是 X
redo X

讲解: history 列出命令历史,redo 重新执行指定编号的命令。

http://www.lryc.cn/news/2395933.html

相关文章:

  • 分布式流处理与消息传递——Paxos Stream 算法详解
  • 智变与重构:AI 赋能基础教育教学的范式转型研究报告
  • 平衡三进制
  • 针对Python开发的工具推荐及分析,涵盖集成开发环境(IDE)、轻量级工具、在线开发平台、代码管理工具等)
  • 960g轻薄本,把科技塞进巧克力盒子
  • xcode 编译运行错误 Sandbox: rsync(29343) deny(1) file-write-create
  • C# 基于 Windows 系统与 Visual Studio 2017 的 Messenger 消息传递机制详解:发布-订阅模式实现
  • ComfyUI+阿里Wan2.1+内网穿透技术:本地AI视频生成系统搭建实战
  • 腾讯云开发者社区文章内容提取免费API接口教程
  • 利用海外代理IP,做Twitter2026年全球趋势数据分析
  • OpenLayers 图形交互编辑
  • pikachu靶场通关笔记06 XSS关卡02-反射型POST
  • SQLiteStudio - 免费开源、轻量高效,跨平台的 SQLite 数据库管理工具,代替 Navicat for SQLite
  • Prometheus + Grafana + Cadvisor:构建高效企业级服务监控体系
  • WEBSTORM前端 —— 第3章:移动 Web —— 第2节:空间转换、转化
  • Java研学-MongoDB(一)
  • 【AI面试秘籍】| 第25期:RAG的关键痛点及解决方案深度解析
  • OpenGL、GLUT、freeGLUT 与 GLFW 的区别
  • 服务器带宽线路的区别(GIA、CN2、BGP、CMI等)
  • ppt一键制作:ai自动生成PPT,便捷高效超级精美!
  • 多方法解决MNIST数字识别
  • Maven(黑马)
  • CppCon 2014 学习:ODB, Advanced Weapons and Tactics
  • 将手机网络经USB数据线和本地局域网共享给华为AP6050DN无线接入点
  • 【论文解读】Deformable DETR | Deformable Transformers for End-to-End Object Detection
  • android 图片背景毛玻璃效果实现
  • 机器学习----决策树
  • LabVIEW输血袋字符智能检测系统
  • 数据结构测试模拟题(3)
  • 理解频域滤波