第一个ZooKeeper客户端程序
Posted zmycoco2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一个ZooKeeper客户端程序相关的知识,希望对你有一定的参考价值。
我们可以采用新建一个工程,然后导入ZooKeeper.3.4.7.jar包,接着编写独立的JAVA程序的方式来实现演示工作,如果采用这种方式,需要javac –cp命令编译java文件,并使用java –cp命令运行编译后的文件。这里不采用这种方式,而是采用ZooKeeper自带的源代码程序,新创建一个test文件夹,如图所示。
图1-3 ZooKeeper程序目录图
新建了test文件夹,位于“org.apache.zookeeper”这个package[1]下面。接下来编写第一个ZooKeeper程序,如清单所示。
清单 第一个ZooKeeper程序
package org.apache.zookeeper.test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;
public class MyFirstZooKeeperClass
public static voidmain(String[] args) throws IOException
String hostPort ="172.10.201.53:2182";
String zpath ="/";
List <String> zooChildren = newArrayList<String>();
ZooKeeper zk = newZooKeeper(hostPort,2000,null);
if(zk != null)
try
zooChildren = zk.getChildren(zpath,false);
System.out.println("Znodes of'/':");
for(String child:zooChildren)
System.out.println(child);
catch(KeeperException ex)
ex.printStackTrace();
catch (InterruptedException e)
// TODOAuto-generated catch block
e.printStackTrace();
图 程序流程图
清单所示程序流程如上面这张图所示。首先我们导入了org.apache.zookeeper包下所有的类,因为这个包内部包含了所有客户端与ZooKeeper连接的类和接口,所以导入后能够满足我们的需求。
所有我们编写的代码都在main函数里面,首先我们定义了String变量hostPort,该变量在调用ZooKeeper构造函数的时候会被用到,ZooKeeper构造函数用于构建客户端和服务端的连接(Live Session),并且返回一个句柄(handle)用于后续在Session有效期内自由访问ZooKeeper服务。
ZooKeeper构造函数ZooKeeper(String connectString,intsessionTimeout,Watcher watcher)包含几个参数:
Ø connectString:代表服务端地址,如代码中所示的172.10.201.53:2182,172.10.201.53是IP地址,2182是端口号;
Ø sessionTimeout:代表会话超期时间,单位是毫秒,这里设置为2000毫秒,即2秒钟。这个值被ZooKeeper服务端用来计算客户端和它之间的心跳时间,如果超过2秒钟没有收到心跳,ZooKeeper服务端就认为客户端离线。
Ø Watcher:一个Watcher对象,可以为空,我们程序里定义为Null。如果我们设置了Watcher对象,我们必须自己定义一个实现了Watcher接口的泪,这个类用来处理收到的ZooKeeper节点变化情况,所以顾名思义,Watcher就是监视着ZooKeeper服务端的变化。
除了上面这些参数以外,我们还有其他的参数,这里不多做介绍。
接下来调用返回的句柄的getChildren方法,该方法ZPath参数和Watch参数来访问ZooKeeper服务端并返回ZNode信息,程序中ZPath设置为根目录,Watch设置为Null。最后通过for语句循环打印ZNode信息并设置异常抛出机制。
清单 第一个ZooKeeper程序运行输出
[root@node3 bin]# java -cp $CLASSPATHorg.apache.zookeeper.test.MyFirstZooKeeperClass
2016-01-19 16:41:32,161 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.7--1,built on 01/07/2016 05:40 GMT
2016-01-19 16:41:32,165 [myid:] - INFO [main:Environment@100] - Client environment:host.name=node3
2016-01-19 16:41:32,165 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.7.0_79
2016-01-19 16:41:32,166 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=OracleCorporation
2016-01-19 16:41:32,168 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/lib/jdk1.7.0_79/jre
2016-01-19 16:41:32,168 [myid:] - INFO [main:Environment@100] - Clientenvironment:java.class.path=/home/zhoumingyao/zookeeper-3.4.7/bin/../build/classes:/home/zhoumingyao/zookeeper-3.4.7/bin/../build/lib/*.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../lib/slf4j-api-1.6.1.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../lib/netty-3.7.0.Final.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../lib/log4j-1.2.16.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../lib/jline-0.9.94.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../zookeeper-3.4.7.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../src/java/lib/*.jar:/home/zhoumingyao/zookeeper-3.4.7/bin/../conf:.:/usr/lib/jdk1.7.0_79/lib:/usr/lib/jdk1.7.0_79/jre/lib:
2016-01-19 16:41:32,168 [myid:] - INFO [main:Environment@100] - Clientenvironment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2016-01-19 16:41:32,169 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2016-01-19 16:41:32,169 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2016-01-19 16:41:32,169 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2016-01-19 16:41:32,169 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2016-01-19 16:41:32,169 [myid:] - INFO [main:Environment@100] - Clientenvironment:os.version=2.6.32-220.el6.x86_64
2016-01-19 16:41:32,169 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2016-01-19 16:41:32,169 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2016-01-19 16:41:32,170 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/usr/lib/zookeeper-3.4.6/bin
2016-01-19 16:41:32,171 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection,connectString=172.10.201.53:2182 sessionTimeout=2000 watcher=null
2016-01-19 16:41:32,209 [myid:] - INFO [main-SendThread(172.10.201.53:2182):ClientCnxn$SendThread@1032] -Opening socket connection to server 172.10.201.53/172.10.201.53:2182. Will notattempt to authenticate using SASL (unknown error)
2016-01-19 16:41:32,214 [myid:] - INFO [main-SendThread(172.10.201.53:2182):ClientCnxn$SendThread@876] - Socketconnection established to 172.10.201.53/172.10.201.53:2182, initiating session
2016-01-19 16:41:32,255 [myid:] - INFO [main-SendThread(172.10.201.53:2182):ClientCnxn$SendThread@1299] -Session establishment complete on server 172.10.201.53/172.10.201.53:2182,sessionid = 0x352590b5be60000, negotiated timeout = 4000
2016-01-19 16:41:32,260 [myid:] - ERROR[main-EventThread:ClientCnxn$EventThread@532] - Error while calling watcher
java.lang.NullPointerException
atorg.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:530)
atorg.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:505)
Znodes of'/':
[zookeeperroot]
hadoop-ha
zookeeper
HMS
从上面的程序运行结果可以看到,输出的最后几行代表了我们的打印记录,ZooKeeper根目录节点下包含了hadoop-ha、zookeeper和HMS三个节点。
[1] Java中的一个包就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起。这个名称空间就是包名。
欢迎关注麦克叔叔每晚10点说,感兴趣的朋友可以关注公众号,让我们一起学习与交流。
以上是关于第一个ZooKeeper客户端程序的主要内容,如果未能解决你的问题,请参考以下文章