ZooKeeper系列4:ZooKeeper API簡介及編程


問題導讀:
1.ZooKeeper API 共包含幾個包?
2.如何使用ZooKeeper API 創建zookeeper應用程序?

 




1)ZooKeeper API 簡介
 
ZooKeeper API 共包含 5 個包,分別為: org.apache.zookeeper , org.apache.zookeeper.data ,org.apache.zookeeper.server , org.apache.zookeeper.server.quorum 和org.apache.zookeeper.server.upgrade 。其中 org.apache.zookeeper 包含 ZooKeeper 類,它我們 編程時最常用的類文件。

 

這個類是 ZooKeeper  客戶端庫的主要類文件。如果要使用 ZooKeeper 服務,應用程序首先必須創建一個Zookeeper 實例,這時就需要使用此類。一旦客戶端和 ZooKeeper 服務建立起連接, ZooKeeper 系統將會分配給此連接回話一個 ID 值,並且客戶端將會周期地向服務器發送心跳來維持會話的連接。只要連接有效,客戶端就可以調用 ZooKeeper API 來做相應的處理。
它提供了表 1 所示幾類主要方法 , :
  表 1 : ZooKeeper API 描述
功能
描述
create
在本地目錄樹中創建一個節點
delete
刪除一個節點
exists
測試本地是否存在目標節點
get/set data
從目標節點上讀取 / 寫數據
get/set ACL
獲取 / 設置目標節點訪問控制列表信息
get children
檢索一個子節點上的列表
sync
等待要被傳送的數據

 

 
 
2)ZooKeeper API 的使用
 
這里,筆者通過一個例子來簡單介紹,如何使用 ZooKeeper API 編寫自己的應用程序,見代碼清單 1 :
代碼清單 1 : ZooKeeper API 的使用

 

  1. import java.io.IOException;
  2. import org.apache.zookeeper.CreateMode;
  3. import org.apache.zookeeper.KeeperException;
  4. import org.apache.zookeeper.Watcher;
  5. import org.apache.zookeeper.ZooDefs.Ids;
  6. import org.apache.zookeeper.ZooKeeper;
  7. public class demo {
  8.      // 會話超時時間,設置為與系統默認時間一致
  9.      private static final int SESSION_TIMEOUT=30000;
  10.     
  11.      // 創建 ZooKeeper 實例
  12.      ZooKeeper zk;
  13.     
  14.      // 創建 Watcher 實例
  15.      Watcher wh=new Watcher(){
  16.             public void process(org.apache.zookeeper.WatchedEvent event)
  17.             {
  18.                     System.out.println(event.toString());
  19.             }
  20.      };
  21.     
  22.      // 初始化 ZooKeeper 實例
  23.      private void createZKInstance() throws IOException
  24.      {             
  25.             zk=new ZooKeeper("localhost:2181",demo.SESSION_TIMEOUT,this.wh);
  26.            
  27.      }
  28.     
  29.      private void ZKOperations() throws IOException,InterruptedException,KeeperException
  30.      {
  31.             System.out.println("/n1. 創建 ZooKeeper 節點 (znode : zoo2, 數據: myData2 ,權限:OPEN_ACL_UNSAFE ,節點類型: Persistent");
  32.             zk.create("/zoo2","myData2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  33.            
  34.             System.out.println("/n2. 查看是否創建成功: ");
  35.             System.out.println(new String(zk.getData("/zoo2",false,null)));
  36.                            
  37.             System.out.println("/n3. 修改節點數據 ");
  38.             zk.setData("/zoo2", "shenlan211314".getBytes(), -1);
  39.            
  40.             System.out.println("/n4. 查看是否修改成功: ");
  41.             System.out.println(new String(zk.getData("/zoo2", false, null)));
  42.                            
  43.             System.out.println("/n5. 刪除節點 ");
  44.            zk.delete("/zoo2", -1);
  45.            
  46.             System.out.println("/n6. 查看節點是否被刪除: ");
  47.             System.out.println(" 節點狀態: ["+zk.exists("/zoo2", false)+"]");
  48.      }
  49.     
  50.      private void ZKClose() throws  InterruptedException
  51.      {
  52.             zk.close();
  53.      }
  54.     
  55.      public static void main(String[] args) throws IOException,InterruptedException,KeeperException {
  56.             demo dm=new demo();
  57.            dm.createZKInstance( );
  58.            dm.ZKOperations();
  59.             dm.ZKClose();
  60.     }
  61. }
復制代碼


 

此類包含兩個主要的 ZooKeeper 函數,分別為 createZKInstance ()和 ZKOperations ()。其中createZKInstance ()函數負責對 ZooKeeper 實例 zk 進行初始化。 ZooKeeper 類有兩個構造函數,我們這里使用“ ZooKeeper ( String connectString, , int sessionTimeout, , Watcher watcher )”對其進行初始化。因此,我們需要提供初始化所需的,連接字符串信息,會話超時時間,以及一個 watcher 實例。 17 行到 23 行代碼,是程序所構造的一個 watcher 實例,它能夠輸出所發生的事件。

 

ZKOperations ()函數是我們所定義的對節點的一系列操作。它包括:創建 ZooKeeper 節點( 33 行到 34 行代碼)、查看節點( 36 行到 37 行代碼)、修改節點數據( 39 行到 40 行代碼)、查看修改后節點數據( 42 行到43 行代碼)、刪除節點( 45 行到 46 行代碼)、查看節點是否存在( 48 行到 49 行代碼)。另外,需要注意的是:在創建節點的時候,需要提供節點的名稱、數據、權限以及節點類型。此外,使用 exists 函數時,如果節點不存在將返回一個 null 值。關於 ZooKeeper API 的更多詳細信息,讀者可以查看 ZooKeeper 的 API 文檔,如下所示:

 

  1. http://hadoop.apache.org/zookeeper/docs/r3.3.1/api/index.html
文章轉自:http://www.aboutyun.com/thread-9311-1-1.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM