hadoop下zookeeper的安装与配置
1、ZK下载
http://archive.cloudera.com/cdh5/cdh/5/zookeeper-3.4.5-cdh5.7.0.tar.gz
2、解压ZK
[hadoop@hadoop000 software]$ tar zxvf zookeeper-3.4.5-cdh5.7.0.tar.gz -C ../app/
[hadoop@hadoop000 software]$ cd ../app/zookeeper-3.4.5-cdh5.7.0/
3、ZK主要目录
(1)ZK的启动脚本目录
[hadoop@hadoop000 zookeeper-3.4.5-cdh5.7.0]$ cd bin
[hadoop@hadoop000 bin]$ ls
README.txt zkCli.cmd zkEnv.cmd zkServer.cmd zkServer.sh
zkCleanup.sh zkCli.sh zkEnv.sh zkServer-initialize.sh
[hadoop@hadoop000 bin]$ rm -rf *.cmd
(2)ZK配置文件存放位置
[hadoop@hadoop000 bin]$ cd ../conf
[hadoop@hadoop000 conf]$ ls
configuration.xsl log4j.properties zoo_sample.cfg
4、ZK配置
https://zookeeper.apache.org/doc/current/zookeeperStarted.html#sc_InstallingSingleMode
(1)在conf目录下创建配置文件zoo.cfg
[hadoop@hadoop000 conf]$ ls
configuration.xsl log4j.properties zoo_sample.cfg
[hadoop@hadoop000 conf]$ cp zoo_sample.cfg zoo.cfg
[hadoop@hadoop000 conf]$ vim zoo.cfg
# ZooKeeper使用的基本时间单位(毫秒)。它用于做心跳,并且最小会话超时是tickTime的两倍。 tickTime=2000
# 初始化连接数
initLimit=10
# 同时连接数
syncLimit=5
# 存储内存数据库快照的位置
dataDir=/tmp/zookeeper
# 用于监听客户端连接的端口
clientPort=2181
(2)修改数据存储目录
[hadoop@hadoop000 conf]$ mkdir /home/hadoop/app/tmp/zookeeper
[hadoop@hadoop000 conf]$ vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
# 指定为新创建的zookeeper目录
dataDir=/home/hadoop/app/tmp/zookeeper
clientPort=2181
(3)配置ZK的环境变量
[hadoop@hadoop000 conf]$ vim ~/.bash_profile
# 省略部分内容
# 添加ZK的环境变量
ZK_HOME=/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0
export PATH=$PATH:$ZK_HOME/bin
export PATH
[hadoop@hadoop000 conf]$ source ~/.bash_profile
[hadoop@hadoop000 conf]$ echo $ZK_HOME
/home/hadoop/app/zookeeper-3.4.5-cdh5.7.0
(4)启停ZK
#启动zk
[hadoop@hadoop000 conf]$ zkServer.sh start
JMX enabled by default
Using config: /home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@hadoop000 conf]$ jps
64384 Jps
63362 QuorumPeerMain
#停止zk
[hadoop@hadoop000 conf]$ zkServer.sh stop
JMX enabled by default
Using config: /home/hadoop/app/zookeeper-3.4.5-cdh5.7.0/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
[hadoop@hadoop000 conf]$ jps
64426 Jps
ZK客户端 https://zookeeper.apache.org/doc/current/zookeeperStarted.html#sc_InstallingSingleMode
1、启动ZK客户端
[hadoop@hadoop000 conf]$ zkCli.sh
Connecting to localhost:2181
2020-08-18 22:25:49,221 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper .version=3.4.5-cdh5.7.0--1, built on
# 省略部分输出
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
2、查看help信息
[zk: localhost:2181(CONNECTED) 0] help
3、查看数据
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
4、创建数据并查看
[zk: localhost:2181(CONNECTED) 2] create /node test
Created /node
[zk: localhost:2181(CONNECTED) 3] ls /
[node, zookeeper]
[zk: localhost:2181(CONNECTED) 4] get /node
test
cZxid = 0x2
ctime = Tue Aug 18 22:28:55 CST 2020
mZxid = 0x2
mtime = Tue Aug 18 22:28:55 CST 2020
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: localhost:2181(CONNECTED) 5]
5、修改数据并查看
[zk: localhost:2181(CONNECTED) 5] set /node test1
cZxid = 0x2
ctime = Tue Aug 18 22:28:55 CST 2020
mZxid = 0x3
mtime = Tue Aug 18 22:30:37 CST 2020
pZxid = 0x2
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 6] get /node
test1
cZxid = 0x2
ctime = Tue Aug 18 22:28:55 CST 2020
mZxid = 0x3
mtime = Tue Aug 18 22:30:37 CST 2020
pZxid = 0x2
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
6、删除数据并检查
[zk: localhost:2181(CONNECTED) 7] delete /node
[zk: localhost:2181(CONNECTED) 8] ls /node
Node does not exist: /node
#----------------或者----------------
[zk: localhost:2181(CONNECTED) 15] rmr /node
[zk: localhost:2181(CONNECTED) 16] get /node
Node does not exist: /node
Java API操作zookeeper
1、pom中添加ZK的依赖
<properties>
<zk.version>3.4.5-cdh5.7.0</zk.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zk.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
**2、单元测试ZK **
package com.kgc.HbaseEG;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* 准备工作
*/
public class TestZK {
//zk
private ZooKeeper zooKeeper;
//超时时间
private static final int SESSION_OUT = 30000; //watcher
private Watcher watcher = new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
System.out.println("process:" + watchedEvent.getType());
}
};
@Before
public void setUp() throws Exception {
zooKeeper = new ZooKeeper("hadoop:2181", SESSION_OUT, watcher);
}
@After
public void tearDown() throws Exception {
zooKeeper.close();
}
/**
* 创建节点
*
* @throws Exception
*/
@Test
public void createNode() throws Exception {
zooKeeper.create("/node",
"test".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
}
/**
* 查看节点
*
* @throws Exception
*/
@Test
public void getNode() throws Exception {
byte[] data = zooKeeper.getData("/node", null, null);
System.out.println(new String(data));
}
/**
* 修改节点
*
* @throws Exception
*/
@Test
public void setNodeData() throws Exception {
zooKeeper.setData("/node", "accp".getBytes(), -1);
}
/**
* 判断节点是否存在
*
* @throws Exception
*/
@Test
public void existsNode() throws Exception {
Stat stat = zooKeeper.exists("/node", null);
if (stat == null) {
System.out.println("节点不存在!");
} else {
System.out.println(stat.getCzxid() + "\t" + stat.getCtime());
}
}
/**
* 删除节点
*
* @throws Exception
*/
@Test
public void deleterNode() throws Exception {
zooKeeper.delete("/node", -1);
}
}