Zookeeper

ZooKeeper概述

 1.  是一个为用户的分布式应用程序提供协调的服务,是为别的分布式程序服务的.

集群管理:

     - 在分布式集群中,各个节点的实时状态统计
    将节点信息写入到ZooKeeper的一个znode上,监听这个znode可以获取它的实时状态变化
        Hbase中Master状态监控和选举

Hadoop中使用到了ZooKeeper的框架大概有:

     1. HBase
     2. Spark
     3. HDFS HA
     4. 还有很多。。。

znode有两种类型:

 - 短暂的:ephemeral 
 - 持久的:persistent
 - **znode的类型在创建时确定后就不能修改**

ZooKeeper架构

这里写图片描述

Zookeeper核心

 1. 仲裁机制
 2. 目录式数据结构

下载安装包: http://archive.cloudera.com/cdh5/cdh/5/
zoo.cfg配置:

 - dataDir

启停ZK Server:

 - zkServer.sh start
 - zkServer.sh stop

启动客户端:

 - zkCli.sh

常用命令:

  • ls
  • create
  • get
    set
    delete
    quit
    ……

实现服务器与客户端互联:

public class TestZK2 {
    private ZooKeeper zooKeeper;
    private String path="/dui";
    private Watcher watcher=new Watcher() {
        @Override
        public void process(WatchedEvent watcherEvent) {
           if(watcherEvent.getType()==Event.EventType.NodeDeleted){
               System.out.println("节点被删除了");
               try {
                   createNode();
               } catch (KeeperException e) {
                   e.printStackTrace();
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
           }
        }
    };

    private void createNode() throws KeeperException, InterruptedException {
        org.apache.zookeeper.data.Stat stat=zooKeeper.exists(path,true);
        if(stat == null){
            System.out.println("创建节点");
            zooKeeper.create(path,"test".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
            System.out.println("节点创建成功");
            zooKeeper.exists(path,true);
            Thread.sleep(1000);
        }else{
            System.out.println("节点存在");
        }
    }

    @Before
    public void kaishi() throws IOException {
        zooKeeper = new ZooKeeper("hadoop-node4", 30000, watcher);

}

    @After
    public void guanbi() throws InterruptedException {

        zooKeeper.close();

    }
    @Test
    public void run() throws IOException, KeeperException, InterruptedException {
        createNode();
        System.in.read();
    }
}
public class TestZK3 {

    private ZooKeeper zooKeeper;
    private String path="/info-node";
    @Before
    public void kaishi() throws IOException {
        zooKeeper=new ZooKeeper("hadoop-node3", 30000, new Watcher() {
            @Override
            public void process(WatchedEvent watcherEvent) {
                if(watcherEvent.getType()==Event.EventType.NodeCreated){
                    System.out.println("节点存在开始删除");
                    try {
                        deleteNode();
                    } catch (KeeperException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });


    }

    private void deleteNode() throws KeeperException, InterruptedException {
        Stat stat=zooKeeper.exists(path,true);
        if(stat!=null){
            System.out.println("节点存在");
            zooKeeper.delete(path,-1);
            System.out.println("创建的节点被删除了");
            zooKeeper.exists(path,true);

        }else{
            System.out.println("节点不存在");
        }
    }

    @After
    public void close() throws InterruptedException {
        zooKeeper.close();

    }


    @Test
    public void run() throws IOException, KeeperException, InterruptedException {
        deleteNode();
        System.in.read();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值