学科分类
目录
Hadoop技术栈

通过Java API操作Zookeeper

我们已经详细介绍Zookeeper的常用方法。本节,我们主要是通过Java API来操作Zookeeper。首先,启动Zookeeper服务;其次,连接Zookeeper服务;最后,操作Zookeeper。(启动和连接Zookeeper服务的具体操作步骤,在此节不作重述)

1.添加依赖

首先,在HadoopDemo工程中添加Zookeeper相关依赖,代码如下:

<dependency>

    <groupId>org.apache.zookeeper</groupId>

    <artifactId>zookeeper</artifactId>

    <version>3.4.10</version>

</dependency>

2.操作Zookeeper

在项目src文件夹下创建cn.itcast.zookeepe包,在这里创建ZookeeperTest.java文件,我们通过创建节点、获取节点、修改节点、判断节点是否存在以及删除节点等方法来操作Zookeeper。具体实现代码,如文件所示。

文件 ZookeeperTest.java

1  import org.apache.zookeeper.CreateMode;

 2  import org.apache.zookeeper.WatchedEvent;

 3  import org.apache.zookeeper.Watcher;

 4  import org.apache.zookeeper.ZooDefs.Ids;

 5  import org.apache.zookeeper.ZooKeeper;

 6  public class ZookeeperTest {

 7    public static void main(String[] args) throws Exception {

 8      **//****步骤一:****创建Zookeeper****客户端**

 9      //参数1:zk地址;参数2:会话超时时间(与系统默认一致);参数3:监视器

 10     ZooKeeper zk = new ZooKeeper("hadoop01:2181,hadoop02:2181,\

 11      hadoop03:2181", 30000, new Watcher() {

 12       @Override

 13        //监控所有被触发的事件(也就是在这里进行事件的处理)

 14       public void process(WatchedEvent event) {

 15         System.*out*.println("事件类型为: " + event.getType());

 16         System.*out*.println("事件发生的路径: " + event.getPath());

 17         System.*out*.println("通知状态为: " + event.getState());

 18       }

 19     });

 20     **//****步骤二:** **创建目录节点**

 21      //参数1:要创建的节点的路径;参数2:节点数据;参数3:节点权限;参数4:节点类型

 22     zk.create("/testRootPath", "testRootData".getBytes(),\

 23      Ids.*OPEN_ACL_UNSAFE*, CreateMode.*PERSISTENT*);

 24     **//****步骤三:** **创建子目录节点**

 25     zk.create("/testRootPath/testChildPathOne", 

 26             "testChildDataOne".getBytes(),

 27             Ids.*OPEN_ACL_UNSAFE*,

 28            CreateMode.*PERSISTENT*);

 29      **//****步骤四:****获取目录节点数据**

 30      //参数1:存储节点数据的路径;

 31     //参数2:是否需要监控此节点(true/false)

 32     //参数3:stat节点的统计信息(一般设置为null)

 33     System.*out*.println("testRootData节点数据为:"+\

 34      new String(zk.getData("/testRootPath", false, null)));

 35     **//****步骤五:** **获取子目录节点数据**

 36     System.*out*.println(zk.getChildren("/testRootPath", true));

 37     **//****步骤六:** **修改子目录节点数据,使得监听触发**

 38     //参数1:存储子目录节点数据的路径

 39     //参数2:要修改的数据;

 40      //参数3:预期要匹配的版本(设置为-1,则可匹配任何节点的版本)

 41     zk.setData("/testRootPath/testChildPathOne",\

 42      "modifyChildDataOne".getBytes(), -1);

 43     **//****步骤七:****判断目录节点是否存在**

 44     System.*out*.println("目录节点状态: [" + \   

 45      zk.exists("/testRootPath", true) + "]");

 46     **//****步骤八:** **删除子目录节点**

 47     zk.delete("/testRootPath/testChildPathOne", -1);

 48     **//****步骤九:** **删除目录节点**

 49     zk.delete("/testRootPath", -1);

 50     zk.close();

 51   }

 52 }

通过执行文件的main方法,控制台打印输出的内容,如图1所示。

img

图1 Java API操作Zookeeper输出的内容

点击此处
隐藏目录