1. 程式人生 > >java訪問zookeeper的增刪改查

java訪問zookeeper的增刪改查

package com.yc.hadoop.zookeeper;


import java.io.IOException;
import java.util.List;


import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;


public class ZookeeperUtil {
private static ZooKeeper zookeeper;

public ZookeeperUtil(Watcher watcher){
try{
zookeeper = new ZooKeeper("slave01:2181,slave02:2181,slave03:2181", 5000, watcher);
}catch(IOException e){
e.printStackTrace();
}
}

/*
* 得到znode節點
*/
public ZooKeeper getZK(){
return zookeeper;
}

/*建立znode節點

* @param path:幾點路徑
* @param data:節點資料
* @return true表示建立節點成功,false表示節點已存在
*/
public static boolean addZnode(String path, String data){
try {
if(zookeeper.exists(path, true) == null){
zookeeper.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
return true;
}
} catch (InterruptedException | KeeperException e) {
throw new RuntimeException("建立znode:" + path + "已經存在", e);
}
System.out.println("znode" + path + "已經存在");
return false;
}



/*修改znode節點
* @param path:節點路徑
* @param data:節點資料
* @return true表示修改節點成功,false表示節點不存在
*/
public static boolean updateZnode(String path, String data){
Stat stat = null;
try {
if((stat = zookeeper.exists(path, true)) != null){
zookeeper.setData(path, data.getBytes(), stat.getVersion());
System.out.println(stat + "55555555555555555");
return true;
}
} catch (InterruptedException | KeeperException e) {
throw new RuntimeException("修改znode:" + path + "出現問題!!!", e);
}
System.out.println("znode:" + path + "不存在");
return false;
}


/*刪除節點
* @param path:節點路徑
* @return true表示刪除節點成功,false表示刪除節點失敗
*/
public static boolean delZNode(String path){
try {
Stat stat = null;
if((stat = zookeeper.exists(path, true)) != null){
List<String> subPaths = zookeeper.getChildren(path, false);
if(subPaths.isEmpty()){
zookeeper.delete(path, stat.getVersion());
}else{
for (String subPath : subPaths){
delZNode(path + "/" + subPath);
}
}
System.out.println("777777777777777" + stat + "111111:" + stat.getVersion());
return true;
}
} catch (InterruptedException | KeeperException e) {
throw new RuntimeException("刪除znode" + path + "出現問題!!", e);
}
System.out.println("znode" + path + "不存在");
return false;
}


/*獲取znode節點資料
* @param path:節點路徑
* @return true表示查詢節點成功,false表示查詢節點失敗
*/
public static String getZNodeData(String path){
String data = null;
try {
Stat stat = null;
if((stat = zookeeper.exists(path, true)) != null){
data =  new String(zookeeper.getData(path, true, stat));
}else{
System.out.println("znode:" + path + "節點不存在");
}
} catch (InterruptedException | KeeperException e) {
throw new RuntimeException("獲取znode" + path + "節點資料出現問題!!!", e);
}
return data;

}

}