Zookeeper 简单操作
1. 连接到zookeeper服务
[java2000_wl@localhost zookeeper-3]$ bin/zkCli.sh -server 127.0.0.1:2181
也可以连接远端的zk
zkCli.sh -server 10.2.1.88:2181
2. 使用ls命令查看当前zookeeper中包含的内容
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /
[zookeeper]
3. 创建新的znode,使用create命令
[zk:127.0.0.1:2181(CONNECTED) 2] create /zk testData
Created /zk
4. 获取节点中的值 get命令
[zk:127.0.0.1:2181(CONNECTED) 4] get /zk
testData
cZxid = 0x700000008
ctime = Sat Mar 0923:01:24 CST 2013
mZxid = 0x700000008
mtime = Sat Mar 0923:01:24 CST 2013
pZxid = 0x700000008
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
5. 使用set命令来对znode关联的字符串进行设置
[zk: 127.0.0.1:2181(CONNECTED) 5] set /zk mydata
cZxid = 0x700000008
ctime = Sat Mar 09 23:01:24 CST 2013
mZxid = 0x700000009
mtime = Sat Mar 09 23:06:03 CST 2013
pZxid = 0x700000008
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
6. 删除znode节点
[zk: 127.0.0.1:2181(CONNECTED) 7]delete /zk
[转载请注明作者和原文链接, 如有谬误, 欢迎在评论中指正. ]
ZooKeeper的数据结构, 与普通的文件系统极为类似. 见下图:
图片引用自developerworks
图中的每个节点称为一个znode. 每个znode由3部分组成:
- stat. 此为状态信息, 描述该znode的版本, 权限等信息.
- data. 与该znode关联的数据.
- children. 该znode下的子节点.
ZooKeeper命令
在深入znode的各个部分之前, 首先需要熟悉一些常用的ZooKeeper命令.
连接server
- bin/zkCli.sh -server 10.1.39.43:4180
列出指定node的子node
- [zk: 10.1.39.43:4180(CONNECTED) 9] ls /
- [hello, filesync, zookeeper, xing, server, group, log]
- [zk: 10.1.39.43:4180(CONNECTED) 10] ls /hello
- []
创建znode节点, 并指定关联数据
- create /hello world
创建节点/hello, 并将字符串"world"关联到该节点中.
获取znode的数据和状态信息
- [zk: 10.1.39.43:4180(CONNECTED) 7] get /hello
- world
- cZxid = 0x10000042c
- ctime = Fri May 17 17:57:33 CST 2013
- mZxid = 0x10000042c
- mtime = Fri May 17 17:57:33 CST 2013
- pZxid = 0x10000042c
- cversion = 0
- dataVersion = 0
- aclVersion = 0
- ephemeralOwner = 0x0
- dataLength = 5
- numChildren = 0
删除znode
- [zk: localhost:4180(CONNECTED) 13] delete /xing/item0000000001
- [zk: localhost:4180(CONNECTED) 14] delete /xing
- Node not empty: /xing
使用delete命令可以删除指定znode. 当该znode拥有子znode时, 必须先删除其所有子znode, 否则操作将失败. rmr命令可用于代替delete命令, rmr是一个递归删除命令, 如果发生指定节点拥有子节点时, rmr命令会首先删除子节点.
znode节点的状态信息
使用get命令获取指定节点的数据时, 同时也将返回该节点的状态信息, 称为Stat. 其包含如下字段:
- czxid. 节点创建时的zxid.
- mzxid. 节点最新一次更新发生时的zxid.
- ctime. 节点创建时的时间戳.
- mtime. 节点最新一次更新发生时的时间戳.
- dataVersion. 节点数据的更新次数.
- cversion. 其子节点的更新次数.
- aclVersion. 节点ACL(授权信息)的更新次数.
- ephemeralOwner. 如果该节点为ephemeral节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是ephemeral节点, ephemeralOwner值为0. 至于什么是ephemeral节点, 请看后面的讲述.
- dataLength. 节点数据的字节数.
- numChildren. 子节点个数.
zxid
znode节点的状态信息中包含czxid和mzxid, 那么什么是zxid呢?
ZooKeeper状态的每一次改变, 都对应着一个递增的Transaction id
, 该id称为zxid. 由于zxid的递增性质, 如果zxid1小于zxid2, 那么zxid1肯定先于zxid2发生. 创建任意节点, 或者更新任意节点的数据, 或者删除任意节点, 都会导致Zookeeper状态发生改变, 从而导致zxid的值增加.
session
在client和server通信之前, 首先需要建立连接, 该连接称为session. 连接建立后, 如果发生连接超时, 授权失败, 或者显式关闭连接, 连接便处于CLOSED状态, 此时session结束.
节点类型
讲述节点状态的ephemeralOwner字段时, 提到过有的节点是ephemeral节点, 而有的并不是. 那么节点都具有哪些类型呢? 每种类型的节点又具有哪些特点呢?persistent
. persistent节点不和特定的session绑定, 不会随着创建该节点的session的结束而消失, 而是一直存在, 除非该节点被显式删除.ephemeral
. ephemeral节点是临时性的, 如果创建该节点的session结束了, 该节点就会被自动删除. ephemeral节点不能拥有子节点. 虽然ephemeral节点与创建它的session绑定, 但只要该该节点没有被删除, 其他session就可以读写该节点中关联的数据. 使用-e参数指定创建ephemeral节点.
- [zk: localhost:4180(CONNECTED) 4] create -e /xing/ei world
- Created /xing/ei
sequence
. 严格的说, sequence并非节点类型中的一种. sequence节点既可以是ephemeral的, 也可以是persistent的. 创建sequence节点时, ZooKeeper server会在指定的节点名称后加上一个数字序列, 该数字序列是递增的. 因此可以多次创建相同的sequence节点, 而得到不同的节点. 使用-s参数指定创建sequence节点.
- [zk: localhost:4180(CONNECTED) 0] create -s /xing/item world
- Created /xing/item0000000001
- [zk: localhost:4180(CONNECTED) 1] create -s /xing/item world
- Created /xing/item0000000002
- [zk: localhost:4180(CONNECTED) 2] create -s /xing/item world
- Created /xing/item0000000003
- [zk: localhost:4180(CONNECTED) 3] create -s /xing/item world
- Created /xing/item0000000004
watch
watch的意思是监听感兴趣的事件. 在命令行中, 以下几个命令可以指定是否监听相应的事件.
ls命令. ls命令的第一个参数指定znode, 第二个参数如果为true, 则说明监听该znode的子节点的增减, 以及该znode本身的删除事件.
- [zk: localhost:4180(CONNECTED) 21] ls /xing true
- []
- [zk: localhost:4180(CONNECTED) 22] create /xing/item item000
- WATCHER::
- WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/xing
- Created /xing/item
get命令. get命令的第一个参数指定znode, 第二个参数如果为true, 则说明监听该znode的更新和删除事件.
- [zk: localhost:4180(CONNECTED) 39] get /xing true
- world
- cZxid = 0x100000066
- ctime = Fri May 17 22:30:01 CST 2013
- mZxid = 0x100000066
- mtime = Fri May 17 22:30:01 CST 2013
- pZxid = 0x100000066
- cversion = 0
- dataVersion = 0
- aclVersion = 0
- ephemeralOwner = 0x0
- dataLength = 5
- numChildren = 0
- [zk: localhost:4180(CONNECTED) 40] create /xing/item item000
- Created /xing/item
- [zk: localhost:4180(CONNECTED) 41] rmr /xing
- WATCHER::
- WatchedEvent state:SyncConnected type:NodeDeleted path:/xing
stat命令. stat命令用于获取znode的状态信息. 第一个参数指定znode, 如果第二个参数为true, 则监听该node的更新和删除事件.
Zookeeper 简单操作的更多相关文章
- zookeeper简单操作
接下来主要讲述了通过zookeeper服务器自带的zkCli.sh工具模拟客户端访问和操作zookeeper服务器(包括集群服务器). 当成功启动zookeeper服务后,切换到server1/bin ...
- 【ZooKeeper】ZooKeeper安装及简单操作
ZooKeeper介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一 ...
- ZooKeeper系列3:ZooKeeper命令、命令行工具及简单操作
问题导读1.ZooKeeper包含哪些常用命令?2.通过什么命令可以列出服务器 watch 的详细信息?3.ZooKeeper包含哪些操作?4.ZooKeeper如何创建zookeeper? 常用命令 ...
- zk 06之:ZooKeeper命令、命令行工具及简单操作
常用命令ZooKeeper 支持某些特定的四字命令字母与其的交互.它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息.用户在客户端可以通过 telnet 或 nc 向 ZooK ...
- ZooKeeper学习第三期---Zookeeper命令操作
一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息.用户在客户端可以通过telnet或n ...
- 【Zookeeper系列】Zookeeper命令操作(转)
原文链接:https://www.cnblogs.com/sunddenly/p/4031881.html 一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他 ...
- 5、Zookeeper命令操作
一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息.用户在客户端可以通过telnet或n ...
- [转]ZooKeeper学习第一期---Zookeeper简单介绍
ZooKeeper学习第一期---Zookeeper简单介绍 http://www.cnblogs.com/sunddenly/p/4033574.html 一.分布式协调技术 在给大家介绍ZooKe ...
- 【转】ZooKeeper学习第二期--Zookeeper命令操作
一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息.用户在客户端可以通过telnet或n ...
随机推荐
- 01matplotlib
一. 简介 1.概念 matplotlib:最流行的Python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建. 2.作用 1)能将数据进行可视化,更直观的呈现 2)使 ...
- Chrome浏览器 v68.0.3440.106 正式版怎么样?
谷歌浏览器Google Chrome稳定版迎来v68正式版第三个维护版本发布,详细版本号为v68.0.3440.106,上一个正式版v68.0.3440.84发布于8月1日,时隔8天Google又发布 ...
- Uva 11212 编辑书稿(迭代加深搜索)
题意: 给定N个数的序列, 希望将它排列成1~N, 可以用剪切.粘贴来完成任务, 每次可以剪切一段连续的自然段, 粘贴时按照顺序粘贴. #include <bits/stdc++.h> # ...
- 为什么在属性中设置private set
引言: 属性的引入来自C#的封装机制,也就是说对象的内部数据不应该由对象实例来直接访问,我们可以使用传统的Get和Set方法,来封装字段,C#为我们提供了语法糖,也就是属性.属性包括get和set,分 ...
- 如何将表的行数赋值给变量(MySQL)
delimiter $$ drop procedure if exists test_at $$ create definer=root@localhost procedure test_at() b ...
- linux 在当前目录下查找一个,或者多个文件
1.find ./ -name "y*" 查找以y开头的文件. find ./ -name "*sql*" 查找包含 sql 的文件名 2.查找redis su ...
- python002 Python3 基础语法
python002 Python3 基础语法 编码默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -* ...
- hdu3306:Another kind of Fibonacci
A(0)=A(1)=1,A(i)=X*A(i-1)+Y*A(i-2),求S(n)=A(0)^2+A(1)^2+A(2)^2+A(3)^2+……+A(n)^2. 这个矩阵有点毒.. #include&l ...
- 蓝桥杯 算法训练 最短路 [ 最短路 bellman ]
传送门 算法训练 最短路 时间限制:1.0s 内存限制:256.0MB 锦囊1 锦囊2 锦囊3 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证 ...
- cobbler ks文件解释--转载
cobbler中ks.cfg文件配置详解 许多系统管理员宁愿使用自动化的安装方法来安装红帽企业 Linux.为了满足这种需要,红帽创建了kickstart安装方法.使用kickstart ...