Zookeeper 入门手册.docx
- 文档编号:6238074
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:27
- 大小:189.34KB
Zookeeper 入门手册.docx
《Zookeeper 入门手册.docx》由会员分享,可在线阅读,更多相关《Zookeeper 入门手册.docx(27页珍藏版)》请在冰点文库上搜索。
Zookeeper入门手册
ZOOKEEPER入门手册
北京先进数通信息技术有限公司
EAIS
编写说明
标题:
ZOOKEEPER入门练习
类别:
文档
存放位置:
编辑软件:
MicrosoftWordXP中文版
版本历史:
版本
作者
日期
备注
V1.0
梅光弦
2012-12-4
编写目的:
通过简单的例子程序循序渐进地学习ZOOKEEPER的开发应用。
本文档由产品组维护,供各项目组使用。
目录
编写说明2
目录3
1.1.本文目的4
1.2.阅读建议4
2.起步4
2.1.DEMO00搭建ZOOKEEPER集群服务器4
2.1.1.功能概述4
2.1.2.开发过程4
2.1.3.执行效果4
2.2.DEMO01ZOOKEEPER基本操作5
2.2.1.功能概述5
2.2.2.开发过程5
2.2.3.执行效果16
2.3.DEMO002Zookeeper临时节点16
2.3.1.功能描述16
2.3.2.开发过程16
2.3.3.执行效果18
2.4.DEMO003监控Zookeeper节点18
2.4.1.功能描述18
2.4.2.开发过程18
2.4.3.执行效果23
前言
1.1.本文目的
本文是Zookeeper开发的入门手册,将会在一个最简单的例子入手,为读者逐渐深入地介绍Zookeeper上的应用开发。
1.2.阅读建议
本文假定读者是一个Unix系统下的开发人员,有一定的应用编程经验,熟悉J2EE的应用开发。
请参考提供的对应DEMO包,对应下面的章节,一步一步对照开发。
2.起步
本章的目的在于,通过循序渐进的练习,让初学者了解ZOOKEEPER的基本概念,掌握开发方法,具备实际应用的能力。
2.1.DEMO00搭建ZOOKEEPER集群服务器
2.1.1.功能概述
在一台机器上搭建一个由3个Server组成的ZOOKEEPER伪集群服务器,可以进行集群服务的启动、停止。
2.1.2.开发过程
1、参考《ZOOKEEPER介绍v1.0.doc》,搭建一个伪集群服务器。
2.1.3.执行效果
在ZOOKEEPER集群的每个服务器的../zookeeper/bin目录下,运行shzkServer.shstart,当出现以下界面说明ZOOKEEPER启动成功。
zookeeper/bin目录下,运行zkCli.sh–server172.16.4.224:
2181(IP、端口与实际配置一致)。
当出现以下界面说明已经成功连接上ZOOKEEPER客户端。
2.2.DEMO01ZOOKEEPER基本操作
2.2.1.功能概述
熟悉Zookeeper的API,练习Zookeeper的增、删、改、查操作。
2.2.2.开发过程
1、Eclipse新建一个Java工程,导入Zookeeper依赖的jar包
2、编写增、删、改、查的代码。
packagezookeeper;
importjava.io.IOException;
importjava.util.List;
importorg.apache.zookeeper.KeeperException;
/**
*@类名ZkServer.java
*@描述:
*zookeeper的操作封装接口,实现了常用的操作
*创建、销毁、写入、修改、查询等。
*@作者梅光弦
*@创建时间2012-12-4下午02:
49:
58
*@版本v1.0
*/
publicinterfaceZkServer{
/**
*
*@paramaddress
*@paramserverName
*@throwsIOException
*/
publicvoidinit(Stringaddress)throwsIOException;
/**
*
*@throwsInterruptedException
*/
publicvoiddestroy()throwsInterruptedException;
/**
*
*@parampath
*@return
*@throwsKeeperException
*/
publicList
/**
*
*@parampath
*@return
*@throwsKeeperException
*@throwsInterruptedException
*/
publicStringgetData(Stringpath)throwsKeeperException,InterruptedException;
/**
*
*@parampath
*@paramdata
*@throwsKeeperException
*/
publicvoidchangeData(Stringpath,Stringdata)throwsKeeperException,InterruptedException;
/**
*
*@parampath
*@paramdata
*@throwsKeeperException
*@throwsInterruptedException
*/
publicvoidappendTempNode(Stringpath,Stringdata)throwsKeeperException,InterruptedException;
/**
*
*@parampath
*@paramdata
*@throwsKeeperException
*@throwsInterruptedException
*/
publicvoidappendPresistentNode(Stringpath,Stringdata)throwsKeeperException,InterruptedException;
/**
*
*@parampath
*@throwsKeeperException
*@throwsInterruptedException
*/
publicvoiddelNode(Stringpath)throwsKeeperException,InterruptedException;
/**
*
*@parampath
*@return
*@throwsKeeperException
*@throwsInterruptedException
*/
publicbooleanexist(Stringpath)throwsKeeperException,InterruptedException;
}
packagezookeeper;
importjava.io.IOException;
importjava.util.HashMap;
importjava.util.List;
importorg.apache.zookeeper.CreateMode;
importorg.apache.zookeeper.KeeperException;
importorg.apache.zookeeper.WatchedEvent;
importorg.apache.zookeeper.Watcher;
importorg.apache.zookeeper.ZooKeeper;
importorg.apache.zookeeper.ZooDefs.Ids;
/**
*@类名ZkServerImpl.java
*@描述:
*TODO
*@作者梅光弦
*@创建时间2012-12-4下午02:
53:
47
*@版本v1.0
*/
publicclassZkServerImplimplementsZkServer,Watcher{
privateZooKeeperzk=null;
publicvoidappendPresistentNode(Stringpath,Stringdata)
throwsKeeperException,InterruptedException{
if(zk!
=null){
//创建一个节点root,数据是mydata,不进行ACL权限控制,节点为永久性的(即客户端shutdown了也不会消失)
/**
*创建一个给定的目录节点path,并给它设置数据,
*CreateMode标识有四种形式的目录节点,分别是
*PERSISTENT:
持久化目录节点,这个目录节点存储的数据不会丢失;
*PERSISTENT_SEQUENTIAL:
顺序自动编号的目录节点,这种目录节点会根据当前已近存在的节点数自动加1,然后返回给客户端已经成功创建的目录节点名;
*EPHEMERAL:
临时目录节点,一旦创建这个节点的客户端与服务器端口也就是session超时,这种节点会被自动删除;
*EPHEMERAL_SEQUENTIAL:
临时自动编号节点
*/
zk.create(path,data.getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
}
}
publicvoidappendTempNode(Stringpath,Stringdata)
throwsKeeperException,InterruptedException{
if(zk!
=null){
//创建一个节点root,数据是mydata,不进行ACL权限控制,节点为永久性的(即客户端shutdown了也不会消失)
/**
*创建一个给定的目录节点path,并给它设置数据,
*CreateMode标识有四种形式的目录节点,分别是
*PERSISTENT:
持久化目录节点,这个目录节点存储的数据不会丢失;
*PERSISTENT_SEQUENTIAL:
顺序自动编号的目录节点,这种目录节点会根据当前已近存在的节点数自动加1,然后返回给客户端已经成功创建的目录节点名;
*EPHEMERAL:
临时目录节点,一旦创建这个节点的客户端与服务器端口也就是session超时,这种节点会被自动删除;
*EPHEMERAL_SEQUENTIAL:
临时自动编号节点
*/
zk.create(path,data.getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
}
}
publicvoidchangeData(Stringpath,Stringdata)throwsKeeperException,
InterruptedException{
if(zk!
=null){
//修改节点下的数据,第三个参数为版本,如果是-1,那会无视被修改的数据版本,直接改掉
zk.setData(path,data.getBytes(),-1);
}
}
publicvoiddelNode(Stringpath)throwsKeeperException,
InterruptedException{
if(zk!
=null){
zk.delete(path,-1);
}
}
publicvoiddestroy()throwsInterruptedException{
if(zk!
=null){
zk.close();
}
}
publicbooleanexist(Stringpath)throwsKeeperException,
InterruptedException{
if(zk!
=null){
returnzk.exists(path,true)!
=null;
}
returnfalse;
}
publicList
InterruptedException{
if(zk!
=null){
returnzk.getChildren(path,true);
}
returnnull;
}
publicStringgetData(Stringpath)throwsKeeperException,
InterruptedException{
if(zk!
=null){
byte[]b=zk.getData(path,true,null);
returnnewString(b);
}
returnnull;
}
publicvoidinit(Stringaddress)throwsIOException{
zk=newZooKeeper(address,50000,this);
}
publicvoidprocess(WatchedEventarg0){
}
}
packagetest;
importjava.io.IOException;
importorg.apache.zookeeper.KeeperException;
importzookeeper.ZkServer;
importzookeeper.ZkServerImpl;
/**
*@类名ZkTest.java
*@描述:
*TODO
*@作者梅光弦
*@创建时间2012-12-4下午03:
05:
02
*@版本v1.0
*/
publicclassZkTest{
privatestaticfinalStringhosts="172.16.5.224:
2181,172.16.5.224:
2182,172.16.5.224:
2183";
/**
*创建永恒节点
*/
publicvoidtestCreatePersistentNodes(){
ZkServerzkServer=newZkServerImpl();
try{
zkServer.init(hosts);
Stringpath="App1";
if(!
zkServer.exist(path)){
zkServer.appendPresistentNode(path,"App1");
}
}catch(IOExceptione){
e.printStackTrace();
}catch(KeeperExceptione){
e.printStackTrace();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
/**
*获取节点的数据
*/
publicvoidtestGetNodeData(){
ZkServerzkServer=newZkServerImpl();
try{
zkServer.init(hosts);
Stringpath="App1";
if(!
zkServer.exist(path)){
Stringtemp=zkServer.getData(path);
System.out.println(temp);
}
}catch(IOExceptione){
e.printStackTrace();
}catch(KeeperExceptione){
e.printStackTrace();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
/**
*修改节点的数据
*/
publicvoidtestUpdateNodes(){
ZkServerzkServer=newZkServerImpl();
try{
zkServer.init(hosts);
Stringpath="App1";
if(!
zkServer.exist(path)){
zkServer.changeData(path,"App_changed");
}
}catch(IOExceptione){
e.printStackTrace();
}catch(KeeperExceptione){
e.printStackTrace();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
/**
*删除节点
*/
publicvoidtestDelNodes(){
ZkServerzkServer=newZkServerImpl();
try{
zkServer.init(hosts);
Stringpath="App1";
if(!
zkServer.exist(path)){
zkServer.delNode(path);
}
}catch(IOExceptione){
e.printStackTrace();
}catch(KeeperExceptione){
e.printStackTrace();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
packagetest;
importjava.io.IOException;
importjunit.framework.TestCase;
importorg.apache.zookeeper.KeeperException;
importzookeeper.ZkServer;
importzookeeper.ZkServerImpl;
/**
*@类名ZkTest.java
*@描述:
*TODO
*@作者梅光弦
*@创建时间2012-12-4下午03:
05:
02
*@版本v1.0
*/
publicclassZkTestextendsTestCase{
privatestaticfinalStringhosts="172.16.5.224:
2181,172.16.5.224:
2182,172.16.5.224:
2183";
/**
*创建永恒节点
*/
publicvoidtestCreatePersistentNodes(){
ZkServerzkServer=newZkServerImpl();
try{
zkServer.init(hosts);
Stringpath="/App1";
if(!
zkServer.exist(path)){
zkServer.appendPresistentNode(path,"NodeApp1'sDataisApp1");
}
}catch(IOExceptione){
e.printStackTrace();
}catch(KeeperExceptione){
e.printStackTrace();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
/**
*获取节点的数据
*/
publicvoidtestGetNodeData(){
ZkServerzkServer=newZkServerImpl();
try{
zkServer.init(hosts);
Stringpath="/App1";
if(zkServer.exist(path)){
Stringtemp=zkServer.getData(path);
System.out.println(temp);
}
}catch(IOExceptione){
e.printStackTrace();
}catch(KeeperExceptione){
e.printStackTrace();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
/**
*修改节点的数据
*/
publicvoidtestUpdateNodes(){
ZkServerzkServer=newZkServerImpl();
try{
zkServer.init(hosts);
Stringpath="/App1";
if(!
zkServer.exist(path)){
zkServer.changeData(path,"NodeApp1'sDataisApp1Changed");
}
}catch(IOExceptione){
e.printStackTrace();
}catch(KeeperExcept
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Zookeeper 入门手册 入门 手册