Zookeeper的基本操作
Posted Hello
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zookeeper的基本操作相关的知识,希望对你有一定的参考价值。
写在前面的话:读书破万卷,编码如有神
--------------------------------------------------------------------
参考内容:
《私塾在线》,cc老师
--------------------------------------------------------------------
主要内容包括:
- zkCli的操作
- 四字命令
- zookeeper的java客户端操作
--------------------------------------------------------------------
1、zkCli的操作
进入zookeeper的安装目录下的bin目录
通过zkCli.sh进行连接
通过help查看有什么命令可以使用
(1)stat path 查看当前path结点的消息
(2)get path 、set path是给当前path节点设置值和获取值
(3)ls path 是列出当前路径有哪些节点
(4)create [-s] [-e] path data acl
通过create可以在path路径上创建一个节点
参数
[-s]: 可选,代表一个序列号
[-e]: 可选,代表一个临时节点
path: 代表节点创建的路径
data: 代表该节点的值
acl: 代表access control list
(5)delete path [version]
通过delete可以删除path路径上的节点(如果有子节点,则不能删除)
(6)rmr path
通过rmr可以删除path路径上的节点(包括子节点)
---------------------------------------------------------------------------
2、四字命令
zookeeper支持某些特定的四字命令,他们大多是用来查询zookeeper服务的当前状态及相关信息的.
(1)conf : 输出相关服务配置的详细信息
(2)cons : 列出所有连接到服务器的客户端的完全的连接 、会话的详细信息。包括"接收/发送"的包数量、会话Id、操作延迟、最后的操作执行等信息
(3)dump : 列出未经处理的会话和临时节点
(4)envi : 输出关于服务环境的详细信息
(5)reqs : 列出未经处理的请求
(6)ruok : 测试服务是否处于正确状态。如果确实如此,那么服务返回"imok",否则不做任何相应
(7)stat : 输出关于性能和连接的客户端的列表
(8)wchs : 列出服务器watch的详细信息
(9)wchc : 通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表
(10)wchp : 通过路径列出服务器watch的详细信息。它输出一个与session相关的路径
---------------------------------------------------------------------------
3、zookeeper的java客户端操作
创建一个maven项目,在pom.xml文件中添加zookeeper相关的依赖包:
1 <dependency> 2 <groupId>com.101tec</groupId> 3 <artifactId>zkclient</artifactId> 4 <version>0.10</version> 5 </dependency> 6 <dependency> 7 <groupId>org.apache.zookeeper</groupId> 8 <artifactId>zookeeper</artifactId> 9 <version>3.4.9</version> 10 </dependency>
zookeeperTest.java
1 import org.apache.zookeeper.CreateMode; 2 import org.apache.zookeeper.KeeperException; 3 import org.apache.zookeeper.ZooDefs; 4 import org.apache.zookeeper.ZooKeeper; 5 import org.apache.zookeeper.data.Stat; 6 7 import java.io.IOException; 8 9 10 public class zookeeperTest { 11 /** 12 * 连接到zookeeper服务,并且返回一个实例 13 * @param zk zookeeper引用 14 * @param hostPort ip地址 15 * @param sessionTime 超时时间 16 * @return zookeeper的实例 17 */ 18 private ZooKeeper startZK(ZooKeeper zk,String hostPort,int sessionTime){ 19 try { 20 zk = new ZooKeeper(hostPort,sessionTime,null); 21 } catch (IOException e) { 22 e.printStackTrace(); 23 } 24 return zk; 25 } 26 27 /** 28 * 关闭zookeeper的连接 29 * @param zk zookeeper实例 30 */ 31 private void stopZK(ZooKeeper zk){ 32 try { 33 zk.close(); 34 } catch (InterruptedException e) { 35 e.printStackTrace(); 36 } 37 } 38 39 /** 40 * 在zookeeper上创建一个节点 41 * @param zk zookeeper实例 42 * @param nodePath 要创建的节点path 43 * @param nodeData 要创建的节点data 44 * @param cm 创建节点的Mode 45 */ 46 private void createNode(ZooKeeper zk, String nodePath, String nodeData, CreateMode cm){ 47 try { 48 zk.create(nodePath,nodeData.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,cm); 49 } catch (KeeperException e) { 50 e.printStackTrace(); 51 } catch (InterruptedException e) { 52 e.printStackTrace(); 53 } 54 } 55 56 /** 57 * 获取zookeeper的path节点的值 58 * @param zk zookeeper实例 59 * @param nodePath 节点的值 60 * @return zookeeper的path节点的值 61 */ 62 private String getNode(ZooKeeper zk,String nodePath){ 63 byte[] rets = null; 64 try { 65 rets = zk.getData(nodePath, false, new Stat()); 66 } catch (KeeperException e) { 67 e.printStackTrace(); 68 } catch (InterruptedException e) { 69 e.printStackTrace(); 70 } 71 return new String(rets); 72 } 73 74 public static void main(String[] args) { 75 zookeeperTest zkt = new zookeeperTest(); 76 77 //zookeeper实例的引用 78 ZooKeeper zooKeeper = null; 79 80 //创建一个zookeeper实例 81 zooKeeper = zkt.startZK(zooKeeper, "127.0.0.1:2181", 20000); 82 83 //创建一个节点 84 zkt.createNode(zooKeeper,"/zkTest","zkDatas",CreateMode.PERSISTENT); 85 86 //获取指定路径上的节点的值 87 String result = zkt.getNode(zooKeeper,"/zkTest"); 88 89 System.out.println("result = " + result); 90 91 zkt.stopZK(zooKeeper); 92 } 93 }
查看
以上是关于Zookeeper的基本操作的主要内容,如果未能解决你的问题,请参考以下文章