Hadoop——zookeeper
zookeeper的目录结构说明:底层实际上是由一个树形的数据结构组成
zookeeper的特点
1. 我们的服务是需要分别在三台服务器启动:zkServer.sh需要在3台机器分别实行
2. zookeeper是分为一个leader对应多个follower
3. 最然我们通过zkCli.sh连接到zkServer集群中的任意的一个服务,但是他们的数据其实全局**同步**的。意思就是我在一个zkServer添加一个znode,其他的zkServer都有。
4. 主从复制,读写分离。所有的写操作都是交给主节点完成,所有的读操作都是由从节点;当主节点有新的znode的时候,从节点会和主节点进行数据同步。
5. 事务的原子性:要么都成功,要么都失败。
zk的命令行操作
在执行命令行操作的时候,需要进入bin目录下的zkCli.sh ,然后才能进行命令行输入
之后才能进行以下的命令行输入
[zk: localhost:2181(CONNECTED) 0]
1、ls:列举指定目录的子目录
[zk: localhost:2181(CONNECTED) 6] ls /
2、create : 创建znode
[zk: localhost:2181(CONNECTED) 5] create /app "123"
3、stat : 查看指定znode的详细信息
[zk: localhost:2181(CONNECTED) 2] stat /app
4、get : 查询详情以及数据
[zk: localhost:2181(CONNECTED) 3] get /app
5、ls2 : 查看指定znode的子节点以及当前的详细信息
[zk: localhost:2181(CONNECTED) 4] ls2 /app
6、set : 给指定的znode设置新的data
[zk: localhost:2181(CONNECTED) 7] set /app 456
7、rmr : 删除指定znode以及其子节点
[zk: localhost:2181(CONNECTED) 9] delete /app
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
public class Test1 {
public void init() throws Exception {
//创建zookeeper客户端
ZooKeeper zk = new ZooKeeper("hadoop01:2181,hadoop02:2181,hadoop03:2181", 30000, new Watcher() {
@Override
//监控所有被触发的事件
public void process(WatchedEvent event) {
System.out.println("事件类型为:" + event.getType());
System.out.println("事件发生的路径:" + event.getPath());
System.out.println("事件的状态:" + event.getState());
}
});
//创建目录节点
zk.create("/fumulu", "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//创建子目录节点
zk.create("/fumulu/zimulu", "".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//获取目录节点数据
System.out.println(new String(zk.getData("/", false, null)));
//获取子目录节点数据
System.out.println(zk.getChildren("/", true));
//删除znode
zk.delete("/app",0);
//判断节点是否存在,相当于stat /
Stat exists = zk.exists("/abc", false);
System.out.println(exists);
}
}
需要导入的依赖是
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qf.bigdata</groupId>
<artifactId>zookeeper</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.5</version>
//不下载该版本依赖的log4j
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
//单独下自己的版本
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
</project>
安装
##1. 解压配置环境变量
## 自定义配置
## Java
export JAVA_HOME=/opt/apps/jdk1.8.0_45
export HADOOP_HOME=/opt/apps/hadoop-2.8.1
export ZK_HOME=/opt/apps/zookeeper-3.4.5
export CLASS_PATH=.:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin
##2. 删除无用的目录和文件
[root@hadoop zookeeper-3.4.5]# rm -rf src/ *.xml *.txt docs/ dist-maven/
##3. 修改配置文件
[root@hadoop conf]# mv zoo_sample.cfg zoo.cfg
[root@hadoop conf]# vi zoo.cfg
# 心跳周期
tickTime=2000
# 初始化的心跳的数量
initLimit=10
# 发送请求到获取响应的最大时间差
syncLimit=5
# 快照目录:数据保存目录
dataDir=/opt/apps/zookeeper-3.4.5/zkdata
# zookeeper启动的时候默认的端口号
clientPort=2181
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
##server.1中的1表示每个zookeeper的myid的值,这个值在集群中是唯一的
##10.206.0.4|10.206.0.5|10.206.0.6 都是不同的zookeeper的ip地址
##2888:他是zookeeper中的leader和follower的通信端口
##3888:zookeeper的选举端口
server.1=10.206.0.4:2888:3888
server.2=10.206.0.5:2888:3888
server.3=10.206.0.6:2888:3888
##4. 需要到zkdata创建myid : 每台zookeeper都要设置
[root@hadoop zookeeper-3.4.5]# mkdir zkdata
[root@hadoop zookeeper-3.4.5]# echo "1" > zkdata/myid
##5. 启动关闭查询
[root@hadoop bin]# zkServer.sh start|stop|status
##6. 可以通过zkCli.sh链接到服务
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 2] ls /zookeeper/quota
[]
[zk: localhost:2181(CONNECTED) 3]