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 ...
随机推荐
- SQL 之获取DATE类的年月日语句
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE( ...
- swagger api文档添加jwt授权配置
最近写的swagger文档,要加jwt授权,所以几经google终于搞定了,简简单单几行配置如下: securityDefinitions: APIKey: type: apiKey name: Au ...
- Cheatsheet: 2017 06.01 ~ 06.30
.NET Porting a .NET Framework library to .NET Core Performance Improvements in .NET Core High-perfor ...
- 6、Object、String、StringBuffer
Java的Api以及Object类 API概念 * A:API(Application Programming Interface) * 应用程序编程接口 * B:Java API * 就是Java提 ...
- 解决ImmediateDeprecationError 用Python获取Yahoo数据
最近正在看用 python 进行数据处理的内容,很多教程都会用 pandas 去抓取金融数据.我也尝试跑教程上的示例代码以抓取数据. 本文着重介绍遇到的问题以及解决方法. 注:我使用的是 Python ...
- 鼠标事件-拖拽2(不能拖出指定对象的div)
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- C++学习笔记(3)----类模板的static成员
与任何其他类相同,类模板可以声明 static 成员: template <typename T> class Foo { public: static std::size_t count ...
- 如何一键部署项目&&代码自动更新
my-deploy : 由nodejs写的一个自动更新工具,理论支持所有语言(php.java.c#)的项目,支持所有git仓库(bitbucket.github等). Github 效果如何? 如果 ...
- Android链接蓝牙电子称
蓝牙一直是我内心屏蔽的一个模块哈哈哈哈!然而今天我不得不正视它了,我百度了看了好多因为需要设备匹配所以设备不在没办法测试,几天之后设备到了.因为没有接触过,看到返回的打印出来的菱形方块就以为是错了.于 ...
- Android解析WindowManagerService(三)Window的删除过程
前言 在本系列文章中,我提到过:Window的操作分为两大部分,一部分是WindowManager处理部分,另一部分是WMS处理部分,Window的删除过程也不例外,本篇文章会介绍Window的删除过 ...