示例将以单击模式最简化安装Zookeeper,并分别以ZK客户端和Java API编写 HelloWorld程序。
下载
当前最新: zookeeper-3.4.6.tar.gz
官网下载
我的备份
安装
tar zxvf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6/
#zookeeper无需编译,直接解压就可使用
配置
#修改示例配置文件为指定的zoo.cfg
cd conf
cp zoo_sample.cfg zoo.cfg
#编辑zoo.cfg添加下行参数。其他参数稍后再配,本次只需要指定该zookeeper数据文件存放位置即可
dataDir=/var/tmp/zkdata
#创建该数据文件存放目录
mkdir -p /var/tmp/zkdata
#新建myid标识文件(集群模式中各个zk的身份证,先配着混个脸熟。)
cd /var/tmp/zkdata/
echo '1' > myid
启动
#回到zookeeper安装目录/bin 下,执行开启命令
./zkServer.sh start
#显示如下信息,表示开启正常
JMX enabled by default
Using config: /home/storm/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
检测
#Zookeeper维护通常为4个字母组成的常用命令,很酷炫的样子。
#本例使用ruok(Are you OK?)命令检测开启是否成功
echo ruok | nc localhost 2181
#正常情况下会返回 'imok' = I'm OK.
客户端
#使用zkCli.sh客户端(bin目录下)编写Helloworld
./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
#注意开启zkCli.sh客户端后敲进去的命令是 ls /,因为根目录没有节点,所有返回为空
命令简介:
[zk: localhost:2181(CONNECTED) 0] 即为客户端命令行,输入help可获取具体的命令解释。先预览下面三个简单命令:
1. ls path [watch] :同linux列出内容
2. get path [watch] : 获取znode值
3. set path data [version] : 设置znode值
4. create [-s] [-e] path data acl :
使用示例:
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 2] create /mypath helloword
Created /mypath
[zk: localhost:2181(CONNECTED) 3] ls /
[mypath, zookeeper, futeng]
[zk: localhost:2181(CONNECTED) 4] get /mypath
helloword
cZxid = 0x4b
ctime = Wed May 21 00:19:07 CST 2014
mZxid = 0x4b
mtime = Wed May 21 00:19:07 CST 2014
pZxid = 0x4b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
[zk: localhost:2181(CONNECTED) 5]
仔细看 helloworld 在哪 :)
使用Java API 编写Helloworld
普通Java工程引入zookeeper-3.4.6.jar
包即可。
Maven工程可添加如下依赖:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
创建连接Zookeeper类(该类代码摘自来自《Hadoop权威指南》)
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Watcher.Event.KeeperState;
public class ConnectionWatcher implements Watcher {
private CountDownLatch connectedSignal = new CountDownLatch(1);
private static final int SESSION_TIMEOUT = 5000;
ZooKeeper zk;
public void connect(String hosts) throws InterruptedException, IOException {
zk = new ZooKeeper(hosts, SESSION_TIMEOUT, this);
connectedSignal.await();
}
@Override
public void process(WatchedEvent event) {
if(event.getState() == KeeperState.SyncConnected) {
connectedSignal.countDown();
}
}
public void close() throws InterruptedException {
zk.close();
}
}
创建新建节点和获取节点值类
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs.Ids;
/**
* @author <a href="mailto:ifuteng@gmail.com">futeng</a>
*/
public class HelloZookeeper extends ConnectionWatcher{
public void createNode(String nodeName, String nodeValue)
throws KeeperException, InterruptedException {
String path = "/" + nodeName;
String createPath = zk.create(path, nodeValue.getBytes(),
Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
System.out.println("Created znode:"+createPath);
}
public void getValue(String nodeName) throws KeeperException, InterruptedException {
String path = "/" + nodeName;
byte[] value = zk.getData(path, false, null);
System.out.printf("[%s,%s]", path, new String(value));
}
public static void main(String[] args) throws Exception, IOException {
// 1 - Connect
JoinGroup joinGroup = new JoinGroup();
joinGroup.connect("192.168.80.219");
// 2 - Created node
joinGroup.createNode("hello", "world");
// 3- Get value
joinGroup.getValue("hello");
TimeUnit.HOURS.sleep(1);
}
}
执行显示如下
Created znode:/hello
[/hello,world]
另外官网的zookeeper示例代码也很赞,已经附在文后。
version1.0 first created 2014-05-20
version2.0 删除无用shell显示,精简排版 2014-06-04
转载请标明作者和原文链接
ifuteng#gmail.com 2014/5/20
分享到:
相关推荐
apache-zookeeper-3.7.0-bin.tar.gz
apache-zookeeper-3.6.0.tar.gz
apache-zookeeper-3.5.7-bin.tar.gz 。
apache-zookeeper-3.5.5.tar.gz,zookeeper的安装文件,解压后配置集群即可
最新版linux apache-zookeeper-3.7.0-bin.tar.gz最新版linux apache-zookeeper-3.7.0-bin.tar.gz
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性...window下先解压为apache-zookeeper-3.6.1-bin.tar.gz
zookeeper-3.4.10.tar.gz 安装包
zookeeper-3.4.5-cdh5.16.2.tar.gz 资源包,之前的原网站上无法下载,后经多种途径下载到该资源包,上传到博客上供大家使用。
zookeeper-3.4.9.tar.gz
放在压缩包里了, 在windows下解压出"zookeeper-3.4.14.tar.gz"之后上传至虚拟机即可
apache-zookeeper分布式框架,压缩包内容:(apache-zookeeper-3.7.1-bin.tar.gz、apache-zookeeper-3.7.1.tar.gz、apache-zookeeper-3.6.4-bin.tar.gz、apache-zookeeper-3.6.4.tar.gz、apache-zookeeper-3.5.10-...
最新版 apache-zookeeper-3.6.2-bin.tar.gz最新版 apache-zookeeper-3.6.2-bin.tar.gz
zookeeper-3.4.5-cdh5.10.0.tar.gz工具包用于支持hadoop的高可用热备管理
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是以Fast Paxos算法为基础,实现同步服务,配置维护和命名服务等分布式应用。而使用kafka前必须安装zookeeper。...(文件全称:zookeeper-3.4.13.tar.gz)
apache-zookeeper-3.6.3-bin.tar的压缩包,解压到本地即可使用,还有zk.sh的脚本以及zoo.cfg和xsync。ZooKeeper 是一个分布式协调服务 ,由 Apache 进行维护。ZooKeeper 可以视为一个高可用的文件系统。ZooKeeper ...
zookeeper-3.5.2-alpha.tar.gzzookeeper-3.5.2-alpha.tar.gz
zookeeper,linux系统3.5.8版本
zookeeper 3.5.5版本 ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将...
apache-zookeeper-3.5.9-bin.tar.gz
zookeeper-3.5.8 版本, ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。