大数据学习之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);
		
	}
	
		
}

  

猜你喜欢

转载自www.cnblogs.com/hidamowang/p/10882443.html
今日推荐