Zookeeper是 Apache Hadoop技俩下的一个子技俩疯狂小学生,是一个树形目次就业。
Zookeeper翻译过来等于动物园经管员,他是用来管Hadoop(大象)、Hive(蜜蜂)、
Pig(小猪)的经管员,简称zk
Zookeeper是一个辩认式的、开源的利用要领的合作就业。
zookeeper提供的主邀功能包括:
建树经管
在多个利用要领(或就业器)中,假如存在一些疏通的建树信息,在对该建树信息进行修改时,咱们需要一个一个进行修改,这么会大大加多珍藏的本钱,不便捷经管。这时要是使用一个寥落放建树中心的组件,将疏通的建树信息放在建树中心,需要的时候径直拉取,这么不错大大省俭珍藏的本钱, 而zookeeper即可罢了建树中心的功能。
图片疯狂小学生
辩认式锁:
在多个用户看望合并台主机上的利用要领数据时,咱们不错通过加锁处理并发操作的问题,关联词要是有多台主机疏通的利用要领要看望合并数据时,这个时候咱们在一台主机上加锁是不可处理另一台主机的并提问题的,换句话说我方的锁只对我方有用并不影响别的,这个时候就需要辩认式锁处理这类问题,我个东说念主交融辩认式锁像是从总共主机中抽取出来的一把锁,能够是有一把总锁对总共主机皆有用。zookeeper不错罢了辩认式锁的功能
图片
集群经管:
图片
zookeeper当作注册中心,经管就业提供方的ip地址端标语url信息,并在就业糜掷方肯求需要时发送给就业糜掷方
🍋2.zookeeper的装置🍊2.1环境准备:zookeeper就业器是用Java创建的,运转在JVM之上。需要装置JDK7以上版块(最佳JDK8或以上)
🍊2.2下载官网下载地址:
Apache ZooKeeper
🍊2.3上传并装置下载在腹地之后不错把装置包上传到就业器能够杜撰机中,我使用的是就业器并汉典shell市欢
1.使用xshell 汉典市欢就业器,在opt目次下新建一个zookeeper目次
图片
2.使用xftp将刚才下载的装置包上传到zookeeper目次下
图片
3.干涉zookeeper目次下解压
tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz图片
4. 装置得手!
图片
自拍华人在线' title='图片
'>🍊2.4建树干涉conf建树目次
图片
zoo_sample.cfg等于建树文献,关联词此文献不可收效,需要称号为zoo.cfg的文献才气收效
更名复制一份建树文献
图片
裁剪建树文献zoo.cfg/tmp/zookeeper这个目次是zookeeper用于存储抓久化的数据到腹地的,关联词就业器默许是莫得的
图片
干涉opt/zookeeper目次下,新建一个目次zkdata(目次名纵脱取)用于存放zookeeper的抓久化数据
图片
复制此目次/opt/zookeeper/zkdata,将zoo.cfg建树文献中的dataDir修改为/opt/zookeeper/zkdata
图片
' title='图片
'>保存退出!
🍊2.5启动zookeeper图片
启动得手!🍋3.zookeeper内存模子🍊3.1模子图片
🍊3.2模子的特色:每个子目次如/node1皆被称作一个znode(节点)。这个znode是被它地方的旅途独一瑰丽
znode不错有子节点目次,况兼每个znode不错存储数据
znode是有版块的,每个znode中存储的数据不错有多个版块,也等于一个看望旅途中不错存储多份
数据
**znode不错被监控,包括这个目次节点中存储的数据的修改,子节点目次的变化等,一朝变化不错通
知拓荒监控的客户端**
🍊3.3节点的分类:1.抓久节点(默许)2.抓久规章节点3.临时节点4.临时规章节点
1.create 节点path data
创建一个节点。并给节点绑定数据(默许是抓久性节点)
2.create -s 节点path data
创建抓久性规章节点
3.create -e 节点path data
创建临时性节点
4.create -e -s 节点path data
创建临时规章节点
(严防:临时节点不可含有任何子节点)
🍋4.zookeeper建树文献详解图片
🍋5.zookeeper客户端常用敕令市欢ZooKeeper就业端./zkCli.sh -server ip:port 要是是本机市欢不错不写 ip:port
断开市欢 quit
CRUD
1.拓荒(修改)节点值
set 节点path value
2.稽查敕令匡助help
3.删除单个节点
delete 节点path
4.清爽指定目次下节点
ls 目次名
5.删除带有子节点的节点
deleteall 节点path
6.创建节点
create 节点path value
7.得回节点值
get 节点path
8.稽查旅途下节点信息及子节点ls s 节点旅途
9.稽查节点情景stat 节点path
节点监听机制watch
客户端不错监测znode节点的变化。Zonode节点的变化触发相应的事件,然后断根对该节点的监
测。当监测一个znode节点时候,Zookeeper会发送奉告给监测节点。在shell终局一个Watch事件是一个一次性
的触发器,当被拓荒了Watch的数据能够目次发生了篡改的时候,则就业器将这个篡改发送给拓荒了
Watch的客户端以便奉告它们。
1.ls -w 节点path 监听节点目次的变化
图片
🌰新建一个会话市欢 对/app1的目次进行修改,加多一个子节点
图片
图片
然后监听就失效了,因为是一次性的
2.get -w 节点path 监听节点数据的变化
图片
🌰修改节点信息
图片
触发监听,况兼之后监听就失效了
图片
🍋6.Java客户端操作导入zookeeper的依赖包和junit的测试包
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>provided</scope></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.10</version></dependency>🍊6.1市欢zk server就业端@Beforepublic void before() {//参数1 --> zk server 就业ip地址:端标语//参数2 --> 会话超频繁间//参数3 --> 市欢超频繁间//参数4 --> 序列化时势 zkClient = new ZkClient('ip:端标语', 60000 * 30, 60000, new SerializableSerializer()); }private ZkClient zkClient; @Testpublic void test01(){ System.out.println(zkClient); } @After public void after() { zkClient.close(); }
图片
打印出后果,得手市欢!
🍊6.2创建节点@Testpublic void test() { //创建抓久节点 zkClient.create('/app2', 'xue', CreateMode.PERSISTENT); //创建抓久规章节点 zkClient.create('/app3','yue', CreateMode.PERSISTENT_SEQUENTIAL); //创建临时节点 zkClient.create('/app4','qing', CreateMode.EPHEMERAL); //创建临时规章节点 zkClient.create('/app5','haha',CreateMode.EPHEMERAL_SEQUENTIAL); }🍊6.3稽查某个节点信息@Testpublic void test2(){//稽查某个节点数据,需要保证创建和得回的数据序列化时势疏通,要是是在linux上创建的节点那么在Java上得回就会出现序列化不匹配的特出Object o = zkClient.readData('/app2'); System.out.println(o);//稽查节点情景 Stat stat = new Stat(); System.out.println(o);//稽查节点创建时期System.out.println(stat.getCtime());//稽查版块System.out.println(stat.getCversion());//稽查idSystem.out.println(stat.getCzxid()); }
图片
🍊6.4修改节点信息zkClient.writeData('/app2','xueyueqing');🍊6.5稽查刻下节点总共子节点@Testpublic void test4(){ List<String> children = zkClient.getChildren('/');for(String c : children ){ System.out.println(c); } }🍊6.6监听
@Testpublic void test5() throws IOException { zkClient.subscribeDataChanges('/app1', new IZkDataListener() { //刻下节点数据变化时触发 @Override public void handleDataChange(String dataPath, Object o) throws Exception { System.out.println('刻下节点旅途' dataPath); System.out.println('刻下节点信息' o); } //刻下节点删除时触发 @Override public void handleDataDeleted(String dataPath) throws Exception { System.out.println('刻下节点旅途' dataPath); } }); //阻止刻下监听 System.in.read(); }
严防:在shell终局修改,Java是监听不了的,必须使用Java代码修改
🌰通过Java代码进行修改
图片
' title='图片
'>图片
监听得手!并发现Java代码进行监听是永远的,不是一次性的
@Test public void test6() throws IOException {//监听节点目次变化 zkClient.subscribeChildChanges('/app1', new IZkChildListener() { @Override public void handleChildChange(String s, List<String> list) throws Exception { System.out.println('父节点称号:' s); System.out.println('发生变化后孩子节点称号:'); for(String child : list){ System.out.println(child); } } }); //阻止刻下监听 System.in.read(); }在/app1目次下创建节点name
图片
监听得手!
图片
本站仅提供存储就业,总共本体均由用户发布,如发现存害或侵权本体,请点击举报。