大数据学习之zookeeper客户端的命令行及API操作18
九:客服端的命令行操作
(1)启动客户端
zkCli.sh
(1)查看帮助
help
(3)查看当前znode所包含的内容
ls /
(4)创建节点
create /hunterhenshuai 18
(5)创建短暂znode
create -e /itstar hunter
(6)创建带序号znode
create -s /bigdata hunter
(7)创建短暂带序号
create -e -s /bigdata hunter
(8)查看此节点的详细信息
ls2 /
(9)获得节点值监听
get /hunterhenshuai watch
(10)监听路径
ls / watch
(11)修改znode数据
set /hunterhenshuai iiiii
(12)删除节点
delete /hunterhenshuai
(13)递归删除
rmr /delireba
(14)查看节点状态信息
stat /
十:客户端API
1:zookeeper的基本客服端操作(增删改查)
package com.dawn.zk;
import java.io.IOException;
import java.util.List;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
import org.junit.Before;
import org.junit.Test;
/**
* @author Dawn
* @date 2019年5月17日08:48:03
* @version 1.0
* zookeeper的基本客服端操作
*/
public class ZKclient {
private String connecting="bigdata11:2181,bigdata12:2181,bigdata13:2181";
private int sessionTimeout=3000;//会话超时时间 3秒
ZooKeeper zkCli=null;
//初始化客户端
@Before
public void init() throws IOException {
zkCli=new ZooKeeper(connecting, sessionTimeout, new Watcher() {
//回调监听
@Override
public void process(WatchedEvent event) {
// TODO Auto-generated method stub
System.out.println(event.getPath()+"\t"+event.getState()+"\t"+event.getType());
List<String> children;
try {
children = zkCli.getChildren("/", true);
for(String v:children) {
System.out.println(v);
}
} catch (KeeperException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
//2:创建子节点 相当于命令 create /haha more smile
@Test
public void createNode() throws KeeperException, InterruptedException {
/**
* CreateMode.PERSISTENT 创建模式。永久性的创建(不加任何参数)
*
* create -e /itstar hunter 创建临时节点
* create -e -s /bigdata hunter )创建短暂带序号
*/
String path = zkCli.create("/xixi", "nb".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(path);
}
//3:获取子节点 相当于命令: ls /
@Test
public void getChild() throws KeeperException, InterruptedException {
List<String> children = zkCli.getChildren("/", true);
for(String v:children) {
System.out.println(v);
}
//长期监听
Thread.sleep(Long.MAX_VALUE);
}
//4:删除节点
@Test
public void rmChildDate() throws InterruptedException, KeeperException {
//删除具有给定路径的节点。如果存在这样的节点,并且给定的版本与节点的版本匹配(如果给定的版本为-1,
//则与任何节点的版本匹配),则调用将成功。
// byte[] data = zkCli.getData("/bbq", true, null);
// System.out.println(new String(data));
zkCli.delete("/haha", -1);
}
//5:修改数据
@Test
public void setDate() throws KeeperException, InterruptedException {
zkCli.setData("/dawn", "nb!".getBytes(), -1);
}
//6:判断节点是否存在
@Test
public void testExist() throws KeeperException, InterruptedException {
Stat rs = zkCli.exists("/haha", false);
System.out.println(rs==null ? "不存在" : "存在");
}
}
2:监听数据测试
package com.dawn.zk;
import java.io.IOException;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
/**
* @author Dawn
* @date 2019年5月17日09:21:09
* @version 1.0
* 监听数据测试,
* 尽管设置了Thread.sleep(Long.MAX_VALUE);。想进行永久监听。结果还是监听一次
*/
public class WatchDemo {
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
ZooKeeper zkCli = new ZooKeeper("bigdata11:2181,bigdata12:2181,bigdata13:2181", 3000, new Watcher() {
//监听回调
@Override
public void process(WatchedEvent event) {
// TODO Auto-generated method stub
}
});
byte[] data = zkCli.getData("/dawn", new Watcher() {
//监听的具体内容
@Override
public void process(WatchedEvent event) {
System.out.println("监听路径:"+event.getPath());
System.out.println("监听类型:"+event.getType());
System.out.println("数据被一个陌生人改变了!!");
}
}, null);
System.out.println(new String(data));
Thread.sleep(Long.MAX_VALUE);
}
}
3:监听目录
package com.dawn.zk;
import java.io.IOException;
import java.util.List;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
/**
* @author Dawn
* @date 2019年5月17日09:30:33
* @version 1.0
* 监听目录
* 尽管设置了Thread.sleep(Long.MAX_VALUE);。想进行永久监听。结果还是监听一次
*/
public class WatchDemo1 {
static List<String> children = null;
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
ZooKeeper zkCli = new ZooKeeper("bigdata11:2181,bigdata12:2181,bigdata13:2181", 3000, new Watcher() {
//监听回调
@Override
public void process(WatchedEvent event) {
System.out.println("正在监听中.....");
}
});
//监听目录
children = zkCli.getChildren("/", new Watcher() {
@Override
public void process(WatchedEvent event) {
System.out.println("监听路径为:" + event.getPath());
System.out.println("监听的类型为:" + event.getType());
System.out.println("数据被2货修改了!!!");
for(String c:children) {
System.out.println(c);
}
}
});
Thread.sleep(Long.MAX_VALUE);
}
}

浙公网安备 33010602011771号