栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

二、Linux下zookeeper环境搭建

二、Linux下zookeeper环境搭建

文章目录
  • jdk搭建
  • zookeeper环境搭建
    • 下载
    • 上传到Linux上
    • 解压
    • 重命名并移动到usr/local位置下
    • 配置环境变量
    • 编译
  • 测试
    • 启动zk
    • 启动zk客户端
    • 操作节点
    • java api操作zk

jdk搭建

可参考笔者这篇文章
Linux下jdk的下载安装

zookeeper环境搭建 下载

Index of /dist/zookeeper/zookeeper-3.7.0

上传到Linux上 解压
tar -zxvf zookeeper-3.4.11.tar.gz

重命名并移动到usr/local位置下
 mv zookeeper-3.7.0 zookeeper
 mv zookeeper /usr/local/
配置环境变量
 vim /etc/profile

添加如下内容

export JAVA_HOME=/usr/jdk8
export ZOOKEEPER_HOME=/usr/local/zookeeper
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin

编译
source /etc/profile

测试 启动zk
 ./bin/zkServer.sh start

启动zk客户端
./bin/zkCli.sh

操作节点
查看Zookeeper中包含的key
ls /
创建一个新的Znode 创建成功以后我们可以使用 ls/查看我们创建的内容
create /zkZsy hahahah

     ls /

    [zkZsy , zookeeper]
get命令获取创建Znode的内容
get /zkZsy
set 命令来对 zk 所关联的字符串进行设置
set /zkZsy zsy666
删除Znode
 delete /zkMxn
java api操作zk

在maven项目添加如下依赖



			org.apache.zookeeper

			zookeeper

			3.6.3

		

		

		

			junit

			junit

			4.13.2

			runtime

		
		
			org.projectlombok
			lombok
		
package com.example.zookeeper;

import lombok.extern.slf4j.Slf4j;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.concurrent.CountDownLatch;

@Slf4j
public class ZookeeperTest {

    // IP 和端口
    private final static String ipAddress = "xxxx:2181";


    public static void main(String[] args) {
        ZookeeperTest test = new ZookeeperTest();

        String key = "/zkZsy";
        String value = "this is zhangshiyu";
        //创建Znode
//        test.add(key,value);
//        获取节点数据
//        test.get(key);
        //修改节点数据
        test.modify(key,"zhangshiyu hahahaha");
        //删除节点
//        test.delete(key);


    }

    
    public static ZooKeeper getConntection() {
        ZooKeeper zooKeeper = null;
        try {
            final CountDownLatch countDownLatch = new CountDownLatch(1);
            //watch机制(回调),监听是否连接成功
            zooKeeper = new ZooKeeper(ipAddress, 5000, new Watcher() {
                @Override
                public void process(WatchedEvent watchedEvent) {
                    if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
                        //如果受收到了服务端的响应事件,连接成功
                        countDownLatch.countDown();
                    }
                }
            });

            countDownLatch.await();
            log.info("zookeeper状态:{}",zooKeeper.getState());//CONNECTED

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return zooKeeper;
    }

    
    public static void closeConnection(ZooKeeper zooKeeper) {
        try {
//            zooKeeper.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    
    public void add(String key ,String value) {
        ZooKeeper zooKeeper = ZookeeperTest.getConntection();
        try {
            //参数类型
            //1.key
            //2.value
            //3.对应的ACL,当前节点的权限控制
            //4.设置当前节点类型
            zooKeeper.create(key, value.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            ZookeeperTest.closeConnection(zooKeeper);
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    
    public void get(String key) {
        ZooKeeper zooKeeper = ZookeeperTest.getConntection();
        Stat stat = new Stat();
        String data = null;
        try {
            byte[] bytes = zooKeeper.getData(key, null, stat);
            data = new String(bytes, "gbk");
            log.info("当前节点信息:{}",data);
            ZookeeperTest.closeConnection(zooKeeper);
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

    
    public void modify(String key,String newValue) {
        ZooKeeper zooKeeper = ZookeeperTest.getConntection();
        Stat stat = new Stat();
        //version乐观锁概念,此处需要获取version信息,则需要先get拿到节点信息
        try {
            //获取节点(修改需要version信息)
            zooKeeper.getData(key, null, stat);
            //再修改
            zooKeeper.setData(key, newValue.getBytes(), stat.getVersion());
            ZookeeperTest.closeConnection(zooKeeper);
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    
    public void delete(String key) {
        ZooKeeper zooKeeper = ZookeeperTest.getConntection();
        Stat stat = new Stat();
        try {
            //获取节点(删除需要version信息)
            zooKeeper.getData(key, null, stat);
            //删除节点
            zooKeeper.delete(key, stat.getVersion());
            log.info("节点删除成功");
            ZookeeperTest.closeConnection(zooKeeper);
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/286013.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号