ZooKeeper的API操作(二)(通俗易懂)

  所需要6个jar包,都是解压zookeeper的tar包后里面的。

    zookeeper-3.4.10.jar     jline-0.094.jar      log4j-1.2.16.jar

    netty-3.10.5.jar       slf4j-api-1.6.1.jar     slf4j-log4j12-1.6.1.jar

1.建立连接

/**
 * connectString     : zk服务器连接ip和端口,多个用逗号隔开
 * sessionTimeout   : 连接超时时间
 * watcher           : 监听器(当被监控的节点发生改变时,zk会通过watcher传递给我们)
*/
#ZooKeeper zkCli = new ZooKeeper(connectString,sessionTimeout,watcher );
ZooKeeper zkCli = new ZooKeeper("192.168.199.15:2181,192.168.199.16:2181", 2000, new Watcher() {
@Override
public void process(WatchedEvent event) {
     System.out.println("节点:"+event.getPath()+"发生了事件:"+event.getType());
  }
});

2.创建节点

public void testCreateNode() throws Exception {
        /**
         *  path        :节点创建的路径
         *  data        :节点创建要保存的数据,是个byte类型的
         *  acl        :节点创建的权限信息(4种类型)
         *          ANYONE_ID_UNSAFE    : 表示任何人
         *          AUTH_IDS    :此ID仅可用于设置ACL。它将被客户机验证的ID替换。
         *          OPEN_ACL_UNSAFE    :这是一个完全开放的ACL(常用)
         *          CREATOR_ALL_ACL  :此ACL授予创建者身份验证ID的所有权限
         *  createMode    :创建节点的类型(4种类型)
         *          PERSISTENT:永久节点
         *            EPHEMERAL:临时节点
         *            PERSISTENT_SEQUENTIAL:永久节点、序列化
         *            EPHEMERAL_SEQUENTIAL:临时节点、序列化
         */
    # String node = zkCli.create(path,data,acl,createMode);
        String node_PERSISTENT = zkCli.create("/zpb", "zk创建节点".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        String node_EPERSISTENT = zkCli.create("/zpb/zk", "2181".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
        System.out.println("创建的永久节点是:"+node_PERSISTENT);
        System.out.println("创建的临时节点是:"+node_EPERSISTENT);
        Thread.sleep(Long.MAX_VALUE);    //查看临时节点时,防止zkCli退出

}
另:通过连接服务器端用命令查看结果:
   

   

   备注:客户端创建永久节点时,zkCli 与服务端断开连接后,查看节点信息是存在的,反之临时节点与服务器断开连接后是不存在的

3.获取节点数据 

public void getNodeData() throws Exception {
        /**
         * path    : 获取数据的路径
         * watch    : 是否开启监听
         * stat    : 查看哪个版本的数据(节点上可能会保存多个版本的数据)
         *        null: 表示获取最新版本的数据
         *
         *
         */
        #zkCli.getData(path, watch, stat);
        byte[] data = zkCli.getData("/zpb", true, null);
        System.out.println(new String(data,"utf-8"));

}

4.修改节点数据

public void testUpdateNodeData() throws Exception {
        /**
         * path        : 修改节点的路径
         * data        : 要修改的数据
         * version    :修改哪个版本的数据
         *           -1: 匹配所有版本
         */
       //        zkCli.setData(path, data, version)

     ①详见建立连接;
     ②byte[] data = zkCli.getData("/zpb", true, null);
       System.out.println("修改之前的数据是:"+new String(data,"utf-8"));

     ③Stat setData = zkCli.setData("/zpb", "zk修改节点".getBytes("utf-8"), -1);

     ④data = zkCli.getData("/zpb", true, null);
        System.out.println("修改之后的数据是:"+new String(data,"utf-8"));

    }
输出的结果:
    节点:null发生了事件:None
    修改之前的数据是:zk创建节点
    节点:/zpb发生了事件:NodeDataChanged
    修改之后的数据是:zk修改节点
执行顺序:
    在创建客户端成功后,有1个Watcher事件,然后打印输出,当zkCli获取数据时设置了监听该节点的数据true,接着输出修改之前的数据,当zkCli修改数据后,     负责监听的watcher事件被触发,zkCli再次获取修改后的数据,并再次设置监听

5.删除节点

public void testDel() throws Exception {

        // zkCli.delete(path, version);
        Stat exists_1 = zkCli.exists("/zpb", true);
        System.out.println(exists_1 == null ? "节点被删除了" : "节点没有被删除");
        zkCli.delete("/zpb", -1);    //-1表示匹配所有版本
        Stat exists_2 = zkCli.exists("/zpb", true);
        System.out.println(exists_2 == null ? "节点被删除了" : "节点没有被删除");
}

原文地址:https://www.cnblogs.com/MrRightZhao/p/10463494.html

时间: 2024-08-02 18:40:26

ZooKeeper的API操作(二)(通俗易懂)的相关文章

ZooKeeper 原生API操作

zookeeper客户端和服务器会话的建立是一个异步的过程,也就是说在程序中,程序方法在处理完客户端初始化后立即返回(即程序继续往下执行代码,这样,在大多数情况下并没有真正的构建好一个可用会话,在会话的生命周期处于"CONNECTING"时才算真正的建立完毕,所以需要使用到多线程中的一个工具类CountDownLatch). zookeeper的java api操作 创建会话:(一共有4个构造方法,根据参数不同) Zookeeper(String connectString,int s

Zookeeper C API 指南三(回调函数)(转)

2013-02-21 12:54 by Haippy, 9237 阅读, 0 评论, 收藏, 编辑 接上一篇<Zookeeper C API 指南二(监视(Wathes), 基本常量和结构体介绍)>,本文重点介绍 Zookeeper C API 中的各种回调函数. Zookeeper C API 中各种回调函数简介 在具体介绍 Zookeeper C API 之前,首先介绍一下 Zookeeper C API 中的各种回调函数的原型: 监视函数(watch function)原型 typede

[转载] zookeeper c api

1. Zookeeper C API 指南一(准备工作) : http://www.cnblogs.com/haippy/archive/2013/02/21/2919365.html 2. Zookeeper C API 指南二(监视(Wathes), 基本常量和结构体介绍) : http://www.cnblogs.com/haippy/archive/2013/02/21/2920241.html 3. Zookeeper C API 指南三(回调函数) : http://www.cnbl

(原) 2.1 Zookeeper原生API使用

本文为原创文章,未经允许不得转载 Zookeeper原生API使用 1.jar包引入,演示版本为3.4.6,非maven项目,可以下载jar包导入到项目中 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> 2.

Java I/O流操作(二)---缓冲流[转]

转自:http://blog.csdn.net/johnny901114/article/details/8710403 一.BufferWriter类 IO的缓冲区的存在就是为了提高效率,把要操作的数据放进缓冲区,然后一次性把缓冲区的内容写到目的地,而不是写一次就往目的地写一次. 在这里要注意的是当我们关闭了缓冲区对象实际也关闭了与缓冲区关联的流对象. BufferWriter类 try { FileWriter fw =new FileWriter("test.txt"); //使

【高德地图API】从零开始学高德JS API(二)地图控件与插件——测距、圆形编辑器、鼠标工具、地图类型切换、鹰眼鱼骨

摘要:无论是控件还是插件,都是在一级API接口的基础上,进行二次开发,封装的一系列更加便于开发者使用,减少开发者工作量的二级API接口.除了官方通用的鱼骨.鹰眼控件,还有大量官方开发的地图插件,类似谷歌的lib.当然本文还会介绍自定义插件的使用. ------------------------------------------------------------------------------------------------- 第一部分 控件 目前官方支持的控件包含:缩放控制条-地图

HBase API 操作范例

package com.test.hbase.api; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; import java.util.ArrayList; imp

HBase 6、用Phoenix Java api操作HBase

开发环境准备:eclipse3.5.jdk1.7.window8.hadoop2.2.0.hbase0.98.0.2.phoenix4.3.0 1.从集群拷贝以下文件:core-site.xml.hbase-site.xml.hdfs-site.xml文件放到工程src下 2.把phoenix的phoenix-4.3.0-client.jar和phoenix-core-4.3.0.jar添加到工程classpath 3.配置集群中各节点的hosts文件,把客户端的hostname:IP添加进去

Hadoop读书笔记(三)Java API操作HDFS

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927 JAVA URL 操作HDFS OperateByURL.java package hdfs; import java.io.InputStream; import jav