当前位置: 代码网 > 服务器>网络>网络协议 > Zookeeper教程1

Zookeeper教程1

2024年07月31日 网络协议 我要评论
Zookeeper 是 Apache Hadoop 项目下的一个子项目,是一个树形目录服务。Zookeeper 翻译过来就是 动物园管理员,他是用来管 Hadoop(大象)、Hive(蜜蜂)、Pig(小 猪)的管理员。简称zkZookeeper 是一个分布式的、开源的分布式应用程序的协调服务。Zookeeper 提供的主要功能包括:配置管理:对项目的公共配置文件进行统一管理分布式锁:一个数据库可以被多个对象使用加锁,对象的其他属性不能使用这个数据库集群管理:可以管理多个对象。

zookeeper

zookeeper概念

zookeeper 是 apache hadoop 项目下的一个子项目,是一个树形目录服务。

zookeeper 翻译过来就是 动物园管理员,他是用来管 hadoop(大象)、hive(蜜蜂)、pig(小 猪)的管理员。简称zk

zookeeper 是一个分布式的、开源的分布式应用程序的协调服务。

zookeeper 提供的主要功能包括:

配置管理:对项目的公共配置文件进行统一管理

分布式锁:一个数据库可以被多个对象使用加锁,对象的其他属性不能使用这个数据库

集群管理:可以管理多个对象

zookeeper 安装与配置

下载安装

环境准备

zookeeper服务器是用java创建的,它运行在jvm之上。需要安装jdk 7或更高版本。

上传

将下载的zookeeper放到/opt/zookeeper目录下

#上传zookeeper alt+p
put f:/setup/apache-zookeeper-3.5.6-bin.tar.gz
#打开 opt目录
cd /opt
#创建zookeeper目录
mkdir  zookeeper
#将zookeeper安装包移动到 /opt/zookeeper
mv apache-zookeeper-3.8.6-bin.tar.gz /opt/zookeeper/

解压

将tar包解压到/opt/zookeeper目录下

tar -zxvf apache-zookeeper-3.8.6-bin.tar.gz

配置启动

配置zoo.cfg

进入到conf目录拷贝一个zoo_sample.cfg并完成配置

#进入到conf目录
cd /opt/zookeeper/apache-zookeeper-3.8.6-bin/conf/
#拷贝
cp  zoo_sample.cfg  zoo.cfg

修改zoo.cfg

#打开目录
cd /opt/zookeeper/
#创建zookeeper存储目录
mkdir  zkdata
#修改zoo.cfg
vim /opt/zookeeper/apache-zookeeper-3.5.6-bin/conf/zoo.cfg

修改存储目录:datadir=/opt/zookeeper/zkdata

port在后面会用到

在这里插入图片描述

启动zookeeper

cd /opt/zookeeper/apache-zookeeper-3.8.6-bin/bin/
#启动
 ./zkserver.sh  start

在这里插入图片描述

started代表成功

查看zookeeper状态

./zkserver.sh status

zookeeper启动成功。standalone代表zk没有搭建集群,现在是单节点

在这里插入图片描述

如果zookeeper没有启动

在这里插入图片描述

zookeeper 命令操作

数据模型

zookeeper 是一个树形目录服务,其数据模型和unix的文件系统目录树很类似,拥有一个层次化结构。

这里面的每一个节点都被称为: znode,每个节点上都会保存自己的数据和节点信息。

节点可以拥有子节点,同时也允许少量(1mb)数据存储在该节点之下。

节点可以分为四大类:

persistent 持久化节点

ephemeral 临时节点 :-e

persistent_sequential 持久化顺序节点 :-s

ephemeral_sequential 临时顺序节点 :-es

服务端命令

•启动 zookeeper 服务: ./zkserver.sh start

•查看 zookeeper 服务状态: ./zkserver.sh status

•停止 zookeeper 服务: ./zkserver.sh stop

•重启 zookeeper 服务: ./zkserver.sh restart

zookeeper客户端常用命令

•连接zookeeper服务端

./zkcli.sh –server ip:port

•断开连接

quit

•查看命令帮助

help

•显示指定目录下节点

ls 目录

•创建节点

create /节点path value

•获取节点值

get /节点path

•设置节点值

set /节点path value

•删除单个节点

delete /节点path

•删除带有子节点的节点

deleteall /节点path

创建临时有序节点

•创建临时节点

create -e /节点path value

•创建顺序节点

create -s /节点path value

•查询节点详细信息

ls –s /节点path

•czxid:节点被创建的事务id

•ctime: 创建时间

•mzxid: 最后一次被更新的事务id

•mtime: 修改时间

•pzxid:子节点列表最后一次被更新的事务id

•cversion:子节点的版本号

•dataversion:数据版本号

•aclversion:权限版本号

•ephemeralowner:用于临时节点,代表临时节点的事务id,如果为持久节点则为0

•datalength:节点存储的数据的长度

•numchildren:当前节点的子节点个数

zookeeper javaapi 操作

curator介绍

•curator 是 apache zookeeper 的java客户端库。

•常见的zookeeper java api :

•原生java api

•zkclient

•curator

•curator 项目的目标是简化 zookeeper 客户端的使用。

•curator 最初是 netfix 研发的,后来捐献了 apache 基金会,目前是 apache 的顶级项目。

•官网:http://curator.apache.org/

javaapi操作建立连接

1,搭建项目

