Zookeeper介绍和节点的操作 (一)

摘要:
简单地说,zookeeper=文件系统+监听通知机制1。Znode节点(不能具有相同的名称)1.1。表示服务的节点的名称是什么?通过ls、create、delete、get、set和其他命令(节点路径键)操作这些znode节点。

一、zookeeper /ˈzuːkiːpə(r)/ 介绍

它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。ZooKeeper包含一个简单的原语集,提供Java和C的接口。

简单来说 zookeeper=文件系统+监听通知机制

1、Znode节点(不可能会重名)

  1.1  什么是节点

    代表一个服务的名称,就是服务实例描述的抽象。

  2.1  Znode  

    znode 是一个跟 Unix 文件系统路径相似的节点,可以往这个节点存储 或获取数据。 Zookeeper 底层是一套数据结构。这个存储结构是一个树形结构,其上的每一个节点, 我们称之为“znode” zookeeper 中的数据是按照“树”结构进行存储的。而且 znode 节点还分为 4 中不同的类 型。 每一个 znode 默认能够存储 1MB 的数据(对于记录状态性质的数据来说,够了) 可以使用 zkCli 命令,登录到 zookeeper 上,并通过 ls、create、delete、get、set 等命令 操作这些 znode 节点.

  (节点路径 key) ,节点数据 (value)

  key  == / + key名称

  value== 数据(服务的实际地址)

  key == value 一对一关系

   2.2 Zonde 操作(create,set,delete,deleteall,get,rmr)(key,value)

    客户端

    1.命令行

      1.1 创建节点 (almosc 是自己随意取的名字),不可以重复创建,一个节点只能对应一个

creat  /alomsc "localhost:8080"

Zookeeper介绍和节点的操作 (一)第1张

       1.2 查询节点

get /alomsc

       1.3 修改节点

set /alomsc "localhost:8090"

        1.4删除节点

rmr /alomsc  -- 删除当前节点和所有的子节点
delete/alomsc  -- 只能删除没有子节点的节点

         1.5创建子节点 --在alomsc下创建子节点

create /alomsc/child "childName"

   节点类型:

    持久化节点(存储在磁盘上,必须通过rmr,delete,deleteall 来进行删除)

    临时节点 (存储在内存,删除可以手动,zookeeper关闭的时候也会删除)

    顺序节点 (创建节点的时候会添加顺序)--常见分布式锁

    创建临时节点,另外临时节点是不允许有子节点的  

create -e  /alomsc "temporary"

    创建顺序节点,顺序节点下面是可以有子节点的

create -s  /alomsc "sequence"

 Zookeeper介绍和节点的操作 (一)第2张

     节点版本号:

      version:节点(set,delete)

      为什么会出现版本号的原因:

      其原因和java中线程锁的原理差不多,防止有多个客户端对同一个节点操作产生错误。

    2.java api (修改的时候根据的版本号要根据最新的版本号)

String path ="localhost:2181";
//        启动java客户端 5000是超时时间
        ZooKeeper zooKeeper = new ZooKeeper(path, 5000, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                Event.KeeperState state = watchedEvent.getState();
                System.out.println(state.toString());
            }
        });
        byte[] data = "localhots:8099".getBytes();
//        创建
//        zooKeeper.create("/alomsc",data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
        System.out.println("success");
//      获取版本号
        Stat stat = zooKeeper.exists("/alex",true);
//        修改 ,返回当前版本号
        Stat stat1 = zooKeeper.setData("/alex", data, stat.getVersion());
        System.out.println("版本号:"+stat.getVersion());
        System.out.println("版本号2:"+stat1.getVersion());
 //        删除
//        zooKeeper.delete("/almosc000000004",0);

ls  /     列出根目录节点下的所有文件 改目录下有两个节点

 Zookeeper介绍和节点的操作 (一)第3张

stat /zookeeper  查看节点状态
zookeeper  是节点名称
[zk: 127.0.0.1:2181(CONNECTED) 6] stat /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

Zookeeper介绍和节点的操作 (一)第4张

cZxid:创建节点时的事务id
pZxid:子节点列表最后一次被修改的事务id
cversion:节点版本号
dataCersion:数据版本号
aclVerson:acl权限版本号

    3.zkClien

    4.aurator

                                                                                                       

免责声明:文章转载自《Zookeeper介绍和节点的操作 (一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Echart显示在顶端显示总数linux中ulimit作用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

pandas的DataFrame与python的dict字典之间的相互转换

一、dict生成DataFrame  1、如果只有一个dict,即一行dataframe数据 # 注:dict的形式必须是如下2种,不然会报错 # 1、dict外面加一层list【】 dict_a = [{'a': 0, 'b': 1, 'c': 2}] # 2、dict内部的数据至少有1个或多个是list形式 # 注:此时dict外面如果加上li...

几种数据交换格式

 主要包括以下三种: · XML · JSON · YAML   XML     XML是当前编程中最为流行的数据交换格式,拥有跨平台、跨语言的优势。对于XML应该很熟悉,所以不再多做介绍。   JSON 什么是JSON? · JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式; · 它是基于JavaS...

浅谈企业软件架构(2)

第二章分层架构   本章我们重点来描述如何实现开发中软件层次结构,通过对第一章的例子的重构,以实例的方式展示一个分层结构是何样子,力求简要说明如何考虑软件开发中的分层问题,建立一个关于软件分层一个初步的印象。在个人以往的项目经历中,遇到了各种各样的软件层次概念,尤其对物理分层与逻辑分层没有清晰的认识,很多开发人员一谈软件分层必然是远程调用、远程服务之类...

MySQL-查询结果缓存

  众所周知,系统读取数据时,从内存中读取要比从硬盘上速度要快好几百倍。故现在绝大部分应用系统,都会最大程度的使用缓存(内存中的一个存储区域),来提高系统的运行效率。MySQL数据库也不例外。在这里,笔者将结合自己的工作经验,跟大家探讨一下,MySQL数据库中缓存的管理技巧:如何合理配置MySQL数据库缓存,提高缓存命中率。  合理配置MySQL缓存 提高...

8086CPU的结构与功能

CPU结构与功能 不管什么型号的CPU,其内部均有这四大部件 ALU:算术逻辑单元 工作寄存器:分为数据寄存器和地址寄存器 工作寄存器的目的是为了提高运算速度,希望参与运算的数据不从外部存储器去取数据,而是在CPU内部取,所以要有能暂存少量数据的寄存器。 数据寄存器是专门存放数据的,地址寄存器是专门存放地址,进行间接寻址方式,但当地址寄存器不提供地址时...

Algorithm算法库

algorithm 是C++标准程式库中的一个头文件,定义了C++ STL标准中的基础性的算法(均为函数模板)。在C++98中,共计有70个算法模板函数;在C++11中,增加了20个算法模板函数。其中有5个算法模板函数定义在头文件numeric中。 下文所称的“序列”(sequence),是指可以用迭代器顺序访问的容器。 有返回值的函数,返回值都是迭代器,...