1. 初识Zookeeper
1.1 Zookeeper概念
- Zookeeper是Apache Hadoop项目下的一个子项目,是一个树形目录服务
- Zookeeper翻译过来就是动物园管理员,它是用来管Hadoop(大象)、Hive(密封)、Pig(小猪)的管理员,简称ZK
- Zookeeper是一个分布式的、开源的分布式应用程序的协调服务
- Zookeeper提供的主要功能包括
- 配置管理
- 分布式锁
- 集群管理
1.2 Zookeeper安装(linux)
- 环境准备
- 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.5.6-bin.tar.gz /opt/zookeeper/
- 将下载的ZooKeeper放到/opt/ZooKeeper目录下
- 解压
- 将tar包解压到/opt/zookeeper目录下
tar -zxvf apache-ZooKeeper-3.5.6-bin.tar.gz
- 将tar包解压到/opt/zookeeper目录下
1.3 Zookeeper配置启动
- 配置zoo.cfg
- 进入到conf目录拷贝一个zoo_sample.cfg并完成配置
#进入到conf目录 cd /opt/zooKeeper/apache-zooKeeper-3.5.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
- 进入到conf目录拷贝一个zoo_sample.cfg并完成配置
- 启动ZooKeeper
cd /opt/zooKeeper/apache-zooKeeper-3.5.6-bin/bin/ #启动 ./zkServer.sh start
- 看到下图表示成功启动
- 看到下图表示成功启动
- 查看ZooKeeper状态
./zkServer.sh status
- zookeeper启动成功。standalone代表zk没有搭建集群,现在是单节点
- zookeeper没有启动
2. Zookeeper命令操作
2.1 Zookeeper数据模型
- Zookeeper是一个树形目录服务,其数据模型和Unix的文件系统目录树很类似,拥有一个层次化结构
- 这里面的每一个节点都被称为:ZNode,每个节点上都会保存自己的数据和节点信息
- 节点可以拥有子节点,同时也允许少量(1MB)数据存储在该节点之下
- 节点可以分为四大类
- PERSISTENT持久化节点
- EPHEMERAL临时节点
- PERSISTENT_SEQUENTIAL持久化顺序节点:-s
- EPHEMERAL_SEQUENTIAL临时顺序节点:-es
2.2 Zookeeper服务端常用命令
- 启动Zookeeper服务
./zkServer.sh start
- 查看Zookeeper服务状态
./zkServer.sh status
- 停止Zookeeper服务
./zkServer.sh stop
- 重启Zookeeper服务
./zkServer.sh restart
2.3 Zookeeper客户端常用命令
- 连接ZooKeeper服务端
./zkCli.sh –server ip:port
- 断开连接
quit
- 查看命令帮助
help
- 显示指定目录下节点
ls 目录
- 创建节点
create /节点path value
- 获取节点值
get /节点path
- 设置节点值
set /节点path value
- 删除单个节点
delete /节点path
- 删除带有子节点的节点
deleteall /节点path
2.4 创建临时有序节点
- 创建临时节点
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:当前节点的子节点个数
3. Zookeeper JavaAPI操作
3.1 Curator介绍
- Curator是Apache ZooKeeper的Java客户端库
- 常见的Zookeeper Java API
- 原生Java API
- ZKClient
- Curator
- Curator项目的目标是简化Zookeeper客户端的使用
- Curator最初是Netfix研发的,后来捐献给了Apache基金会,目前是Apache的顶级项目
- 网址:http://curator.apache.org/
3.2 Curator API 常用操作
- 建立连接
- 搭建项目
- 创建项目curator-zk
- 引入pom和日志文件
- 资料文件夹下pom.xml和log4j.properties
- 创建测试类,使用curator连接zookeeper
@Before public void testConnect() { //重试策略 RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 10); //2.第二种方式 //CuratorFrameworkFactory.builder(); client = CuratorFrameworkFactory.builder() .connectString("192.168.200.130:2181") .sessionTimeoutMs(60 * 1000) .connectionTimeoutMs(15 * 1000) .retryPolicy(retryPolicy) .namespace("itheima") .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()