使用IDEA远程访问VM虚拟机Zookeeper

一.首先,让我们进入VM启动我们的完全分布式集群

在这里插入图片描述

然后让我们在每一台机器上进入Zookeeper安装目录,输入bin/zkServer.sh start启动Zookeeper,然后我们可以用bin/zkServer.sh status命令查看启动状态.

二.启动之后,我们将虚拟机当前版本的Zookeeper安装包放到主机上,然后将其解压

在这里插入图片描述

打开IDEA,创建新的java项目,然后选择文件->项目结构,选择第三个Libraries,点击旁边的加号将zookeeper的包导入,导入刚才解压出来的文件夹中的zookeeper-3.4.6.jar包和lib文件夹,如图所示:

使用IDEA远程访问VM虚拟机Zookeeper_第1张图片

三.导包完成后,在左侧的src文件夹下新建一个名叫zkClient的java文件,我们在其中对其进行远程操控的一些基础语句练习

首先我们应将主机端和虚拟机进行联系,所以我们先创建一个地址
public class zkClient {
ZooKeeper zk = null;
@Before
public void init() throws IOException{
    zk = new ZooKeeper("master:2181,slave1:2181,slave2:2181",3000,null);
}
其中的master,slave1和slave2都是我hadoop集群的机器名,而2181则是在zookeeper/conf文件夹下zoo.cfg文件中所配置的端口号
然后我们对其进行新建操作
@Test
//创建
public void testCreate() throws Exception{
    //参数1:节点的路径  参数2:数据  参数3:访问权限  参数4:节点类型
    String create = zk.create("/demo123","hello demo123".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    System.out.println(create);
    zk.close();
}
可以看出我们新建了一个名叫demo123的文件在zookeeper的根目录下,我们可以进入虚拟机用zkCli.sh查看其效果,可以看出在其根目录下多了demo123

在这里插入图片描述

接着我们对其进行修改操作
@Test
//修改
public void testUpdata()throws Exception{
    //参数1:节点的路径  参数2:数据  参数3:数据的版本:-1表示所有的版本
    zk.setData("/demo123","我看见你没听课".getBytes("Utf-8"),-1);
    zk.close();
}
可以看到我们对demo123文件添加了一条语句"我看见你没听课",然后我们同样到虚拟机中查看其效果,可以看到多出了我们刚才添加的那一句

使用IDEA远程访问VM虚拟机Zookeeper_第2张图片

然后进行查询语句
@Test
//查询
public void testGetdata()throws Exception{
    //参数1:节点的路径  参数2:是否需要监听  参数3:所要获取数据的版本:null表示最新版本
    byte[] data = zk.getData("/demo123",false,null);
    System.out.println(new String(data,"Utf-8"));
    zk.close();
}
这边的查询语句我们先不做监听,然后就直接先查询,将其转化为字符串输出出来,我们看下效果

使用IDEA远程访问VM虚拟机Zookeeper_第3张图片

然后我们来实现查询子节点的操作
@Test
//查子节点
public void testchildrendata()throws Exception{
    //参数1:节点路径  参数2:是否需要监听
    List children = zk.getChildren("/hbase",false);
    System.out.println(children);
    zk.close();
}
为了看得明显,我们选择一个子节点多的文件hbase来操作

使用IDEA远程访问VM虚拟机Zookeeper_第4张图片

然后我们进行文件的删除操作
@Test
//删除
public void testRm()throws Exception{
    //参数1:节点路径  参数2:索要删除的数据版本:-1表示所有版本
    zk.delete("/demo123",-1);
    zk.close();
}
让我们将我们刚才创建的demo123删除,执行完毕后,同样到虚拟机上查看效果

在这里插入图片描述

可以看到我们的文件中已经没有了demo123文件

四.对zookeeper节点进行监听操作

刚才的查询我们没有设置监听,现在我们重新编写一个可以进行监听操作的查询
package zookeeper.client.zookeeper.watcher;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.List;

public class zkWatch {
ZooKeeper zk = null;
@Before
public void init() throws IOException {
    zk = new ZooKeeper("master:2181,slave1:2181,slave2:2181", 3000, new Watcher() {
        @Override
        public void process(WatchedEvent event) {
            if (event.getState()==Event.KeeperState.SyncConnected && event.getType()==Event.EventType.NodeDataChanged) {
                System.out.println(event.getPath());
                System.out.println(event.getType());
                System.out.println("马上出面阻止");
                try {
                    zk.getData("/demo123",true,null);
                } catch (KeeperException e) {
                    e.printStackTrace();
                } catch (InterruptedException e){
                    e.printStackTrace();
                }
            }else if (event.getState()==Event.KeeperState.SyncConnected && event.getType()==Event.EventType.NodeChildrenChanged){
                System.out.println("你的节点发生变化了........");
            }
        }
    });
}
@Test
public void testWatch()throws Exception{
    byte[] data = zk.getData("/demo123",true,null);
    System.out.println(new String(data,"Utf-8"));
    List children = zk.getChildren("/demo123",true);
    Thread.sleep(Long.MAX_VALUE);
}

}
可以看到这个监听机制就像一个保安一样,一有信息匹配就出去阻止,我们看下我们打开查询后,我们在虚拟机中对其操作

使用IDEA远程访问VM虚拟机Zookeeper_第5张图片
使用IDEA远程访问VM虚拟机Zookeeper_第6张图片

可以看到我们用虚拟机对其进行设置了三个警报,处于监听状态的查询对其进行了三次出面阻止,这便是监听查询了.

你可能感兴趣的:(大数据,Zookeeper)