大数据生态之zookeeper(API)

在使用maven项目编写zookeeper程序时导入相关的jar包:

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


1.创建集群连接

  //集群节点节点,之间使用逗号隔开
    static String url="hadoop01:2181,hadoop02:2181,hadoop03:2181";
    //集群编程入口
    static ZooKeeper zk;
    //超时时间
    static long time=5000;
    //使用静态代码块,初始化ZooKeeper对象
    static {
        try {
            zk=new ZooKeeper(url,(int)time,null);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

2.创建节点

    public void createZnode(ZooKeeper zk){
        //必须使用绝对路径
        String path="/test/test04";
        //在创建创建节点时,必须指定节点内容
        byte data[]="I am a good boy!".getBytes();
        try {
            /**
             * zk.create的四个参数表示:
             * arg1:节点路径
             * arg2:节点存放的内容
             * arg3:权限设置:默认
             * arg4:节点类型(永久无顺序、永久有顺序、临时无顺序、临时有顺序)
             */
            String info = zk.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE
                    , CreateMode.EPHEMERAL);
            System.out.println(info==null?"fail":"success");
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

3.查看节点信息

    public void getInfo(ZooKeeper zk,String path){
        try {
            /**

             * zk.getData(path, null, null);
             *  参数1:节点的绝对路径  string
             *  参数2:节点的监听
             *  参数3:节点的状态对象
             */
            byte[] data = zk.getData(path, null, null);
            System.out.println("节点:"+path+"的信息是:"+(new String(data)));
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

4.修改节点数据

 public void updateData(ZooKeeper zk,String path){
        try {
            /**
             * zk.setData(path, data, version);
             * path:修改内容的节点
             * data:更新的数据
             * version:修改的版本:如果不知道,写-1,表示最新版本
             */
            zk.setData(path,"haha".getBytes(),-1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

5.删除节点

 public void deleteZnode(ZooKeeper zk,String path){
        try {
            /**
             * zk.delete(path, version);
             * path:路径
             * version:删除的版本,如果不知道,写-1,表示删除最新版本  int
             */
            zk.delete(path,-1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

6.获取znode节点的权限信息

public void getACL(ZooKeeper zk,String path){
        try {
            /**
             * zk.getACL(path,stat)
             * path:路径
             * stat:状态信息
             */
            List<ACL> acls = zk.getACL(path, null);
            for(ACL acl:acls){
                System.out.println(acl.getPerms());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

7.获取子节点

public void getChildren(ZooKeeper zk, String path) {
        try {
            //判断节点是否存在
            if (zk.exists(path, null) == null) {
                List<String> childrens = zk.getChildren(path, null);
                for(String children:childrens){
                    //注意这里面收到的都是当前节点下的子节点的相对路径
                    System.out.println(children);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

8.znode的测试监听

public class testZKWatcher {
    static String url="hadoop01:2181,hadoop02:2181,hadoop03:2181";
    static ZooKeeper zk;
    static long time=5000;
    static {
        try {
            zk=new ZooKeeper(url,(int) time,null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //设置监听
    public static void liisten(String path,ZooKeeper zk){
        try {
            zk.exists(path, new Watcher() {
                @Override
                //WatchedEvent event监听事件对象
                public void process(WatchedEvent event) {
                    //节点触发的类型(新增、修改、创建...)
                    Event.EventType type = event.getType();
                    //获取触发的节点的路径
                    event.getPath();
                    System.out.println("触发事件的路径"+path+",触发的事件的类型"+type);
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String path="/test/test01";
        liisten(path,zk);
        try {
            //触发监听
            zk.create("jj","zzy".getBytes(),
                    ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

| 这里需要注意的是,监听事件是一次性的,如果需要一直监听,那么需要设置循环监听。

原文地址:http://blog.51cto.com/14048416/2336621

时间: 2024-08-01 09:00:40

大数据生态之zookeeper(API)的相关文章

追本溯源 解析“大数据生态环境”发展现状(CSDN)

程学旗先生是中科院计算所副总工.研究员.博士生导师.网络科学与技术重点实验室主任.本次程学旗带来了中国大数据生态系统的基础问题方面的内容分享.大数据的发展越来越快,但是对于大数据的认知大都还停留在最初的阶段——大数据是一类资源.一类工具,其实“大数据”更多的体现的是一个认知和思维,是一种战略.认知和文化. 以下为分享实录全文: 一年多来,通过组织中国大数据技术大会.CCF大数据学术会议以及各类大大小小的应用峰会与学术论坛,结合我们科学院网络数据科学与技术重点实验室所承担的与大数据相关的重大基础课

从0到1构建大数据生态系列1:数据蛮荒中的拓荒之举

缘起 我们都知道,当前大数据的需求基本属于遍地开花.无论是帝都.魔都,还是广州.深圳,亦或是全国其他各地,都在搞大数据:不管是不到百人的微小公司,还是几百上千人的中型公司,亦或是上万的大型公司,都在需求数据岗位. 大公司暂且不论,他们一切都走在前头.那么,对于中小型企业来说,开始尝试以数据的思维去思考问题,开始涉足大数据领域,这就是一个从0到1的过程了. 有(bu)幸(xing),近半年来,我亲自见证以及亲身体会到了这个过程,或者至今仍然在完善1这个过程中.期间,有痛苦有坑.有喜悦有成功.有沉静

大数据生态之 ——HDFS

大数据生态之-----HDFS HDFS工作机制 客户端上传文件时,一方面由datanode存储文件内容,另一方面有namenode负责管理block信息(切块大小,副本数量,位于datanode上的位置信息) 一丶namenode的工作职责: 记录元数据 a) 文件的路径 b) 文件的副本数量 c) 文件切块大小 d) block块信息 e) block块的位置信息 2. 响应客户端请求 3. 平衡datanode上block文件块的存储负载 datanode启动后会向namenode汇报自身

大数据生态之数据处理框架探索

数据处理框架 数据处理是一个非常宽泛的概念,数据处理框架在数据架构中,主要是用于数据移动和分析这两大功能当中.对于数据移动,有离线数据移动和实时数据移动,也可以叫做是批量数据移动和流式数据移动.而对于分析这一块,有离线数据分析和实时数据分析,也可以称作是批量数据分析和流式数据分析.离线和实时,批量和流式,针对这两种不同的形式,就出现了多种不同的数据处理框架.有批量的数据处理框架,有流式的数据处理框架,也有批流融合的框架. 批量数据处理框架 批量数据处理框架最经典的就是 mapreduce 了,这

构建企业大数据生态的关键在于 , 打通内部数据!

一个企业要想保持长远的发展,在市场中成为一个强有力的生命个体,必然要注重企业组织之间的协调.合作关系,与环境协同进化,也就是所谓的企业生态系统.而企业信息化或数据化作为管理的重要支撑,是这生态系统中的关键一环. <2015中国大数据应用前沿调研报告>指出,在对于"贵公司认为打造生态系统的重要性在何处"调查时,接近一半的受访企业选择了"打通企业内部部门数据,更好的服务业务增长".对于"贵公司为全面实现大数据战略首要的关注点",排名第二的

大数据hadoop之zookeeper

一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示. 图 1.1 ZooKeeper解决单点故障 那么我们继续分析一下,ZooKeeper通过Master选举来帮助分布式系统解决单点故障,保证该系统中每时每刻只有一个Master为分布式系统提供服务.也就是说分布式的单点问题交给了ZooKeeper来处理,不知道大家此时有没有发现一个问题——"故障转移到了ZooKeeper

【Hadoop】如何形象描述大数据生态?

作者:千岁大王链接:https://www.zhihu.com/question/27974418/answer/39845635来源:知乎著作权归作者所有,转载请联系作者获得授权. Google内部早就开始玩大数据,发现时代跟不上他们的节奏,担心技术后继无人,于是发表了三篇论文(搜下gfs bigtable mapreduce).有几个工作不饱和,整天没事干的人,想搞个开源的网页搜索(lucene nutch).看到那三篇论文被震惊了,于是开始依葫芦画瓢,在一个二流的互联网公司(Yahoo)开

大数据生态开源工具

1. Flume:日志收集软件,里面的重要概念是agent,包括 source -> channel -> slink,sourc,slink 可以为hdfs,jdbc ... 一个简单的场景是用Flume监测一个文件夹fdir的数据变化,这时fdir就是source,并将变化传送到hdfs_path上,hdfs_path就是slink. 2. Sqoop:主要用于hadoop data(hdfs/hive/hbase)和 structured database(relational data

大数据开发之zookeeper简介

首先安装hadooper必须安装zookeeper. zookeeper在hadoop生态圈中起的非常重要的作用,一句话就是ZooKeeper是分布式系统中的协调系统. 浅谈zookeeper:zookeeper是什么?ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. zookeeper的特点简单