1. 程式人生 > >Zookeeper的基本操作

Zookeeper的基本操作

ted lis OS strong creat java ffffff delete start

寫在前面的話:讀書破萬卷,編碼如有神

--------------------------------------------------------------------

參考內容:

  《私塾在線》,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的基本操作