java zookeeper 删除目录_Zookeeper通过java创建、查看、修改、删除znode

本章主要介绍zookeeper如何使用,其实通过zkCli.cmd我们是可以执行一些操作的:

声明:参考及转自《http://www.blogjava.net/BucketLi/archive/2010/12/21/341268.html》

通过zkCli.cmd来操作zookeeper:

进入D:\Work\zookeeper\zookeeper-3.4.8\bin的路径下,在cmd下输入命令:zkCli.sh –server 127.0.0.1:2182,之后通过help命令可以查看到zkClient工具提供了以下操作命令。

[zk: 127.0.0.1:2181(CONNECTED) 10] help

ZooKeeper-server host:port cmd args

stat path [watch]

set path data [version]

ls path [watch]

delquota [-n|-b] path

ls2 path [watch]

setAcl path acl

setquota-n|-b val path

history

redo cmdno

printwatches on|off

delete path [version]

sync path

listquota path

rmr path

get path [watch]

create [-s] [-e] path data acl

addauth scheme auth

quit

getAcl path

close

connect host:port

[zk:127.0.0.1:2181(CONNECTED) 11]

ls(查看当前节点数据),

ls2(查看当前节点数据并能看到更新次数等数据) ,

create(创建一个节点) ,

get(得到一个节点,包含数据和更新次数等数据),

set(修改节点)

delete(删除一个节点)

通过上述命令实践,发现zookeeper使用了一个类似文件系统的树结构,数据可以挂在某个节点上,可以对这个节点进行删改。另外我们还发现,当改动一个节点的时候,集群中活着的机器都会更新到一致的数据(这里都是通过zkCli.cmd连接到任意一个zkServer时,通过查看数据时发现)。

Zookeeper的数据存储结构

通过ls /{目录}命令查看那zk的数据存储结构,可以发现其数据结构有些像操作系统的文件结构,结构如下图所示:

97f36a7de1e5451c0e56e88aabcfcb03.png

(1)     每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识,如/SERVER2节点的标识就为/APP3/SERVER2

(2)     Znode可以有子znode,并且znode里可以存数据,但是EPHEMERAL类型的节点不能有子节点

(3)     Znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本。

(4)     znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和  服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了

(5)     znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2

(6)     znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等等。

通过java来实现zkCiient连接zkServer:

1)使用eclipse做为开发测试的ide,通过maven构建一个Java project

maven引入zookeeper的jar:

org.apache.zookeeper

zookeeper

3.4.8

2)编写测试代码:

1 packagecom.dx.zktest;2

3 importjava.util.List;4 importjava.io.IOException;5

6 importorg.apache.zookeeper.CreateMode;7 importorg.apache.zookeeper.KeeperException;8 importorg.apache.zookeeper.WatchedEvent;9 importorg.apache.zookeeper.Watcher;10 importorg.apache.zookeeper.ZooDefs.Ids;11 importorg.apache.zookeeper.ZooKeeper;12

13 /**

14 * Hello world!15 *16 */

17 public classZkClient {18 public static void main(String[] args) throwsIOException, KeeperException, InterruptedException {19 //创建一个Zookeeper实例,第一个参数为目标服务器地址和端口,第二个参数为Session超时时间,第三个为节点变化时的回调方法

20 ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 500000, newWatcher() {21 //监控所有被触发的事件

22 public voidprocess(WatchedEvent event) {23 //dosomething

24 System.out.println("watcher event fire...");25 }26 });27

28 //创建一个节点root,数据是mydata,不进行ACL权限控制,节点为永久性的(即客户端shutdown了也不会消失)

29 zk.create("/root", "mydata".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);30

31 //在root下面创建一个childone znode,数据为childone,不进行ACL权限控制,节点为永久性的

32 zk.create("/root/childone", "childone".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);33

34 //取得/root节点下的子节点名称,返回List

35 List rootItems = zk.getChildren("/root", true);36 System.out.println("print /root...");37 for(String item : rootItems) {38 System.out.println(item);39 }40

41 //取得/root/childone节点下的数据,返回byte[]

42 byte[] bytes = zk.getData("/root/childone", true, null);43 System.out.println(newString(bytes));44

45 //修改节点/root/childone下的数据,第三个参数为版本,如果是-1,那会无视被修改的数据版本,直接改掉

46 zk.setData("/root/childone", "childonemodify".getBytes(), -1);47

48 //删除/root/childone这个节点,第二个参数为版本,-1的话直接删除,无视版本

49 zk.delete("/root/childone", -1);50

51 //关闭session

52 zk.close();53 }54 }

使用zkCli.cmd监控服务器节点变化情况:

24187cd24826ed006bd999c658c3b0a3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值