单机安装
下载zookeeper3.4.3,解压缩至/usr/zookeeper.
复制conf/zoo_sample.cfg重命名为conf/zoo.cfg,执行命令 > sudo cp conf/zoo_sample.cfg conf/zoo.cfg
修改zoo.cfg文件,编辑为如下:
tickTime=2000 #心跳间隔
dataDir=/home/sulin/zookeeper #数据存放目录
dataLogDir=/usr/zookeeper/logs #日志存放目录,手动存在。如果没有貌似启动不成功
clientPort=2181 #客户端连接端口
# 此时已经可以通过“bin/zkServer.sh start”命令启动zookeeper,然后通过shell访问了zookeeper了
----------后面的配置是为了上面配置的单机版能让其他主机也能访问此zookeeper(其实也是伪分布式)
server.1=218.196.207.186:2888:3888 #2888是zookeeper服务之间的通信端口,3888是zookeeper与其他应用程序之间通信端口。
手动创建数据存放目录(/home/sulin/zookeeper),然后在目录中创建一个叫做"myid"的文件,文件内容为“1”。此处的1与上面的1对应。
分布式配置
和上面的伪分布式配置是一样的,如果是三台的话,zoo.cfg配置为:
tickTime=2000
dataDir=/home/sulin/zookeeper
dataLogDir=/usr/zookeeper/logs
clientPort=2181
server.1=218.196.207.186:2888:3888
server.2=218.196.207.185:2888:3888
server.3=218.196.207.184:2888:3888
然后可以使用rsync指令将第一台机器上的zookeeper文件夹发送至其他两台
> sudo rsync -a /usr/zookeeper UbuntuB:/usr
> sudo rsync -a /usr/zookeeper UbuntuC:/usr
之后在其余两台机器上面手动创建dataDir文件夹,并且新建myid文件,写入自己的序号1/2/3。
然后分别在三台机器上面启动zookeeper服务:> bin/zooService.sh start
注意:一定要谨记将logs文件夹重建,因为里面的version-2里面会保存原有记录,此记录有可能与新集群有冲突。
注意:还有dataDir也要重建,原有的节点快照都会导致新集群出现问题。下面就是dataDir忘记重建出现的读取快照失败错误
下面是一个比较简单的测试程序,此程序改编自ZooKeeper官方文档中的例子:
package net.sulin.hbase.test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.zookeeper.AsyncCallback.StatCallback;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.KeeperException.Code;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.apache.zookeeper.data.Stat;
/**
*
* @author sulin
* @date 2012-8-2 上午08:59:50
*/
@SuppressWarnings("deprecation")
public class ZooKeeperTest01 implements Watcher, Runnable, StatCallback{
private static String znode = "/test";
public ZooKeeper zk;
public Stat stat;
public ZooKeeperTest01(String hostPort, String znode, String filename) {
try {
zk = new ZooKeeper(hostPort, 5000, this);
} catch (IOException e) {
e.printStackTrace();
}
try {
if(zk.exists(znode, false) == null){
// 创建节点,权限随便设置了。
Id id = new Id("ip", "218.196.207.187");
ACL acl = new ACL(ZooDefs.Perms.ALL, id);
List<ACL> acls = new ArrayList<ACL>();
acls.add(acl);
zk.create(znode, Bytes.toBytes("这是第一次放入的数据"), acls, CreateMode.PERSISTENT);
}
stat = new Stat();
System.out.println("第一次读到的数据: " + Bytes.toString(zk.getData(znode,true,stat)));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ZooKeeperTest01 temp = new ZooKeeperTest01("218.196.207.185:2181,218.196.207.184:2181,218.196.207.186:2181", znode, "");
new Thread(temp).start();
// 其他线程已启动
try {
temp.zk.setData(znode, Bytes.toBytes("第二次放入的数据"), temp.stat.getVersion());
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (temp) {
try {
temp.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void run() {
synchronized(this){
try {
wait();
} catch (InterruptedException e) {
}
}
}
public void close(){
synchronized(this){
this.notifyAll();
}
}
/**
* 监视事件被触发时执行此方法。
*/
public void process(WatchedEvent event) {
String path = event.getPath();
if(event.getType() == Event.EventType.None){
// 节点没有发生改变,无节点创建、无接点删除、节点数据未改变、子节点未改变
// 那么说明可能是会话状态发生了改变
switch(event.getState()){
case SyncConnected:
// 此客户端处于连接状态,不需要做任何事
break;
case Expired:
// 会话失效,结束
this.close();
break;
}
}else{
// 状态改变了,检查是否znode节点值改变。如果改变则取出
if(path != null && path.equals(znode)){
zk.exists(znode, true, this, null);
}
}
}
/**
* 状态回调方法,此方法被执行的触发条件是
* 在异步请求exists方法时,如果节点状态已经改变则执行此方法。
*/
public void processResult(int rc, String path, Object ctx, Stat stat) {
boolean exists = false;
/**
* 现在ZooKeeper已经将异常代码换为枚举类型而不是静态int常量
* 可以用KeeperException.Code.get(rc)获取rc的枚举类型。
*/
switch(rc){
case Code.Ok:
// 一切完好
exists = true;
break;
case Code.NoNode:
// 节点不存在
exists = false;
break;
case Code.SessionExpired:
case Code.NoAuth:
// 结束
this.close();
break;
default:
// 其他错误,重新尝试。。。
zk.exists(znode, false, this, null);
return ;
}
byte[] buf = null;
if(exists){
try {
buf = zk.getData(znode, false, null);
} catch (KeeperException e) {
// 前面已经处理了此异常,此处不必处理
} catch (InterruptedException e) {
// 线程中断?事件线程中断?
return;
}
}
// 读到了数据,简单打印看看了事
System.out.println("第二次异步读到的数据:" + Bytes.toString(buf));
}
}
执行的就是创建一个/test节点,之后放入一个数据,读出打印出来,同时设置监视器。
当第二次放入数据时,监视器会被触发,之后异步读取新数据并打印出来:
第一次读到的数据: 这是第一次放入的数据
第二次异步读到的数据:第二次放入的数据
- 大小: 11.1 KB
分享到:
相关推荐
Zookeeper双机房容灾方案,以5个zk实例为例 本文在最前面给出操作该集群用的的知识 然后针对可能出现的问题,需要确认的事项进行测试 在最后给出本文的Zookeeper容灾方案
主要介绍了在Java中操作Zookeeper的示例代码详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
主要介绍了centos6使用docker部署zookeeper操作,结合实例形式分析了centos6平台使用docker部署zookeeper相关命令与使用技巧,需要的朋友可以参考下
一个UI仪表板,允许在Zookeeper上进行CRUD操作。 要求 需要Java 7才能运行。 设置 mvn全新安装 将config.cfg复制到带有jar文件的文件夹中。 修改它以指向zookeeper实例。 多个zk实例以逗号分隔。 例如:server1:...
所有操作都隐式排除/ zookeeper路径。 请尝试不要与生产实例一起使用。 将正在运行的zk实例中的数据导出(读取)到文件中保持数据可编辑 从另一个zk实例导入(写入)完整(或部分)导出 清除(删除)正在运行的zk...
zookeeper节点操作 zookeeper节点操作 节点创建,删除,遍历 节点数据读写 节点类型 节点类型 持久节点 PERSISTENT 持久顺序节点 PERSISTENT_SEQUENTIAL 临时节点 EPHEMERAL 临时顺序节点 EPHEMERAL_SEQUENTIAL ...
ZooKeeper运算符概述ZooKeeper Operator将管理...安装您可以按照安装指南将该操作员部署到K8s集群。 此外,请遵循样本部署指南以尝试将样本部署到K8s集群。 版本和依存关系组件\版本0.5.0 1.0.0 1.1.0 动物园管理员3.5.
Hadoop简单应用案例,包括MapReduce、单词统计、HDFS基本操作、web日志分析、Zookeeper基本使用、Hive简单操作等
ZooKeeperStart系统环境jdk版本:jdk1.8zookeeper版本: 3.4.11操作系统版本:Ubuntu 5.4.0zookeeper常见知识权限create:创建子节点read:获取节点/子节点write:设置节点数据delete:删除子节点admin:设置权限打开...
第7章 zookeeper基本组成与工作流程 27 第8章 zookeeper的leader节点选择 31 第9章 zookeeper安装 33 第10章 zookeeper 命令行接口 35 第11章 zookeeper应用程序接口 39 第12章 zookeeper应用 40 第三部分 KAFKA学习...
实现了对Zookeeper实例的统一管理。 前台使用了Bootstrap,基于gentelella主题实现。后台使用了Spring MVC,Mybatis,Curator等技术。Jar包管理通过Maven来实现。数据库选用了Mysql。 下载安装 下载 通过如下命令从...
最大的好处是,在设计AJAX网络应用程序时,轻松简便的操作就像设计桌面程序一样。 ZK包含了一个以AJAX为基础、事件驱动(event-driven)、高互动性的引擎,同时还提供了丰富多样、可重复使用的XUL与HTML组件,以及以...
全书共12章,大致分为3个部分,第1部分(第1~7章)讲解Hadoop的原生态组件,包括Hadoop、ZooKeeper、HBase、Hive环境搭建与安装,以及介绍MapReduce、HDFS、ZooKeeper、HBase、Hive原理和Apache版本环境下实战操作。...
注意:zookeeper3.4.13和hbase2.2.2都是采用docker-compose方式部署 ...说明:使用外部zookeeper之hbase2.2.2一键部署工具,支持部署、启动、停止、... deploy.sh clear single *危险操作* 清除hbase-single容器及所有数据
Hadoop简单应用案例,包括MapReduce、单词统计、HDFS基本操作、web日志分析、Zookeeper基本使用、Hive简单操作等
注意:zookeeper3.4.13和hbase2.3.5都是采用docker-compose方式部署 ...说明:使用外部zookeeper3.4.13之hbase2.3.5一键部署工具,支持部署、启动、... deploy.sh clear single *危险操作* 清除hbase-single容器及所有数据
安装和运行ZooKeeper 示例 ZooKeeper中的组成员关系 创建组 加入组 列出组成员 ZooKeeper服务 数据模型 操作 实现 一致性 会话 状态 使用ZooKeeper来构建应用 配置服务 具有可恢复性的ZooKeeper应用 锁服务 生产环境...
本书是Hadoop权威参考,程序员可从中探索如何分析海量数据集,管理员可以从中了解如何安装与运行Hadoop集群。 目录 第1章 初识Hadoop 数据!数据! 数据存储与分析 与其他系统相比 关系型数据库管理系统...
目录:网盘文件永久链接 ...10.2.1 Flume操作实例 11.1.1 Kafka分布式消息订阅系统 12.1.1 ZooKeeper集群分布式协调服务 13.1.1 FusionInsight HD 解决方案介绍 (1) 13.2.1 FusionInsight HD 解决方案介绍 (2