设为首页 收藏本站
查看: 1018|回复: 0

[经验分享] Zookeeper入门

[复制链接]

尚未签到

发表于 2017-4-19 07:09:30 | 显示全部楼层 |阅读模式
  示例将以单击模式最简化安装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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-366063-1-1.html 上篇帖子: Zookeeper入门 下篇帖子: springmvc+dubbo+zookeeper
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表