Zookeeper

来源:互联网 发布:seo零基础 编辑:程序博客网 时间:2024/06/06 10:36

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();    } }
原创粉丝点击