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的数据存储结构,可以发现其数据结构有些像操作系统的文件结构,结构如下图所示:

(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:

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.8</version>
        </dependency>

2)编写测试代码:

 1 package com.dx.zktest;
 2
 3 import java.util.List;
 4 import java.io.IOException;
 5
 6 import org.apache.zookeeper.CreateMode;
 7 import org.apache.zookeeper.KeeperException;
 8 import org.apache.zookeeper.WatchedEvent;
 9 import org.apache.zookeeper.Watcher;
10 import org.apache.zookeeper.ZooDefs.Ids;
11 import org.apache.zookeeper.ZooKeeper;
12
13 /**
14  * Hello world!
15  *
16  */
17 public class ZkClient {
18     public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
19         // 创建一个Zookeeper实例,第一个参数为目标服务器地址和端口,第二个参数为Session超时时间,第三个为节点变化时的回调方法
20         ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 500000, new Watcher() {
21             // 监控所有被触发的事件
22             public void process(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<String>
35         List<String> 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(new String(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监控服务器节点变化情况:

时间: 2024-10-15 16:12:34

Zookeeper通过java创建、查看、修改、删除znode的相关文章

Oracle DBlink的创建-查看与删除

DBlink常用于在两个Oracle数据库之间相互连接,如手工同步数据时,DBLink是最方便快捷的手段之一. 1.创建DBLink语法:create public database link <DBLink名称> connect to <被连接库的用户名> identified by <被连接库的密码> using '<Oracle客户端工具建立的指向被连接库服务名,即TNSNAME中配置的本地服务名>';public指明所有用户均可使用这个DBlink,

python-文件创建和修改删除

#coding=utf-8 '''1.批量创建文件-->createfiles(filenames)    2.统计文件数量,格式,内容大小-->printfiles(filenames)    3.删除文件    4.打印每个盘目录下文件名--> ''' import os import sys #文件夹地址 filenames="D:\\test\\" #批量创建文件 def createfiles(filenames):     i=0     print(&q

对存储过程和函数的调用查看修改删除

java dom4j创建 ,修改 ,删除 xml文件内容

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentExcep

MySQL:创建、修改和删除表

其实对很多人来说对于SQL语句已经忘了很多,或者说是不懂很多,因为有数据库图形操作软件,方便了大家,但是我们不能忘记最根本的东西,特别是一些细节上的东西,可能你用惯了Hibernate,不用写SQL语句,但是不是任何项目都要用到大框架的,如果不用,那你是不是就不会操作数据库了呢,所以我们最好还是熟悉一点好,对我们以后找工作和工作都有帮助. 在说创建.修改和删除表前,我们还是要进行一个操作的简单说明: 1.登陆数据库系统 在命令行中登陆MySQL数据库管理系统,输入一下内容: mysql -h l

MySQL 入门(五)—— 表的创建、修改和删除

表是DB存储数据的基本单位,一个表包含若干个字段或记录.表的操作包括创建.修改和删除. 1.创建表 创建表即在已存在的数据库中创立新表.在使用USE语句选择具体数据库后,可以使用它SQL语句创建表 其中,属性名指表中字段的名称,数据类型即对应字段的数据类型,完整性约束条件指对应字段的某些特殊约束条件. MySQL中基本的完整性约束条件有 1.1 设置表的主键 主键是表的一个特殊字段,该字段能唯一地表示该表中的每条信息,即主键如同表中记录的身份证.主键的主要目的在于帮助MySQL以最快的速度查找表

学习linux-基础四(用户创建、修改、删除)

用户的创建.修改.删除 一.用户创建 useradd usermod userdel useradd:创建用户:create a new user or update default new user information useradd [options]- LOGIN -u,–uid:指定新用户的UID -o,配合-u使用,不检测用户UID的唯一性(可创建2个相同UID的帐号) -g,–gid:指定新建用户的GID -G,–group:指定新建用户的附加组,若指定多个组可用,分割 -d,–

SQL Server索引进阶:第十二级,创建,修改,删除

在第十级中我们看到了索引的内部结构,在第十一级中我们看到了平衡树结构潜在的负面影响:索引碎片.有了索引内部结构的知识,我们可以检查在执行数据定义语句和数据操作语句的时候,都发生了什么.在本级中我们介绍数据定义语言的三个动词:create,alter和drop.在下一级中,我们介绍数据操作语言的三个动词:insert,update,delete. 创建,修改,删除索引都是索引维护的范围.create,alter,drop作为维护索引的动词,只是因为SQL Server团队认为队友对象的维护应该使用

创建、修改及删除数据库

这里是用phpstudy编写的 1.用创建数据库(数据库名称自定义)注意:库名要小写,命令用大写. 2.查看数据库 3.查看某个已创建的数据库信息 4.修改数据库编码(gbk——utf8) 5.查看修改数据库编码后的数据库信息 6.删除数据库 原文地址:https://www.cnblogs.com/Wsy5-5/p/11723310.html