Hadoop之Zookeeper入门(简介 / 安装(单节点/集群)/shell和java客户端的一些基本命令和相关操作)(1)

Hadoop之Zookeeper的简介 / 安装(单节点/集群)/shell和java客户端的一些基本命令和相关操作

一 Zookeeper是什么 ?有什么作用 ?
zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
简单来说zookeeper=文件系统+监听通知机制。

二 Zookeeper软件的安装
1 在linux的/opt/apps 目录下上传zookeeper安装包 ,操作如下 : (apps是自定义创建的一个专门存放安装软件的文件夹)
在这里插入图片描述
2 查看是否上传成功 ,如果成功上传 ,开始解压安装包 ,操作如下 :

tar  -zxvf  zookeeper-3.4.6.tar.gz

3 解压完成后 ,开始修改配置信息 ,首先进入zookeeper软件包 ,查看软件包文件目录,进入到 conf文件夹中 ,修改配置信息:
在这里插入图片描述
4 将zoo_sample.cfg 文件的名字修改成 zoo.cfg ,命令如下 :

mv  zoo_sample.cfg   zoo.cfg

5 回到上一级目录 ,即 zookeeper 软件包目录下 ,创建一个 zkData 文件夹 ,并且在文件夹里面创建一个名字为 myid 的文件,将数字1 编辑进去,如下操作 :
在这里插入图片描述
6 回到 软件包的 conf / 目录下 ,对 zoo.cfg 文件里面的配置信息进行修改 ,如下:
在这里插入图片描述
7 修改信息如下 :
在这里插入图片描述
8 回到 apps / 目录下 , 将修改好配置信息的 zookeeper软件包分发给其他两台虚拟机 ,操作命令如下 :

scp -r zookeeper-3.4.6 linuxXX:$PWD
linuxXX :将要接收软件包的虚拟机域名
$PWD : 发送至与当前目录路径相同的路径下

9 启动集群 ,需要手动在每一台机器上一个一个的启动 ,每台机器都执行如下命令 :

bin/zkServer.sh start    zk服务启动
bin/zkServer.sh status   zk 查看服务状态
bin/zkServer.sh stop     zk停止服务

10 客户端连接, 每台虚拟机的 zookeeper需要单独的手动连接, 连接客户端操作如下 :

bin/zkCli.sh  本地连接
bin/zkCli.sh  -server doit02:2181  连接到指定的服务节点

三 shell客户端的一些基本命令
1 连接上客户端之后 ,可以对zookeeper 进行创建/ 删除 /获取 /添加等操作 :

ls /                      查看某个路径下的key (查询信息简略版)
ls /                      查看某个路径下的key(查询信息详细版)
create ( (-s)/-e (-s)) /aaa ddd            在跟目录下创建一个znode节点并添加内容
参数(-p)                表示创建的节点是永久的--> -p 不需要写出来 ,默认是永久的
参数 (-p) -s             表示创建的节点是永久的,有序的
参数-e                 表示创建的节点是临时的,客户端断开后,这个节点会被删除
参数 -e -s             表示创建的节点是临时的 ,有序的 (namenode节点都是创建的临时的)
create /zoo/hadoop  xx              创建一个多级节点并添加内容
get /zoo/hadoop                     查看子节点的内容 ,即查看一个key的value
set /zoo/hadoop                     修改/更新/覆盖子节点的内容
rmr  /zoo/hadoop                    删除一个znode节点

2 事件监听 ,zookeeper中对znode节点的变化描述有3中事件类型 :

1) 节点value变化事件
2) 节点的子节点变化事件(个数变化等)
3) 节点的被创建 /被删除事件

3 对应的, 客户端向 zk 注册监听的命令为 :

get /zoo watch       监控节点数据的变化
ls  /zoo watch       监控节点个数发生变化
ls2  /zoo watch      监控节点个数变化的详细信息
stat  /zoo watch

四 java客户端的操作
1 创建一个节点

public class CreateZKNode {
    public static void main(String[] args) {
        ZooKeeper zk = null;
        try {
            //创建一个 zookeeper 对象 ,有四个参数
            //参数一 "connectString": 连接 zookeeper 的机器 ,可以只写一台机器域名,当时可能遇到连接不上的情况,
            // 为了保证能及时连接成功,写三台,当一台连接不上的时候就可以换另一台机器连接
            //参数二 "sessionTimeout": 会话/会晤超时,指zookeeper连接机器时间超过设置的时间 ,就不连接了 ,会重新换一台机器连接
            //参数三 "watcher" : 监控/监听连接状态
            zk = new ZooKeeper("doit03:2181,doit04:2181,doit05:2181", 2000, null);

            //参数一  创建zookeeper节点的路径
            //参数二  数据值
            //参数三  节点的权限
            //参数四  节点的类型  -p永久  -p-s永久有序           -e临时  -e-s临时有序
            zk.create("/hdfs","zoo".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
            Thread.sleep(Integer.MAX_VALUE);

            zk.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2 监听节点数据/内容变化情况

public class NodeDatachangedWatcher {
    static ZooKeeper zk =null;
    //zookeeper对象只需要创建一次 ,所以放在静态代码块中 ,但是 zk 对象后续还需要使用,所以需要提出去
    static {
        try {
            zk = new ZooKeeper("doit03:2181,doit04:2181,,doit05:2181,", 2000, null);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws Exception {
        /**
         * 获取节点的数据
         * 参数一 节点名
         * 参数二 在当前节点绑定一个监听 当这个节点的数据发生变化的时候触发时间 执行process
         * 参数三 节点的状态
         */
        byte[] old = zk.getData("/cch", new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                try {
                    System.out.println("/cch节点的数据发生变化了");
                    System.out.println(watchedEvent.getPath()+"----"+watchedEvent.getState()+"--"+watchedEvent.getType());

                    byte[] data = zk.getData("/cch", this, null);

                    System.out.println("变化后的数据是 :"+new String(data));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }, null);
        System.out.println(new String(old));
        //如果监听的是临时的节点 ,就需要让当前线程在这里睡一觉 ,
        //不然程序运行到这来后会被直接close,也就监听不到临时节点数据变化情况了
        Thread.sleep(Integer.MAX_VALUE);
        zk.close();
    }
}

3 在java客户端编辑 监听节点数据/内容变化情况 代码并且运行时,需要连接上Zookeeper ,也需要在当前操作的项目(project)里面的 pom.xml 文件中导入Zookeeper jar包(maven repository官网中也可以找到对应版本的jar包) ,代码如下 :

 <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>

因为如果不导这个jar包的话 ,创建的zookeeper对象系统会直接导入 hadoop jar包依赖下的zookeeper jar包 ,那在程序运行时就会出现"ZookConnectionLoss KeeperErrorCode = ConnectionLoss for"异常 !!!
4

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值