很多大型系统基本都需要一个无单点问题的分布式框架,zookeeper便满足这一需求。这次的博客,我们先进行一个最基本的安装、部署、连接。
1、首先下载zookeeper,解压,我这里选择最新的稳定版3.4.8,然后我们使用单机模拟集群,可以专门建立一个文件夹,用来放置你的zookeeper,比如:
/Users/zk_chs/something/hadoop/zookeeper-3.4.8-001 /Users/zk_chs/something/hadoop/zookeeper-3.4.8-002 /Users/zk_chs/something/hadoop/zookeeper-3.4.8-003
2、接下来,配置每个zookeeper的cfg文件,这里需要更改conf/zoo_sample.cfg为zoo.cfg,需要更改的内容为:
zookeeper-3.4.8-001/conf/zoo.cfg =============before============ dataDir=/tmp/zookeeper # the port at which the clients will connect clientPort=2181 =============bofore============ =============now=============== dataDir=/Users/zk_chs/something/hadoop/tmp/zk-001/data dataLogDir=/Users/zk_chs/something/hadoop/tmp/zk-001/log # the port at which the clients will connect clientPort=2181 server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 =============now================
clientPort:客户端连接端口,在我们的模拟集群环境中,每个zookeeper服务不能重复。
而server.1=localhost:2287:3387中,2287表示leader通信端口,3387表示leader选举端口。
dataDir表示数据存储目录、dataLogDir表示日志存储目录,需要我们先手动创建好。
之后,再在每个dataDir中分别创建一个myid文件,文件中只有一个数字,即server Id。比如,我们的server.1对应的myid文件内容便是1
另外2个zookeeper如下配置:
zookeeper-3.4.8-002/conf/zoo.cfg =============before============ dataDir=/tmp/zookeeper # the port at which the clients will connect clientPort=2182 =============bofore============ =============now=============== dataDir=/Users/zk_chs/something/hadoop/tmp/zk-002/data dataLogDir=/Users/zk_chs/something/hadoop/tmp/zk-002/log # the port at which the clients will connect clientPort=2182 server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 =============now================
zookeeper-3.4.8-003/conf/zoo.cfg =============before============ dataDir=/tmp/zookeeper # the port at which the clients will connect clientPort=2183 =============bofore============ =============now=============== dataDir=/Users/zk_chs/something/hadoop/tmp/zk-003/data dataLogDir=/Users/zk_chs/something/hadoop/tmp/zk-003/log # the port at which the clients will connect clientPort=2183 server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 =============now================
3、接下来,通过bin/zkServer.sh进行启动:
/Users/zk_chs/something/hadoop/zookeeper-3.4.8-001/bin/zkServer.sh start /Users/zk_chs/something/hadoop/zookeeper-3.4.8-002/bin/zkServer.sh start /Users/zk_chs/something/hadoop/zookeeper-3.4.8-003/bin/zkServer.sh start
使用jps查看java进程:
837 QuorumPeerMain
824 QuorumPeerMain
835 QuorumPeerMain
如果启动成功,这些便是能看到的zookeeper进程了,
还可以使用zkCli.sh进行客户端连接:
/Users/zk_chs/something/hadoop/zookeeper-3.4.8-002/bin/zkCli.sh -server localhost:2183
成功后显示:
[zk: localhost:2183(CONNECTED) 0]
这样以来我们便能使用ls ,create ,delete ,get, set来测试了,使用方式与linux大同小异,另外,rmr可以进行递归删除。
4、使用java连接zookeeper:
个人建议使用开源的zkClient来进行连接,
<dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.8</version> </dependency>
接下来使用zkClient进行zookeeper集群的连接:
public class TestZkClient { private static ZkClient zkClient = new ZkClient("127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"); private static final String node = "/zk_chs"; public static void main(String[] args) throws InterruptedException { testZkClient(); } private static void testZkClient (){ if ( !zkClient.exists(node) ){ zkClient.createPersistent(node, "this is first node"); } System.out.println((String) zkClient.readData(node)); } }
连接zookeeper时,使用单个地址也是可以的,我们在这里使用","对地址进行分隔,是为了容错。
我们还定义了一个"/zk_chs"节点,关于节点的更多内容后续讲解。
上述程序输出:
this is first node
使用zookeeper还可以对节点数据变化进行监听,对上述程序进行扩展:
public class TestZkClient { private static ZkClient zkClient = new ZkClient("127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"); private static final String node = "/zk_chs"; public static void main(String[] args) throws InterruptedException { testZkClient(); subscribeDataChange(); zkClient.writeData(node, "new data"); zkClient.delete(node); Thread.sleep(1000); } private static void testZkClient (){ if ( !zkClient.exists(node) ){ zkClient.createPersistent(node, "this is first node"); } System.out.println((String) zkClient.readData(node)); } private static void subscribeDataChange (){ zkClient.subscribeDataChanges(node, new IZkDataListener() { @Override public void handleDataChange(String dataPath, Object data) throws Exception { System.out.println("node data changed: " + dataPath + ", data: " + data); } @Override public void handleDataDeleted(String dataPath) throws Exception { System.out.println("node data deleted: " + dataPath); } }); } }
最后输出:
this is first node
node data changed: /zk_chs, data: new data
node data deleted: /zk_chs
这次我们对zookeeper先做一个基本的了解,后续再介绍更多的内容。
相关推荐
### Zookeeper 学习笔记 #### 一、Zookeeper 简介与安装配置 **Zookeeper** 是一个分布式协调服务框架,它提供了一种高效可靠的机制来维护集群中的配置信息、命名服务以及提供分布式锁等功能,使得开发人员能够...
Zookeeper_Java客户端Curator
ZooKeeper 学习笔记 ZooKeeper 是一个开源的分布式协调服务,由 Hadoop 的创始人 Doug Cutting 等人开发。它为分布式应用提供了一个高效、可靠的协调机制,帮助开发者快速构建高可用、可扩展的分布式系统。 ...
此外,Watch机制是Zookeeper的关键特性,客户端可以对节点设置Watch,当节点状态改变时,Zookeeper会向客户端发送一次性通知,从而实现事件驱动的通信。 Zookeeper的时间管理是通过Zxid(事务ID)来实现的,每个...
通过编写Java客户端代码,与ZooKeeper服务器交互,创建、读取、更新和删除ZNode,注册和处理Watcher事件,实现具体业务需求。 总的来说,尚硅谷2021年的ZooKeeper笔记提供了一套全面的学习资源,帮助开发者深入了解...
《Zookeeper客户端Java代码实践详解》 Zookeeper是一款分布式协调服务,它为分布式应用程序提供了简单、高效且可靠的命名服务、配置管理、分布式同步和组服务。在Java开发中,我们通常使用Zookeeper的Java客户端来...
【Zookeeper学习笔记】 Zookeeper是一个分布式协调服务,它的核心目标是简化分布式环境下的数据管理与系统协调。作为Apache Hadoop和HBase的重要组件,Zookeeper提供了简单的原语集,支持分布式应用程序之间的通信...
通过深入学习Zookeeper的节点类型和Java客户端的使用,我们可以更好地利用其特性来解决分布式环境下的诸多问题,比如服务发现、配置管理、分布式锁等。结合源码分析,可以进一步理解其实现原理,从而提高问题排查和...
hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记hadoop,hbase,zookeeper安装笔记
ZooKeeper是一个专门为大型分布式系统设计的高可用协调服务,其目标是简化并封装复杂的、易出错的关键服务,提供简单易用的API和高效、稳定的系统给用户。ZooKeeper的功能主要包括配置管理、命名服务、分布式同步...
ZooKeeper Java 客户端是指使用 Java 语言编写的 ZooKeeper 客户端程序,用于连接 ZooKeeper 服务器,使用 ZooKeeper 的功能。 ZooKeeper Java 客户端提供了许多方法来连接 ZooKeeper 服务器,如连接 ZooKeeper ...
3. **junit.jar**:JUnit是一个用于Java语言的单元测试框架,这里可能是为了在开发和测试过程中验证Zookeeper客户端代码的正确性。开发者可以编写JUnit测试用例来测试Zookeeper客户端的功能,确保其按照预期工作。 ...
本文将深入探讨如何使用Java客户端API来对Zookeeper的Znode进行增删改查操作,并讨论同步与异步两种方式的使用。 首先,要使用Java客户端API访问Zookeeper,你需要引入相关的依赖。在Maven项目中,可以在pom.xml...
本文适合但不限于软件开发人员阅读。本文档能够使阅读者对zookeeper有一个宏观且全面的了解,内容主要包含zookeeper架构、数据模型、读写及工作原理、典型应用场景、指令汇总等,
在Java API操作中,Zookeeper提供了丰富的客户端接口供开发者使用。例如,`ZooKeeper`类的`exists()`方法用于检查节点是否存在,`getData()`和`setData()`分别用于读取和更新节点数据,`create()`用于创建节点,`...
**Zookeeper的安装部署**: 1. **下载Zookeeper**:获取最新稳定版。 2. **配置Zookeeper**:编辑`zoo.cfg`,设置数据目录和集群配置(如果是多节点部署)。 3. **启动Zookeeper**:启动单个或多个服务器,形成集群...
### ZooKeeper概述 ZooKeeper,如同其名字所暗示的那样,扮演着“动物园管理员”的角色,主要负责管理和...无论是基础的同步机制还是高级的应用场景,ZooKeeper都能够胜任,并成为分布式应用开发不可或缺的一部分。
Zookeeper 安装部署基本操作 本节课程主要讲解 Zookeeper 的安装部署基本操作,包括 ...通过学习这些内容,我们可以更好地理解 Zookeeper 的安装部署过程,并更好地使用 Zookeeper 来管理和维护我们的服务配置中心。
Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...