- 浏览: 115025 次
- 性别:
- 来自: 上海
最新评论
-
张延龙地盘:
天下文章一大抄
zookeeper学习笔记-zkclient,curator使用 -
xuehanxin:
笨猪会费 写道你是看书学习的还是学校学习?自学的
maven学习笔记第一节一-maven install 模块之间相互引用 -
笨猪会费:
你是看书学习的还是学校学习?
maven学习笔记第一节一-maven install 模块之间相互引用 -
lianglong2000:
非常感谢!
Netty笔记一(可以运行看到结果的简单例子) -
beijishiqidu:
终于知道为什么了,端口冲突了。
Ubuntu中最重要的命令
开源客户端,原生api的不足
连接的创建是异步的,需要开发人员自行编码实现等待
连接没有自动的超时重连机制
Zk本身没提供序列化机制,需要开发人员自行指定,从而实现数据的序列化和反序列化
Watcher注册一次只会生效一次,需要不断的重复注册
Watcher的使用方式不符合java本身的术语,如果采用监听器方式,更容易理解
不支持递归创建树形节点
开源客户端---ZkClient介绍
Github上一个开源的zk客户端,由datameer的工程师Stefan Groschupf和Peter Voss一起开发
– 解决session会话超时重连
– Watcher反复注册
– 简化开发api
– 还有.....
– https://github.com/sgroschupf/zkclient
开源客户端---Curator介绍
1. 使用CuratorFrameworkFactory工厂的两个静态方法创建客户端
a) static CuratorFramework newClient(String connectString, int sessionTimeoutMs, int connectionTimeoutMs,
RetryPolicy retryPolicy)
b) static CuratorFramework newClient(String connectString, RetryPolicy retryPolicy)
2. Start()方法启动
参数说明
connectString 分开的ip:port对
retryPolicy 重试策略,默认四种:Exponential BackoffRetry,RetryNTimes ,RetryOneTime,
RetryUntilElapsed
sessionTimeoutMs 会话超时时间,单位为毫秒,默认60000ms
connectionTimeoutMs 连接创建超时时间,单位为毫秒,默认是15000ms
重试策略
– 实现接口RetryPolicy可以自定重重试策略
• boolean allowRetry(int retryCount, long elapsedTimeMs, RetrySleeper sleeper)
retryCount 已经重试的次数,如果第一次重试 此值为0
elapsedTimeMs 重试花费的时间,单位为毫秒
sleeper 类似于Thread.sleep,用于sleep指定时间
返回值 如果还会继续重试,则返回true
四种默认重试策略
– ExponentialBackoffRetry
• ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries)
• ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries, int maxSleepMs)
• 当前应该sleep的时间: baseSleepTimeMs * Math.max(1, random.nextInt(1 << (retryCount + 1))),随着重试次数增加重试时间间隔变大,指数倍增长
参数说明
baseSleepTimeMs 初始sleep时间
maxRetries 最大重试次数
maxSleepMs 最大重试时间
返回值 如果还会继续重试,则返回true
默认重试策略
– RetryNTimes
• RetryNTimes(int n, int sleepMsBetweenRetries)
• 当前应该sleep的时间
参数说明
n 最大重试次数
sleepMsBetweenRetries 每次重试的间隔时间
– RetryOneTime
• 只重试一次
• RetryOneTime(int sleepMsBetweenRetry), sleepMsBetweenRetry为重试间隔的时间
默认重试策略
– RetryUntilElapsed
• RetryUntilElapsed(int maxElapsedTimeMs, int sleepMsBetweenRetries)
• 重试的时间超过最大时间后,就不再重试
参数说明
maxElapsedTimeMs 最大重试时间
sleepMsBetweenRetries 每次重试的间隔时间
Fluent风格的API
– 定义:一种面向对象的开发方式,目的是提高代码的可读性
– 实现方式:通过方法的级联或者方法链的方式实现
– 举例:
zkclient = CuratorFrameworkFactory.builder().connectString(connectString).sessionTimeoutMs(5000).retryPolicy(retryPolicy).namespace("tests").build();
创建节点
– 构建操作包装类(Builder): CreateBuilder create()---- CuratorFramework
– CreateBuilder
• creatingParentsIfNeeded() //递归创建父目录
• withMode(CreateMode mode)//设置节点属性,比如:CreateMode.PERSISTENT,如果是递归创建,创建模式
为临时节点,则只有叶子节点是临时节点,非叶子节点都为持久节点
• withACL(List aclList) //设置acl
• forPath(String path) //指定路劲
删除节点
– 构建操作包装类(Builder):DeleteBuilder delete() -----CuratorFramework
– DeleteBuilder
• withVersion(int version) //特定版本号
• guaranteed() //确保节点被删除
• forPath(String path) //指定路径
• deletingChildrenIfNeeded() //递归删除所有子节点
关于guaranteed:
Solves edge cases where an operation may succeed on the server but connection failure
occurs before a response can be successfully returned to the client
意思是:解决当某个删除操作在服务器端可能成功,但是此时客户端与服务器端的连接中断,而删除的响
应没有成功返回到客户端
底层的本质是重试
关于异步操作
– inBackground()
– inBackground(Object context)
– inBackground(BackgroundCallback callback)
– inBackground(BackgroundCallback callback, Object context)
– inBackground(BackgroundCallback callback, Executor executor)
– inBackground(BackgroundCallback callback, Object context, Executor executor)
从参数看跟zk的原生异步api相同,多了一个线程池,用于执行回调
读取数据
– 构建操作包装类(Builder): GetDataBuilder getData() -----CuratorFramework
– GetDataBuilder
• storingStatIn(org.apache.zookeeper.data.Stat stat) //把服务器端获取的状态数据存储到stat对象
• Byte[] forPath(String path)//节点路径
读取子节点
– 构建操作包装类(Builder): GetChildrenBuilder getChildren() -----CuratorFramework
– GetChildrenBuilder
• storingStatIn(org.apache.zookeeper.data.Stat stat) //把服务器端获取的状态数据存储到stat对象
• Byte[] forPath(String path)//节点路径
• usingWatcher(org.apache.zookeeper.Watcher watcher) //设置watcher,类似于zk本身的api,也只能使用一次
• usingWatcher(CuratorWatcher watcher) //设置watcher ,类似于zk本身的api,也只能使用一次
设置watcher
– NodeCache
• 监听数据节点的内容变更
• 监听节点的创建,即如果指定的节点不存在,则节点创建后,会触发这个监听
– PathChildrenCache
• 监听指定节点的子节点变化情况
• 包括:新增子节点 子节点数据变更 和子节点删除
NodeCache
– 构造函数
• NodeCache(CuratorFramework client, String path)
• NodeCache(CuratorFramework client, String path, boolean dataIsCompressed)
参数说明
client 客户端实例
path 数据节点路径
dataIsCompressed 是否进行数据压缩
– 回调接口
• public interface NodeCacheListener
void nodeChanged() //没有参数,怎么获取事件信息以及节点数据?
PathChildrenCache
client 客户端实例
path 数据节点路径
dataIsCompressed 是否进行数据压缩
cacheData 用于配置是否把节点内容缓存起来,如果配置为true,那么客户端在接
收到节点列表变更的同时,也能够获取到节点的数据内容,如果为false
则无法取到数据内容
threadFactory 通过这两个参数构造专门的线程池来处理事件通知
executorService
PathChildrenCache
– 监听接口
• 时间类型包括:新增子节点(CHILD_ADDED),子节点数据变更(CHILD_UPDATED),子节点删除(CHILD_REMOVED)
– PathChildrenCache.StartMode
• BUILD_INITIAL_CACHE //同步初始化客户端的cache,及创建cache后,就从服务器端拉入对应的数据
• NORMAL //异步初始化cache
• POST_INITIALIZED_EVENT //异步初始化,初始化完成触发事件PathChildrenCacheEvent.Type.INITIALIZED
zkclient举例
curator举例
连接的创建是异步的,需要开发人员自行编码实现等待
连接没有自动的超时重连机制
Zk本身没提供序列化机制,需要开发人员自行指定,从而实现数据的序列化和反序列化
Watcher注册一次只会生效一次,需要不断的重复注册
Watcher的使用方式不符合java本身的术语,如果采用监听器方式,更容易理解
不支持递归创建树形节点
开源客户端---ZkClient介绍
Github上一个开源的zk客户端,由datameer的工程师Stefan Groschupf和Peter Voss一起开发
– 解决session会话超时重连
– Watcher反复注册
– 简化开发api
– 还有.....
– https://github.com/sgroschupf/zkclient
开源客户端---Curator介绍
1. 使用CuratorFrameworkFactory工厂的两个静态方法创建客户端
a) static CuratorFramework newClient(String connectString, int sessionTimeoutMs, int connectionTimeoutMs,
RetryPolicy retryPolicy)
b) static CuratorFramework newClient(String connectString, RetryPolicy retryPolicy)
2. Start()方法启动
参数说明
connectString 分开的ip:port对
retryPolicy 重试策略,默认四种:Exponential BackoffRetry,RetryNTimes ,RetryOneTime,
RetryUntilElapsed
sessionTimeoutMs 会话超时时间,单位为毫秒,默认60000ms
connectionTimeoutMs 连接创建超时时间,单位为毫秒,默认是15000ms
重试策略
– 实现接口RetryPolicy可以自定重重试策略
• boolean allowRetry(int retryCount, long elapsedTimeMs, RetrySleeper sleeper)
retryCount 已经重试的次数,如果第一次重试 此值为0
elapsedTimeMs 重试花费的时间,单位为毫秒
sleeper 类似于Thread.sleep,用于sleep指定时间
返回值 如果还会继续重试,则返回true
四种默认重试策略
– ExponentialBackoffRetry
• ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries)
• ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries, int maxSleepMs)
• 当前应该sleep的时间: baseSleepTimeMs * Math.max(1, random.nextInt(1 << (retryCount + 1))),随着重试次数增加重试时间间隔变大,指数倍增长
参数说明
baseSleepTimeMs 初始sleep时间
maxRetries 最大重试次数
maxSleepMs 最大重试时间
返回值 如果还会继续重试,则返回true
默认重试策略
– RetryNTimes
• RetryNTimes(int n, int sleepMsBetweenRetries)
• 当前应该sleep的时间
参数说明
n 最大重试次数
sleepMsBetweenRetries 每次重试的间隔时间
– RetryOneTime
• 只重试一次
• RetryOneTime(int sleepMsBetweenRetry), sleepMsBetweenRetry为重试间隔的时间
默认重试策略
– RetryUntilElapsed
• RetryUntilElapsed(int maxElapsedTimeMs, int sleepMsBetweenRetries)
• 重试的时间超过最大时间后,就不再重试
参数说明
maxElapsedTimeMs 最大重试时间
sleepMsBetweenRetries 每次重试的间隔时间
Fluent风格的API
– 定义:一种面向对象的开发方式,目的是提高代码的可读性
– 实现方式:通过方法的级联或者方法链的方式实现
– 举例:
zkclient = CuratorFrameworkFactory.builder().connectString(connectString).sessionTimeoutMs(5000).retryPolicy(retryPolicy).namespace("tests").build();
创建节点
– 构建操作包装类(Builder): CreateBuilder create()---- CuratorFramework
– CreateBuilder
• creatingParentsIfNeeded() //递归创建父目录
• withMode(CreateMode mode)//设置节点属性,比如:CreateMode.PERSISTENT,如果是递归创建,创建模式
为临时节点,则只有叶子节点是临时节点,非叶子节点都为持久节点
• withACL(List aclList) //设置acl
• forPath(String path) //指定路劲
删除节点
– 构建操作包装类(Builder):DeleteBuilder delete() -----CuratorFramework
– DeleteBuilder
• withVersion(int version) //特定版本号
• guaranteed() //确保节点被删除
• forPath(String path) //指定路径
• deletingChildrenIfNeeded() //递归删除所有子节点
关于guaranteed:
Solves edge cases where an operation may succeed on the server but connection failure
occurs before a response can be successfully returned to the client
意思是:解决当某个删除操作在服务器端可能成功,但是此时客户端与服务器端的连接中断,而删除的响
应没有成功返回到客户端
底层的本质是重试
关于异步操作
– inBackground()
– inBackground(Object context)
– inBackground(BackgroundCallback callback)
– inBackground(BackgroundCallback callback, Object context)
– inBackground(BackgroundCallback callback, Executor executor)
– inBackground(BackgroundCallback callback, Object context, Executor executor)
从参数看跟zk的原生异步api相同,多了一个线程池,用于执行回调
读取数据
– 构建操作包装类(Builder): GetDataBuilder getData() -----CuratorFramework
– GetDataBuilder
• storingStatIn(org.apache.zookeeper.data.Stat stat) //把服务器端获取的状态数据存储到stat对象
• Byte[] forPath(String path)//节点路径
读取子节点
– 构建操作包装类(Builder): GetChildrenBuilder getChildren() -----CuratorFramework
– GetChildrenBuilder
• storingStatIn(org.apache.zookeeper.data.Stat stat) //把服务器端获取的状态数据存储到stat对象
• Byte[] forPath(String path)//节点路径
• usingWatcher(org.apache.zookeeper.Watcher watcher) //设置watcher,类似于zk本身的api,也只能使用一次
• usingWatcher(CuratorWatcher watcher) //设置watcher ,类似于zk本身的api,也只能使用一次
设置watcher
– NodeCache
• 监听数据节点的内容变更
• 监听节点的创建,即如果指定的节点不存在,则节点创建后,会触发这个监听
– PathChildrenCache
• 监听指定节点的子节点变化情况
• 包括:新增子节点 子节点数据变更 和子节点删除
NodeCache
– 构造函数
• NodeCache(CuratorFramework client, String path)
• NodeCache(CuratorFramework client, String path, boolean dataIsCompressed)
参数说明
client 客户端实例
path 数据节点路径
dataIsCompressed 是否进行数据压缩
– 回调接口
• public interface NodeCacheListener
void nodeChanged() //没有参数,怎么获取事件信息以及节点数据?
PathChildrenCache
client 客户端实例
path 数据节点路径
dataIsCompressed 是否进行数据压缩
cacheData 用于配置是否把节点内容缓存起来,如果配置为true,那么客户端在接
收到节点列表变更的同时,也能够获取到节点的数据内容,如果为false
则无法取到数据内容
threadFactory 通过这两个参数构造专门的线程池来处理事件通知
executorService
PathChildrenCache
– 监听接口
• 时间类型包括:新增子节点(CHILD_ADDED),子节点数据变更(CHILD_UPDATED),子节点删除(CHILD_REMOVED)
– PathChildrenCache.StartMode
• BUILD_INITIAL_CACHE //同步初始化客户端的cache,及创建cache后,就从服务器端拉入对应的数据
• NORMAL //异步初始化cache
• POST_INITIALIZED_EVENT //异步初始化,初始化完成触发事件PathChildrenCacheEvent.Type.INITIALIZED
zkclient举例
package com.zk.dev.zkClient.day1; import org.I0Itec.zkclient.IZkDataListener; import org.I0Itec.zkclient.ZkClient; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.concurrent.TimeUnit; public class ZKTest { private ZkClient zk; private String nodeName = "/test"; @Before public void initTest() { zk = new ZkClient("localhost:2181"); } @After public void dispose() { zk.close(); } @Test public void testListener() throws InterruptedException { // 监听指定节点的数据变化 zk.subscribeDataChanges(nodeName, new IZkDataListener() { public void handleDataChange(String s, Object o) throws Exception { System.out.println("node data changed!"); System.out.println("node=>" + s); System.out.println("data=>" + o); System.out.println("--------------"); } public void handleDataDeleted(String s) throws Exception { System.out.println("node data deleted!"); System.out.println("s=>" + s); System.out.println("--------------"); } }); System.out.println("ready!"); // junit测试时,防止线程退出 while (true) { TimeUnit.SECONDS.sleep(5); } } @Test public void testUpdateConfig() throws InterruptedException { if (!zk.exists(nodeName)) { zk.createPersistent(nodeName); } zk.writeData(nodeName, "1"); zk.writeData(nodeName, "2"); zk.delete(nodeName); zk.delete(nodeName); zk.writeData("/test/ba", "bbb"); } }
curator举例
package com.zk.dev.zkClient.day1; import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.cache.NodeCache; import org.apache.curator.framework.recipes.cache.NodeCacheListener; import org.apache.curator.framework.recipes.cache.PathChildrenCache; import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent; import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener; import org.apache.curator.framework.recipes.cache.PathChildrenCache.StartMode; import org.apache.curator.retry.ExponentialBackoffRetry; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.ZooDefs.Ids; /** * @see 测试curator框架例子 * @Author:xuehan * @Date:2016年5月14日下午8:44:49 */ public class CuratorUtils { public String connectString = "localhost:2181"; CuratorFramework zkclient = null ; public CuratorUtils(){ /** * connectString连接字符串中间用分号隔开,sessionTimeoutMs session过期时间,connectionTimeoutMs连接超时时间,retryPolicyc连接重试策略 */ //CuratorFrameworkFactory.newClient(connectString, sessionTimeoutMs, connectionTimeoutMs, retryPolicy) // fluent风格aip // CuratorFrameworkFactory.builder().sessionTimeoutMs(5000).connectString(connectString).namespace("/test").build(); // 重连策略,没1一秒重试一次,最大重试次数3次 RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); zkclient = CuratorFrameworkFactory.builder().connectString(connectString).sessionTimeoutMs(5000).retryPolicy(retryPolicy).namespace("tests").build(); zkclient.start(); } /** * 递归创建节点 * @param path * @param data * @throws Exception */ public void createNode(String path, byte[] data) throws Exception{ zkclient.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).withACL(Ids.OPEN_ACL_UNSAFE).forPath(path, data); } /** * 递归删除节点 * @param path * @throws Exception */ public void delNode(String path) throws Exception{ zkclient.delete().guaranteed().deletingChildrenIfNeeded().forPath(path); } public void zkClose(){ zkclient.close(); } public void delNodeCallBack(String path) throws Exception{ zkclient.delete().guaranteed().deletingChildrenIfNeeded().inBackground(new DeleteCallBack()).forPath(path); } public void dataChanges(String path) throws Exception{ final NodeCache dataWatch = new NodeCache(zkclient, path); dataWatch.start(true); dataWatch.getListenable().addListener(new NodeCacheListener(){ public void nodeChanged() throws Exception { System.out.println("path==>" + dataWatch.getCurrentData().getPath() + "==data==>" + new String(dataWatch.getCurrentData().getData())); } }); zkclient.delete().guaranteed().deletingChildrenIfNeeded().inBackground(new DeleteCallBack()).forPath(path); } public void addChildWatcher(String path) throws Exception{ final PathChildrenCache pc = new PathChildrenCache(zkclient, path, true); pc.start(StartMode.POST_INITIALIZED_EVENT); System.out.println("节点个数===>" + pc.getCurrentData().size()); pc.getListenable().addListener(new PathChildrenCacheListener() { public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception { System.out.println("事件监听到" + event.getData().getPath()); if(event.getType().equals(PathChildrenCacheEvent.Type.INITIALIZED)){ System.out.println("客户端初始化节点完成" + event.getData().getPath()); }else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_ADDED)){ System.out.println("添加节点完成" + event.getData().getPath()); }else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_REMOVED)){ System.out.println("删除节点完成" + event.getData().getPath()); }else if(event.getType().equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){ System.out.println("修改节点完成" + event.getData().getPath()); } } }); } public static void main(String[] args) throws Exception{ CuratorUtils cu = new CuratorUtils(); // cu.createNode("/test/sb/aa/bb", "erhu".getBytes()); // cu.delNode("/test"); cu.zkclient.setData().forPath("/aa", "love is not".getBytes()); cu.addChildWatcher("/aa"); try{ Thread.sleep(20000000); }catch(Exception e){}; } }
发表评论
-
zookeeper学习笔记-zookpeeper集群
2016-05-08 16:20 3578Zookeeper集群 1.是一种对等集群,所有节点(机器)数 ... -
zookeeper学习笔记-集群搭建
2016-05-08 11:55 8Zookeeper集群 1.是一种对等集群,所有节点(机器)数 ... -
zookeeper学习笔记-集群搭建
2016-05-08 11:53 1Zookeeper集群 1.是一种对等集群,所有节点(机器)数 ... -
zookeeper学习笔记-集群搭建
2016-05-08 11:51 3Zookeeper集群 1.是一种对等集群,所有节点(机器)数 ... -
zookeeper学习笔记-基本用法进阶
2016-04-16 20:31 1787数据节点 数据节点Znode: ... -
zookeeper学习笔记-基本用法介绍
2016-04-16 17:41 2721zk基本功能了解 zookeper是一个高性能,分布式,开源 ... -
Netty笔记二(发送对象--服务端客户端附可运行源码)
2013-04-23 21:16 3171网络传输的时候采用的是流的形式,所以一个对象要发出去,并且 ... -
lucene4.2自带demo
2013-04-20 21:05 3851lucene是做什么的网上可以搜到很多资料,就不多说了。我 ... -
Netty笔记一(可以运行看到结果的简单例子)
2013-04-16 22:21 4780最近一段时间一直研究聊天程序,学习了nio的知识,以后会和 ... -
spring有三种启动方式
2012-02-04 10:33 1701纵观java的开源 ... -
ibatis学习总结
2011-09-26 20:12 548IBatis学习总结 一、 介绍: 相对于Hibernate和 ...
相关推荐
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-...
《Zookeeper-3.4.5-cdh5.16.2:分布式协调服务的核心解析》 Apache ZooKeeper,一个高度可靠的分布式协调系统,是大数据生态中的重要组件。本资源包"zookeeper-3.4.5-cdh5.16.2.tar.gz"包含了Zookeeper的3.4.5版本...
Curator的`ServiceCache`提供了更加高效的服务查询方式,它会在内存中缓存服务实例,减少对Zookeeper的频繁查询,同时使用Watcher机制实时更新服务列表。 总的来说,Zookeeper结合Curator的`ServiceDiscovery`机制...
apache-zookeeper-3.5.10-bin 环境搭配 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,...
下载完成后,使用`tar -zxvf zookeeper-3.4.5-cdh5.15.1.tar.gz`命令进行解压。 2. **配置环境**:解压后,进入解压后的目录,找到conf目录下的zoo.cfg配置文件。这是Zookeeper的主要配置文件,需要根据实际环境...
apache-zookeeper-3.6.2-bin.tar apache-zookeeper-3.6.2-bin.tar apache-zookeeper-3.6.2-bin.tar apache-zookeeper-3.6.2-bin.tar apache-zookeeper-3.6.2-bin.tar apache-zookeeper-3.6.2-bin.tar apache-...
apache-zookeeper-3.6.3-bin.tar的压缩包,解压到本地即可使用,还有zk.sh的脚本以及zoo.cfg和xsync。ZooKeeper 是一个分布式协调服务 ,由 Apache 进行维护。ZooKeeper 可以视为一个高可用的文件系统。ZooKeeper ...
这个压缩包"apache-zookeeper-3.5.7-bin.tar.gz"是Zookeeper的可执行二进制文件包,用于在Linux或Unix类操作系统上部署和运行Zookeeper服务器。 **Zookeeper的基本概念:** 1. **节点(ZNode)**:Zookeeper的数据...
apache-zookeeper-3.7.1-bin.tar.gz 内容概要:通过带着读者手写简化版Spring框架,了解Spring核心原理。在手写Spring源码的过程中会摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC, AOP、 Bean...
在"apache-zookeeper-3.5.9-bin.tar.gz"这个压缩包中,包含了Zookeeper 3.5.9版本的二进制发行版,用于在各种操作系统上部署和运行Zookeeper服务。 1. **Zookeeper基本概念** - **Znode**: Zookeeper中的数据存储...
打开“系统属性” -> “高级” -> “环境变量”,在“系统变量”部分新建一个变量,变量名为"ZOOKEEPER_HOME",变量值设置为Zookeeper解压后的路径,即"C:\Zookeeper\apache-zookeeper-3.6.3-bin"。 然后,在系统...
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性...window下先解压为apache-zookeeper-3.6.1-bin.tar.gz
- 解压`apache-zookeeper-3.7.0-bin.tar.gz`到你选择的目录,例如 `/opt`. - 配置`conf/zoo.cfg`,设置数据目录(dataDir)和日志目录(dataLogDir),并根据需求调整其他配置。 - 初始化数据目录,创建myid文件...
1. 解压`apache-zookeeper-3.8.4-bin.tar`到指定目录。 2. 配置`conf/zoo.cfg`,设置服务器ID、数据存储路径、集群配置等。 3. 启动Zookeeper服务,使用`bin/zkServer.sh start`命令。 4. 使用`bin/zkCli.sh`命令行...
Zookeeper是Apache Hadoop项目中的一个关键组件,主要用于分布式系统...通过"zookeeper-3.4.5-cdh5.10.0.tar.gz"这个工具包,我们可以方便地在CDH 5.10.0环境中部署和使用Zookeeper,从而提升整个Hadoop集群的稳定性。
解压压缩包的命令通常为`tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz`,这会在当前目录下创建一个名为"apache-zookeeper-3.5.8-bin"的文件夹。 Zookeeper的核心概念包括: 1. **节点(ZNode)**:Zookeeper的...
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、...
赠送jar包:twill-zookeeper-0.6.0-incubating.jar; 赠送原API文档:twill-zookeeper-0.6.0-incubating-javadoc.jar; 赠送源代码:twill-zookeeper-0.6.0-incubating-sources.jar; 赠送Maven依赖信息文件:twill-...
apache-zookeeper-3.7.0-bin.tar.gz
本文将深入探讨Zookeeper 3.4.5在CDH 5.5.0环境中的应用,以及如何部署和管理这个压缩包`zookeeper-3.4.5-cdh5.5.0.tar.gz`。 首先,Zookeeper的核心概念包括节点(Znode)、会话(Session)和观察器(Watcher)。...