Hadoop——zookeeper

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]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值