zoukankan      html  css  js  c++  java
  • Zookeeper(二) zookeeper集群搭建 与使用

    一、zookeeper集群搭建

        鉴于 zookeeper 本身的特点,服务器集群的节点数推荐设置为奇数台。我这里我规划为三台, 为别为 hadoop01,hadoop02,hadoop03 
       1、下载地址: http://mirrors.hust.edu.cn/apache/zookeeper/
            版本号: zookeeper-3.4.7.tar.gz

       2、解压安装到自己的目录

        tar -zxvf zookeeper-3.4.7.tar.gz -C apps/

       3、修改配置文件

        cd conf/
        mv zoo_sample.cfg zoo.cfg

       vi zoo.cfg

    二、启动软件,并验证安装是否成功

     三、zookeeper集群使用

          1、cli使用

    首先,我们可以是用命令 bin/zkCli.sh 进入 zookeeper 的命令行客户端,这种是直接连接本机 的 zookeeper 服务器,还有一种方式,可以连接其他的 zookeeper 服务器,只需要我们在命 令后面接一个参数-server 就可以了。 例如: zkCli.sh –server hadoop01:2181

          进入命令行之后,键入 help 可以查看简易的命令帮助文档,

    znode 数据信息字段解释

        2、zookeeper  Java API 使用

    package com.ghgj.zkapi;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.ZooDefs.Ids;
    import org.apache.zookeeper.ZooKeeper;
    import org.apache.zookeeper.data.Stat;
    
    public class ZKAPIDEMO {
    
    	// 获取zookeeper连接时所需要的服务器连接信息,格式为主机名:端口号
    	private static final String ConnectString = "hadoop02:2181";
    
    	// 请求了解的会话超时时长
    	private static final int SessionTimeout = 5000;
    
    	public static void main(String[] args) throws Exception {
    
    		/**
    		 * 获取zookeeper链接, 要求的连接参数至少有三个: ConnectString:服务器的连接信息
    		 * SessionTimeout:请求连接的超时时长 Watch:添加监听器
    		 */
    		ZooKeeper zk = new ZooKeeper(ConnectString, SessionTimeout, null);
    
    		// 根据拿到的zk连接去做相应的操作
    
    		// 查看节点数据
    		// byte[] data = zk.getData("/ghgj/hadoop", false, null);
    		// System.out.println(new String(data));
    
    		// 查看子节点的信息
    		// String parentNodePath = "/ghgj";
    		// List<String> childrens = zk.getChildren(parentNodePath, false);
    		// for(String child : childrens){
    		// System.out.println(parentNodePath+"/"+child);
    		// }
    
    		// 修改节点的数据
    		// Stat setData = zk.setData("/ghgj/hadoop",
    		// "hadoopsprakjsdlfkj".getBytes(), -1);
    		// long mtime = setData.getMtime();
    		// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    		// System.out.println(sdf.format(new Date(mtime)));
    
    		// 添加持久节点znode
    		 String addPathnode = "/spark/node";
    		 String path = zk.create(addPathnode, "node".getBytes(),
    		 Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
    		 System.out.println(path);
    
    		// 添加短暂型节点
    		// String addPathnode1 = "/ghgj/hive1";
    		// String path1 = zk.create(addPathnode1, "hive1".getBytes(),
    		// Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
    		// System.out.println(path1);
    		// Thread.sleep(5000);
    		
    		// 删除一个带有多级子节点的znode
    //		boolean rmr = rmr("/zk", zk);
    //		System.out.println(rmr?"删除成功":"删除失败");
    
    		zk.close();
    	}
    
    	public static Stat exists(String path, ZooKeeper zk) throws Exception {
    		Stat exists = zk.exists("/ghgj/hadoop", false);
    		if (null != exists) {
    			System.out.println("该节点/ghgj/hadoop还存在");
    			return exists;
    		} else {
    			System.out.println("该节点/ghgj/hadoop不存在");
    			return null;
    		}
    	}
    
    	public static boolean rmr(String path, ZooKeeper zk) throws Exception {
    		// 判断节点存在不存在
    		Stat stat = exists(path, zk);
    //		if (stat.getNumChildren() == 0) {
    		List<String> children = zk.getChildren(path, false);
    		if (children.size() == 0) {
    			// 删除节点
    			zk.delete(path, -1);
    		} else {
    			// 要删除这个有子节点的父节点,那么就需要先删除所有子节点,然后再删除该父节点,完成对该节点的级联删除
    			// 删除有子节点的父节点下的所有子节点
    			for (String nodeName : children) {
    				System.out.println(path);
    				rmr(path + "/" + nodeName, zk);
    			}
    			// 删除该父节点
    			rmr(path, zk);
    		}
    		return true;
    	}
    }
    

      



     

            

  • 相关阅读:
    SpringBoot 线程池配置 定时任务,异步任务
    使用Calendar类对时间进行处理
    单例模式的几种实现方式
    一些簡單的入門算法
    OO第四单元博客
    OO第三单元博客
    OO第二单元博客
    OO第一单元博客
    BUAA_OO_2020_Unit4_Wandy
    BUAA_OO_UNIT3_2020
  • 原文地址:https://www.cnblogs.com/liuwei6/p/6737526.html
Copyright © 2011-2022 走看看