从Paxos到Zookeeper(四)客户端脚本与Znode

本文详细介绍了ZooKeeper的核心功能及其实现原理,包括znode数据结构、ZStat类定义及其与Stat的关系,并探讨了客户端操作如create、ls、get等命令的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

znode

zookeeper的的功能可以看做是维护了一个树状数据结构,根节点是“/”,从外部观察,每个节点的信息都存在一个znode的数据结构里

Zstat & Stat

znode的数据结构在zookeeper内部是通过Zstat来定义的,其代码如下


package org.apache.zookeeper.server.jersey.jaxb;

import javax.xml.bind.annotation.XmlRootElement;


/**
 * Represents a STAT using JAXB.
 */
@XmlRootElement(name="stat")
public class ZStat {
    public String path;
    public String uri;
    public byte[] data64;
    public String dataUtf8;

    public long czxid;
    public long mzxid;
    public long ctime;
    public long mtime;
    public int version;
    public int cversion;
    public int aversion;
    public long ephemeralOwner;
    public int dataLength;
    public int numChildren;
    public long pzxid;
	// 构造方法
    @Override
    public int hashCode() {
        return path.hashCode();
    }

    /**
     * This method considers two ZStats equal if their path, encoding, and
     * data match. It does not compare the ZooKeeper
     * org.apache.zookeeper.data.Stat class fields.
     */
    @Override
    public boolean equals(Object obj) {
		//code
    }

    @Override
    public String toString() {
		//code
    }
}

而Zstat的数据从ZNodeResource的代码中可以看出是来自Stat的,只是这里由于java的函数只允许返回值只能有一个,所以Stat作为参数传了进去。Zstat相对于Stat有了一个节点的value值,另外他们都有一些关于这个节点个属性,如下表所示

操作新增、修改数据新增、修改子节点列表修改ACL
时间ctime、mtime
事务idmZxidpZxid
版本dataversioncversionaclversion
sessionephemeralOwner
长度dataLengthnumChildren

客户端脚本

create

create [-s] [-e] path data [acl]

各个参数含义如下:

  • -s:创建顺序节点
  • -e:创建临时节点(否则为持久节点)
  • path:路径,需要注意path是绝对路径并且要求父节点存在
  • data:数据
  • acl:权限控制信息,默认不加控制

在系统自带的zookeeper下是可以创建自己的节点的

ls

ls path [watch]

可以看到默认情况下根节点下面有一个名字是zookeeper的节点,而这个节点下面有configquota两个节点。

get

get path [watch]

这个命令会获取上面提到的Znode的相关信息

set

set path data [version]

这里使用version用于乐观锁

delete

delete path [version]

同set一样version用于乐观锁
同create类似,delete在有子节点存在的情况下不允许删除父节点

系统Znode

在zookeeper初始化后除了根节点还有三个节点,分别是 /zookeeper, /zookeeper/config,/zookeeper/quota,这三个节点是无法删除的(会报Arguments are not valid),但是可以修改,也可以增加子节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值