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的基本操作