zookeeper的API简单编程一

一.zookeeper的安装

从https://archive.apache.org/dist/zookeeper/下载源码 然后解压zookeeper-3.4.11

在目录/conf下复制zoo_sample.cfg 并重命名为zoo.cfg,并在其内部添加配置

server.1=lanc05:2888:3888
server.2=lanc06:2888:3888
server.3=lanc07:2888:3888

这样就配置好了,有多少zookeeper服务器,就添加多少台,每一台配置都是一样的

然后就是启动,在源码目录zookeeper-3.4.11/bin/下有两个脚本zkServer.sh和zkCli.sh

./zkServer.sh start //启动server
./zkServer.sh status //查看状态
./zkCli.sh  //启动客户端连接
服务器的状态有两个角色就是 leader和follower,leader只能有一个通过选举获得,
二.相关命令

使用./zkCli.sh 客户端连接服务器时可以使用简单的命令来操作

可以使用help来查看所有的命令如下图所示:


但常用的有ls、get、set、create、delete、rmr等,很多命令中都有watch(监听器),这个监听只能监听一次事件,下次再触发就不会再被监听到

ls /  //查看根目录下
create /xxx iii //在根目录下创建节点xxx,并设置数据为iii
get /xxx 获取xxx节点的数据和该节点的相关信息
set /xxx llll //将xxx节点的数据修改为llll
delete /xxx 删除节点xxx,该节点下没有子节点
rmr /xxx //如果该节点下含有子节点就得使用rmr
三.API的相关代码

以下是简单的客户端PAI的操作,包括,连接zk、创建znode、删除、更改、获取数据等以及监听器等

package bigdata.zk;


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;

public class simpleZKClient {

	//如果在zookeeper目录下conf下的的配置文件zoo.cfg内配置绑定的为主机名,则此处链接只能为主机名,
	//若配置为IP ,则智能写IP ,否则链接失败,因此只能和zoo.cfg配置保持一致
	private static final String connectString = "lanc05:2181,lanc06:2181,lanc07:2181";
	private static final int sessionTimeout =2000;
	
	ZooKeeper zKclient = null;
	
	@Before
	public void init() throws Exception{	
			zKclient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
			@Override
			public void process(WatchedEvent event) {//监听器只能生效一次
				// 收到事件通知后的回调函数 (也就是自己的事件处理逻辑)
				System.out.println( event.getType() +  "*******" + event.getPath());	
				//为了循环监听事件的操作,因此要再次获取节点,这样就实现了每次修改节点后,都会打印事件,上面一行
				try {
					zKclient.getChildren("/", true);
				} catch (Exception e) {
				}
			}
		});		
	}
		/**
		 * 数据的增删改查
		 * @throws InterruptedException 
		 * @throws KeeperException 
		 * */
		
	// create znode
	@Test
	public void testcreat() throws KeeperException, InterruptedException{
//		参数:
//		1:节点的路径,必须是根节点下的绝对路径
//		2:创建节点的数据,为byte[]类型
//		3.节点的权限,常用的为
//		4.节点的类型,总公司个类型		
		String nodecreate = zKclient.create("/myeclipse", "hello zookeper".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		//上传的数据可以是任何数据,单必须转换成byte
	}
	
	//判断zonde是否存在
	@Test
	public void testexist()throws Exception {
		//Stat 是返回的值,里面时所有的元数据的值,如果不存在则是null
		Stat exists = zKclient.exists("/myeclipse", false);
		System.out.println(exists == null ? "not exist " : "exit");
	}
	
	// get znode
	@Test
	public void getznode() throws Exception{
		
		List<String> children = zKclient.getChildren("/", true); //使用true 就是使用上面的监听器
		for(String child:children){
			System.out.println(child);			
		}
		Thread.sleep(Long.MAX_VALUE);//程序阻塞在这儿,等待事件
	}
	
	//获取zode的数据
	@Test
	//public void getdata() throws KeeperException, InterruptedException { //两个运行的结果一样
	public void getdata() throws Exception {
		byte[] data = zKclient.getData("/myeclipse", false, new Stat());//可以注册监听器,也可以不监听,最后一个参数为null就可以,这样写等同于null
		System.out.println(new String(data));
		
	}
	
	// delete zode的数据
		@Test
		//public void getdata() throws KeeperException, InterruptedException { //两个运行的结果一样
	public void deleteznode() throws Exception {
		//参数2是指定要删除的版本,-1为删除所有的版本
		zKclient.delete("/myeclipse", -1);
			
	}
		// delete zode的数据
	@Test
	public void setdata() throws Exception {
		//参数2是指定要删除的版本,-1为删除所有的版本
		zKclient.setData("/hello", "ccccccccc".getBytes(), -1);
		byte[] data = zKclient.getData("/hello", false, null);
		System.out.println(new String(data));			
	}						
}
转载声明:https://blog.csdn.net/hubbybob1/article/details/80657003


猜你喜欢

转载自blog.csdn.net/hubbybob1/article/details/80657003