创建项目curator-zk

引入pom和日志文件

资料文件夹下pom.xml和log4j.properties

在这里插入图片描述

2、创建测试类,使用curator连接zookeeper

@before
    public void testconnect() {
        //重试策略
        retrypolicy retrypolicy = new exponentialbackoffretry(3000, 10);
        //2.第二种方式
        //curatorframeworkfactory.builder();
        curatorframework client = curatorframeworkfactory.builder()
                .connectstring("127.0.0.1:2181")
                .sessiontimeoutms(60 * 1000)
                .connectiontimeoutms(15 * 1000)
                .retrypolicy(retrypolicy)
                .namespace("bukaedu")
                .build();
        //开启连接
        client.start();
    }

创建节点

/**
* 创建节点:create 持久 临时 顺序 数据
* 1. 基本创建 :create().forpath("")
* 2. 创建节点 带有数据:create().forpath("",data)
* 3. 设置节点的类型:create().withmode().forpath("",data)
* 4. 创建多级节点  /app1/p1 :create().creatingparentsifneeded().forpath("",data)
*/
@test
public void testcreate() throws exception {
    //2. 创建节点 带有数据
    //如果创建节点,没有指定数据,则默认将当前客户端的ip作为数据存储
    string path = client.create().forpath("/app2", "hehe".getbytes());
    system.out.println(path);
}@test
public void testcreate2() throws exception {
    //1. 基本创建
    //如果创建节点,没有指定数据,则默认将当前客户端的ip作为数据存储
    string path = client.create().forpath("/app1");
    system.out.println(path);
}
@test
public void testcreate3() throws exception {
    //3. 设置节点的类型
    //默认类型:持久化
    string path = client.create().withmode(createmode.ephemeral).forpath("/app3");
    system.out.println(path);
}
@test
public void testcreate4() throws exception {
    //4. 创建多级节点  /app1/p1
    //creatingparentsifneeded():如果父节点不存在,则创建父节点
    string path = client.create().creatingparentsifneeded().forpath("/app4/p1");
    system.out.println(path);
}

查询节点

/**
* 查询节点:
* 1. 查询数据:get: getdata().forpath()
* 2. 查询子节点: ls: getchildren().forpath()
* 3. 查询节点状态信息:ls -s:getdata().storingstatin(状态对象).forpath()
*/
@test
public void testget1() throws exception {
    //1. 查询数据:get
    byte[] data = client.getdata().forpath("/app1");
    system.out.println(new string(data));
}
@test
public void testget2() throws exception {
    // 2. 查询子节点: ls
    list<string> path = client.getchildren().forpath("/");
    system.out.println(path);
}
@test
public void testget3() throws exception {
    stat status = new stat();
    system.out.println(status);
    //3. 查询节点状态信息:ls -s
    client.getdata().storingstatin(status).forpath("/app1");
    system.out.println(status);
}

修改节点

/**
* 修改数据
* 1. 基本修改数据:setdata().forpath()
* 2. 根据版本修改: setdata().withversion().forpath()
* * version 是通过查询出来的。目的就是为了让其他客户端或者线程不干扰我。
*
* @throws exception
*/
@test
public void testset() throws exception {
	client.setdata().forpath("/app1", "buka".getbytes());
}
@test
public void testsetforversion() throws exception {
    stat status = new stat();
    //3. 查询节点状态信息:ls -s
    client.getdata().storingstatin(status).forpath("/app1");
    int version = status.getversion();//查询出来的 3
    system.out.println(version);
    client.setdata().withversion(version).forpath("/app1", "hehe".getbytes());
}

(0)

相关文章:

  • LTPI协议的理解——4、LTPI链路初始化以及运行

    整个LTPI协议实现过程中,我认为最复杂的也就是LTPI的链路建立的过程 以及异步信号(特别是IIC)的传输事务的控制和响应以及对IIC接口线的操作。我们前面已经大致提到了各个阶段…

    2024年08月01日 网络
  • 基于FPGA的DES算法实验报告

    DES算法用硬件实现容易,软件实现难,基于这点本次实验将会用硬件形式实现DES算法。DES算法使用一个有效位为56位的密钥对64位的明文进行加密,其加密过程主要包括IP置换、密钥置…

    2024年08月01日 网络
  • 【模块系列】STM32&TCS3472

    【模块系列】STM32&TCS3472

    手上正好有TCS3472模块,也正好想在加深一下自己对I2C协议的理解和应用,所以就写了这个代码库出来。参考的资料主要来源于TCS3472的数据手册,和ardu... [阅读全文]
  • 【STM32】定时器与PWM的LED控制

    定时器的定时时间主要取决于定时周期和预分频因子,计算公式为:定时时间=(ARR+1)×(预分频值PSC+1)/输入时钟频率或 T=(TIM_Period +1)*(TIM_Pres…

    2024年08月01日 网络
  • 【17】STM32·HAL库·CAN

    CAN(Controller Area Network),是ISO国际标准化的串行通信协议。为了满足汽车产业的“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需求…

    2024年08月01日 网络
  • 工业设备物联网与数据采集中可能遇见的问题

    工业设备物联网与数据采集中可能遇见的问题

    数据中台可以接入PLC、仪器仪表、传感器、数控机床、工业机器人等设备数据,进行清洗、过滤、计算等标准化处理,从而为各种工业物联网平台、工业互联网平台和工业软件提... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com