zookeeper节点类型和java客户端创建zk节点

 

 

0 znode节点类型:

Znode有两种类型,短暂的(ephemeral)和持久的(persistent)

Znode的类型在创建时确定并且之后不能再修改

 

短暂znode的客户端会话结束时,zookeeper会将该短暂znode删除,短暂znode不可以有子节点
持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode时才会被删除
Znode有四种形式的目录节点,PERSISTENT、PERSISTENT_SEQUENTIAL、EPHEMERAL、EPHEMERAL_SEQUENTIAL

 

 

1 java代码创建上述4中znonde节点:

 

//持久的(以下代码只能执行一次) 只能生成节点/pp
//zooKeeper.create("/pp", " ".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//zooKeeper.close(); 关闭客户端后  /pp节点依旧在zk内
		

//持久有序的(在/pp/下面增加一个节点,可以重复执行,父节点必须以/结尾) 这样会在 /pp/0000000000   /pp/0000000001这种方式不断生成子节点
//zooKeeper.create("/pp/", " ".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
//zooKeeper.close(); 关闭客户端后  /pp节点依旧在zk内

查看有多少子节点:  zk.getChildren 
		
//临时的(临时的下面不能有孩子)  
zooKeeper.create("/ee", " ".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
//zooKeeper.close(); 关闭客户端后  /ee节点不会在zk内
		

//临时有序的
for(5)
//zooKeeper.create("/pp/", " ".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
thread.sleep(1000);
}
//zooKeeper.close(); 关闭客户端后  /ee节点和其下面的节点不会在zk内

 

 如下是创建zk各种类型节点代码:

public static void main(String[] args) throws Exception {
		
	 ZooKeeper zk = new ZooKeeper("hadoop3:2181", 
			 9999, new Watcher() { 
		            // 监控所有被触发的事件
		            public void process(WatchedEvent event) { 
		                System.out.println("已经触发了" + event.getType() + "事件!"); 
		            } 
		        }); 
	// System.out.println(zk);  执行main函数时 请打开  
	 //System.out.println(zk.getChildren("/", false));
	//zk.create("/zmtest2", "15".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
	 /*zk.create("/zmtest3", "15".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
	 Thread.sleep(10000); // 10S内 创建的临时节点/zmtest3 存在 10S后消失
	 zk.close();*/
	 
	 /*zk.create("/zmtest2", "15".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
	 zk.close();   执行两次下 会产生如下结果: 直接在根路径下加上流水号产生  [zmtest20000000008, zmtest20000000007, zookeeper]  这两个的值都是15
	 */
	 
	/* 在已经创建好永久节点/zmtest2后,循环执行如下方法2次,然后 ls /zmtest2 看到如下结果[0000000000, 0000000001] 这两个节点值也都是15
	 * zk.create("/zmtest2/", "15".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
	 zk.close(); */
	 
	//System.out.println(zk.getData("/zmtest",false,null)); // 以字节码打印
	}

 

 

maven工程见附件

 

 

1.1 上面ZooDefs下模式解释:
使用api 中预设的ACL
在创建znode时可以设置该znode的ACL列表。接口org.apache.zookeeper.ZooDefs.Ids中有一些已经设置好的权限常量,例如:
(1)、 OPEN_ACL_UNSAFE :完全开放。 事实上这里是采用了world验证模式,由于每个zk连接都有world验证模式,所以znode在设置了 OPEN_ACL_UNSAFE 时,是对所有的连接开放。
(2)、 CREATOR_ALL_ACL :给创建该znode连接所有权限。 事实上这里是采用了auth验证模式,使用sessionID做验证。所以设置了 CREATOR_ALL_ACL 时,创建该znode的连接可以对该znode做任何修改。
(3)、 READ_ACL_UNSAFE :所有的客户端都可读。 事实上这里是采用了world验证模式,由于每个zk连接都有world验证模式,所以znode在设置了READ_ACL_UNSAFE时,所有的连接都可以读该znode。

 

2 关于zookeeper 深入学习的连接: 推酷

http://www.tuicool.com/articles/77FJzuj

 

 

 

 

你可能感兴趣的:(zookeeper节点类型和java客户端创建zk节点)