ZooKeeper学习之路 (六)ZooKeeper API的简单使用(二)级联删除与创建
编程思维训练
1、级联查看某节点下所有节点及节点值
2、删除一个节点,不管有有没有任何子节点
3、级联创建任意节点
4、清空子节点
ZKTest.java
public class ZKTest {
private static final String CONNECT_STRING = "hadoop1,hadoop2,hadoop3";
private static final int SESSION_TIMEOUT = 5000;
private static ZooKeeper zk = null;
public static void main(String[] args) throws Exception {
zk = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, null);
//1、级联查看某节点下所有节点及节点值
/*Map<String, String> map = new HashMap<>();
Map<String, String> maps = ZKUtil.getChildNodeAndValue("/a",zk,map);
maps.forEach((key, value) -> System.out.println(key + "\t" + value));*/
//2、删除一个节点,不管有有没有任何子节点
/*boolean flag = ZKUtil.rmr("/x", zk);
if(flag) {
System.out.println("删除成功!");
}else {
System.out.println("删除失败");
}*/
//3、级联创建任意节点
/*boolean createZNode = ZKUtil.createZNode("/x/y/z/bb", "bb", zk);
if(createZNode) {
System.out.println("创建成功!");
}else {
System.out.println("创建失败");
}*/
//4、清空子节点
boolean clearChildNode = ZKUtil.clearChildNode("/x", zk);
if(clearChildNode) {
System.out.println("删除成功!");
}else {
System.out.println("删除失败");
}
zk.close();
}
}
ZKUtil.java
public class ZKUtil {
private ZooKeeper zk;
public ZKUtil() {}
public ZooKeeper getZk() {
return zk;
}
public void setZk(ZooKeeper zk) {
this.zk = zk;
}
/**
* 级联查看某节点下所有节点及节点值
* @throws Exception
* @throws KeeperException
*/
public static Map<String, String> getChildNodeAndValue(String path,ZooKeeper zk,Map<String, String> map) throws Exception{
//看看传入的节点是否存在
if (zk.exists(path, false) != null) {
//存在的话将该节点的数据存放到map中,key是绝对路径,value是存放的数据
map.put(path, new String(zk.getData(path, false, null)));
//查看该节点下是否还有子节点
List<String> list = zk.getChildren(path, false);
if (list.size() != 0) {
//遍历子节点,递归调用自身的方法
for (String child : list) {
getChildNodeAndValue( path + "/" + child,zk,map);
}
}
}
return map;
}
/**
* 删除一个节点,不管有有没有任何子节点
*/
public static boolean rmr(String path, ZooKeeper zk) throws Exception {
//看看传入的节点是否存在
if((zk.exists(path, false)) != null) {
//查看该节点下是否还有子节点
List<String> children = zk.getChildren(path, false);
//如果没有子节点,直接删除当前节点
if(children.size() == 0) {
zk.delete(path, -1);
}else {
//如果有子节点,则先遍历删除子节点
for(String child : children) {
rmr(path+"/"+child,zk);
}
//删除子节点之后再删除之前子节点的父节点
rmr(path,zk);
}
return true;
}else {
//如果传入的路径不存在直接返回不存在
System.out.println(path+" not exist");
return false;
}
}
/**
* 级联创建任意节点
* create znodePath data
* create /a/b/c/xx 'xx'
* @throws Exception
* @throws KeeperException
*/
public static boolean createZNode(String znodePath, String data, ZooKeeper zk) throws Exception{
//看看要创建的节点是否存在
if((zk.exists(znodePath, false)) != null) {
return false;
}else {
//获取父路径
String parentPath = znodePath.substring(0, znodePath.lastIndexOf("/"));
//如果父路径的长度大于0,则先创建父路径,再创建子路径
if(parentPath.length() > 0) {
createZNode(parentPath, data, zk);
zk.create(znodePath, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}else {
//如果父路径的长度=0,则直接创建子路径
zk.create(znodePath, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
return true;
}
}
/**
* 清空子节点
*/
public static boolean clearChildNode(String znodePath, ZooKeeper zk) throws Exception {
List<String> children = zk.getChildren(znodePath, false);
for (String child : children) {
String childNode = znodePath + "/" + child;
if (zk.getChildren(childNode, null).size() != 0) {
clearChildNode(childNode, zk);
}
zk.delete(childNode, -1);
}
return true;
}
}
ZooKeeper学习之路 (六)ZooKeeper API的简单使用(二)级联删除与创建的更多相关文章
- Zookeeper学习之路 (一)初识
本文引用自 http://www.cnblogs.com/sunddenly/p/4033574.html 引言 Hadoop 集群当中 N 多的配置信息如何做到全局一致并且单点修改迅速响应到整个集群 ...
- ZooKeeper学习之路 (八)ZooKeeper原理解析
ZooKeeper中的各种角色 ZooKeeper与客户端 每个Server在工作过程中有三种状态: LOOKING:当前Server不知道leader是谁,正在搜寻 LEADING:当前Server ...
- Zookeeper学习之路 (二)集群搭建
ZooKeeper 软件安装须知 鉴于 ZooKeeper 本身的特点,服务器集群的节点数推荐设置为奇数台.我这里我规划为三台, 为别为 hadoop1,hadoop2,hadoop3 ZooKeep ...
- ZooKeeper学习之路 (九)利用ZooKeeper搭建Hadoop的HA集群
Hadoop HA 原理概述 为什么会有 hadoop HA 机制呢? HA:High Available,高可用 在Hadoop 2.0之前,在HDFS 集群中NameNode 存在单点故障 (SP ...
- ZooKeeper学习之路 (七)ZooKeeper设计特点及典型应用场景
ZooKeeper 特点/设计目的 ZooKeeper 作为一个集群提供数据一致的协调服务,自然,最好的方式就是在整个集群中的 各服务节点进行数据的复制和同步. 数据复制的好处 1.容错:一个节点出错 ...
- Zookeeper学习之路 (三)shell操作
Zookeeper的shell操作 Zookeeper命令工具 在启动Zookeeper服务之后,输入以下命令,连接到Zookeeper服务: [hadoop@hadoop1 ~]$ zkCli.sh ...
- ZooKeeper学习之路(二)—— Zookeeper单机环境和集群环境搭建
一.单机环境搭建 1.1 下载 下载对应版本Zookeeper,这里我下载的版本3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # w ...
- ZooKeeper学习之路(一)—— ZooKeeper简介及核心概念
一.Zookeeper简介 Zookeeper是一个开源的分布式协调服务,目前由Apache进行维护.Zookeeper可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调/通知. ...
- Hadoop学习之路(9)ZooKeeper安装
文章目录 1.环境准备 1.1下载zooKeeper 1.3安装zooKeeper 1.4配置zooKeeper环境变量 1.5 修改zookeeper集群配置文件 1.6 创建myid文件 1.7 ...
随机推荐
- android 模拟器无法启动问题
很早之前就碰到过Android Studio模拟器无法启动的问题,今天终于尝试去解决了下,下面将我解决的方法记录下. 模拟器报错信息为: emulator: ERROR: x86 emulation ...
- java:模拟栈操作
import java.util.ArrayList; public class MyStack { private ArrayList<Object> arrayList; public ...
- 【C++并发实战】(一)并发基本概念
什么是并发 并发,最简单的理解就是,两个或者以上的活动同时进行.举个比较实际的例子,你可以手脚并用,两只手做不同的动作等等. 在计算机中的“并发”,是指一个系统可以同时执行多个独立的活动.在以前大多数 ...
- css实现修改默认滚动条样式
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head&g ...
- rocketmq 控制台 trackType NOT_CONSUME_YET
1. 问题描述 rocketmq消费者偶有没有收到消息,查看后台, 显示NOT_CONSUME_YET 2. 分析 mq控制台 显示有该条消息数据 只是状态为未消费 那么问题应该出在 消费者一方 诶? ...
- SJ定理——省选前的学习2
——博弈论?上SG定理!什么?不行?那就SJ定理吧. 原来还有这么个玩意... bzoj1022. 大意是Nim取石子游戏中取到最后一个石子就算输,即无法取了就获胜(原版是无法取了就输). 我们试图套 ...
- D3.js 入门教程
最近需要用到d3, 记录下d3的教程 网上搜了几个关于d3的教程 D3.js 入门教程 http://wiki.jikexueyuan.com/project/d3wiki/author.h ...
- RocketMQ读书笔记6——可靠性优先的使用场景
[顺序消息] 顺序消费是指消息的产生顺序和消费顺序相同. 比如订单的生成.付款.发货,这三个消息必须按顺序处理才可以. [顺序消息的分类] 全局顺序消息和部分顺序消息. 上面订单的例子,其实是部分顺序 ...
- Android GridView异步加载图片和加载大量图片时出现Out Of Memory问题
我们在使用GridView或者ListView时,通常会遇到两个棘手的问题: 1.每个Item获取的数据所用的时间太长会导致程序长时间黑屏,更甚会导致程序ANR,也就是Application No R ...
- RAP, 高效前后端联调框架,接口文档管理工具
RAP通过GUI工具帮助WEB工程师更高效的管理接口文档,同时通过分析接口结构自动生成Mock数据.校验真实接口的正确性,使接口文档成为开发流程中的强依赖.有了结构化的API数据,RAP可以做的更多, ...