Zookeeper简介
Zookeeper是一个分布式协调服务的开源框架,它是由Google的Chubby开源实现。Zookeeper主要用来解决分布式集群中应用系统的一致性问题和单点故障问题,例如如何避免同时操作同一数据造成脏读的一致性问题等。
按我自己的理解来看zoookeeper就是连接各服务器高可用和协调的工具,有了他,使很多高速运算和存储变得有可能。
特性
一致性
可靠性
顺序性
原子性
实时性
角色
Leader:领导者,一个
Follower:追随者,多个
Observer:观察者
Zookeeper分布式集群部署
下载
我这里用的是3.6.3版本的
连接放这里了
https://pan.baidu.com/s/1f4HOiFL7rufd12VpnwkQJw?pwd=1234
提取码:1234
大家自己去Apache官网下载也可
上传安装包
解压
配置环境变量
不要忘了让环境变量起作用奥
Zookeeper的配置文件
修改配置
创建myid文件
分发文件
分发zookeeper
二三都要分发一遍
分发环境变量配置文件
分发myid文件,并修改hadoop02的myid文件的内容为2,hadoop03的myid的内容为3
修改hadoop002的myid
修改hadoop003的myid
环境变量生效
启动集群
这里有几个注意的地方
首先必须关闭所有的防火墙
然后zookeeper要一个一个按顺序启动
也得一个一个按顺序关闭
这影响到zookeeper不同虚拟机的角色
在后来学习中我发现直接全局命令使zookeeper在虚拟机同时启动即可
就是在这输入即可
zkServer.sh start是开启命令
zkServer.sh status是查看状态
Zookeeper的shell操作
启动集群
启动shell
zkCli.sh
查看zookeeper某个目录信息
查看某个目录的数据信息
创建节点
获取节点
Get、
修改节点
set
监听节点
Get -w
删除节点![](https://img-blog.csdnimg.cn/0aea9e317278402e905365909b6073fd.png)
Zookeeper的Java API操作
启动idea,新建一个maven工程
引入pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.edu.hgu</groupId>
<artifactId>zookee-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.3</version>
</dependency>
</dependencies>
</project>
新建包,在包下新建一个类
测试客户端是否创建成功创建节点
package cn.edu.hgu.zookeeper;
import org.apache.zookeeper.*;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
/**
* zookeeper
* @author
* @date 2021/11/9
*/
public class ZookeeperDemo {
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
//1.创建zookeeper的客户端
//构造器第一个参数是连接字符串;第二个参数是会话超时时间,单位是毫秒;第三个参数是监视器
ZooKeeper zookeeper = new ZooKeeper("hadoop001:2181,hadoop002:2181,hadoop003:2181", 30000, new Watcher() {
@Override//覆盖的注释
public void process(WatchedEvent watchedEvent) {
System.out.println(watchedEvent.toString());
}
});
System.out.println(zookeeper);
//2.创建节点
zookeeper.create("/testRootPath","HelloZookeeper".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//3.创建子节点
zookeeper.create("/testRootPath/one","childone".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
}
}
创建子节点
//3.创建子节点
zookeeper.create("/testRootPath/one","childone".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
}
}
其余一些常规操作
获取目录节点数据
System.out.println(“hellozookeeper节点数据为:”,+new String(zookeeper.getData(path:”
/testRootPath”,watch: false,stat ;null)));
修改子目录节点数据,使得监听触发
Zookeeper.setData(“/testRootPath/one”,”modifyone”.getBytes(),version :-1)
判断目录是否存在
System.out.println(“目录节点状态:[“+zookeeper.exists( path:”/testRootPath”,watch: true)+”)]”);
删除子目录节点
zookeeper.delete(path:”/testRootPath/one”,version:-1);
删除目录节点
zookeeper.delete(path:”/testRootPath”,version:-1);
zookeeper.close();
zookeeper到这里基本上就结束了,总的来说zookeeper在后来做项目的操作内容很少,但是是一个不可或缺的组件,基本上随时打开,部署环境也属于一劳永逸,在下一篇(7)我会介绍HA高可用相关内容,hadoop相关内容请移步主页。
如遇侵权,请联系删除。