编程思维训练

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的简单使用(二)级联删除与创建的更多相关文章

  1. Zookeeper学习之路 (一)初识

    本文引用自 http://www.cnblogs.com/sunddenly/p/4033574.html 引言 Hadoop 集群当中 N 多的配置信息如何做到全局一致并且单点修改迅速响应到整个集群 ...

  2. ZooKeeper学习之路 (八)ZooKeeper原理解析

    ZooKeeper中的各种角色 ZooKeeper与客户端 每个Server在工作过程中有三种状态: LOOKING:当前Server不知道leader是谁,正在搜寻 LEADING:当前Server ...

  3. Zookeeper学习之路 (二)集群搭建

    ZooKeeper 软件安装须知 鉴于 ZooKeeper 本身的特点,服务器集群的节点数推荐设置为奇数台.我这里我规划为三台, 为别为 hadoop1,hadoop2,hadoop3 ZooKeep ...

  4. ZooKeeper学习之路 (九)利用ZooKeeper搭建Hadoop的HA集群

    Hadoop HA 原理概述 为什么会有 hadoop HA 机制呢? HA:High Available,高可用 在Hadoop 2.0之前,在HDFS 集群中NameNode 存在单点故障 (SP ...

  5. ZooKeeper学习之路 (七)ZooKeeper设计特点及典型应用场景

    ZooKeeper 特点/设计目的 ZooKeeper 作为一个集群提供数据一致的协调服务,自然,最好的方式就是在整个集群中的 各服务节点进行数据的复制和同步. 数据复制的好处 1.容错:一个节点出错 ...

  6. Zookeeper学习之路 (三)shell操作

    Zookeeper的shell操作 Zookeeper命令工具 在启动Zookeeper服务之后,输入以下命令,连接到Zookeeper服务: [hadoop@hadoop1 ~]$ zkCli.sh ...

  7. ZooKeeper学习之路(二)—— Zookeeper单机环境和集群环境搭建

    一.单机环境搭建 1.1 下载 下载对应版本Zookeeper,这里我下载的版本3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # w ...

  8. ZooKeeper学习之路(一)—— ZooKeeper简介及核心概念

    一.Zookeeper简介 Zookeeper是一个开源的分布式协调服务,目前由Apache进行维护.Zookeeper可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调/通知. ...

  9. Hadoop学习之路(9)ZooKeeper安装

    文章目录 1.环境准备 1.1下载zooKeeper 1.3安装zooKeeper 1.4配置zooKeeper环境变量 1.5 修改zookeeper集群配置文件 1.6 创建myid文件 1.7 ...

随机推荐

  1. C#操作XMl文件(2):使用XmlReader和XmlWriter实现读取和写入

    这次使用操作Xml较为常用的方法:使用XMlreader和Xmlwriter 1:读取xml文件的数学和元素 XmlReaderSettings settings = new XmlReaderSet ...

  2. FisherYates费雪耶兹随机置乱算法

    public class FisherYates { public static void main(String[] args) { int[] arr = new int[10]; // 初始有序 ...

  3. 使用jQuery的validation插件实现表单校验

    前端表单校验: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  4. JSON转换和序列化的区别

    序列化是将对象状态转换为可保持或可传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据.将对象的状态信息转换为可以存储或传输的窗体的过程. 在序列 ...

  5. 【element+vue后台页面】Vue-element-admin

    https://segmentfault.com/a/1190000009275424

  6. Benefits of encapsulation

    ①:通过方法来控制成员变量的操作,提高了代码的安全性. ②:把代码用方法进行封装,提高了代码的复用性.

  7. 移动 App 接入 QQ 登录/分享 图文教程

    移动 App 接入 QQ 登录/分享 图文教程 这里先要提两个平台,腾讯开放平台和 QQ 互联平台: (一)腾讯开放平台 官网地址:https://open.tencent.com/ 介绍:腾讯开放平 ...

  8. 我的CSDN博客&Github地址

    我的 CSDN 博客地址: https://blog.csdn.net/qq_40147863 Github 地址: https://github.com/xpwi

  9. Angular1.x 基础总结

    官方文档:Guide to AngularJS Documentation   w3shools    angularjs教程  wiki   <AngularJS权威教程> Introd ...

  10. WebAPI应用问题整理

    这两天在实现一个WebAPI的服务过程中遇到了下面的一些问题 1, 一个Controller中添加多个Action 基于模板创建WebAPI项目后,项目中会自动生成一个ValueController的 ...