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 }

查看

 

posted @ 2018-02-25 08:25  火爆泡菜  阅读(392)  评论(0编辑  收藏  举报