zk环境的搭建
(1) cd /export/softwares 进入到
将zookeeper文件拖入到/export/softwares 当中
(2)利用 tar -zxvf zookeeper-3.4.9.tar.gz -c …/servers/ 对安装包进行解压
进入到conf文件当中,拷贝zoo_sample.cfg 到 zoo.cfg
创建目录 -p /export/servers/zookeeper-3.4.9/zkdatas
vim zoo.cfg
(3)dataDir=/export/servers/zookeeper-3.4.9/zkdatas
两个autopurge取消掉注释
再输入server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
(4)在第一台机器中 echo 1 > /export/servers/zookeeper-3.4.9/zkdatas/myid
二三台机器重复此操作
在第一台机器中拷贝文件:
scp -r /export/servers/zookeeper-3.4.9/ node02:$ PWD
scp -r /export/servers/zookeeper-3.4.9/ node03:$ PWD
启动zookeeper服务:
/export/servers/zookeeper-3.4.9/bin/zkServer.sh start
查看启动状态:
/export/servers/zookeeper-3.4.9/bin/zkServer.sh status
zk的shell操作
登录:
在bin目录下输入 zkCli.sh
创建节点:
create [-s] [-e] path data acl
其中,-s或-e分别指定节点特性,顺序或临时节点,若不指定则表示持久节点:acl用来进行权限控制
创建永久节点:
zk的shell操作创建节点
创建永久节点
create /abc helloworld
创建永久的顺序的的节点
create -s /bbb helloworld
创建临时节点:
create -e /mytemp mytemp
创建一个临时顺序节点:
create -e -s /mytemp mytemp
获取节点的值
get 绝对路径
设置节点的值
set /abc 新值
删除节点的值:
delete 路径(只能删除没有子节点的操作)
递归删除:
rmr 路径
history 数据模型
zk节点的属性
临时节点不能拥有子节点
永久节点:
有序的永久节点
无序的永久节点
节点属性:
dataVersion:数据版本号,每次对节点进行set操作,dataVersion的值都会增加1(即使设置相同的数据),可有效避免了数据更新时出现的先后顺序问题。
cversion:子节点的版本号,当znode的子节点有变化时,cversion的值就会增加1
aclVersion:ACL的版本号
cZxid:Znode创建的事务id
mZxid:Znode被修改的事务id,即每次对znode的修改都会更新mZxid
zk的watch机制
zookeeper的watch机制:利用watcher来实现分布式的通知功能,可分为以下三个过程:
客户端向服务端注册Watcher、服务端事件触发Wacther、客户端回调Watcher得到触发事件情况。
特性:
监听器是一次性的:
事件封装:所有的节点变化,都封装成了对应的事件的变化,节点的每一个操作,都对应的封装了一个事件,监听器专门获取这个事件即可。
异步发送:监听器与节点之间的操作是异步的。先注册再触发。
设定监听器:
get /hello(路径) watch
临时节点与zk的watch机制一起搭配使用,可以监听我们的临时节点什么时候消失。
zk的javaAPI操作
创建一个永久节点(测试类):
子工程的POM文件的配置:
<parent>
<artifactId>bigdata01</artifactId>
<groupId>cn.it.cast</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>zkday01</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.0-M1</version>
<!-- scope的取值一共有四个 test provided compile 默认值 -->
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
Java源代码:
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.</