【大数据各平台组件搭建使用精进】Zookeeper分布式协调服务(6)

Zookeeper简介

Zookeeper是一个分布式协调服务的开源框架,它是由Google的Chubby开源实现。Zookeeper主要用来解决分布式集群中应用系统的一致性问题和单点故障问题,例如如何避免同时操作同一数据造成脏读的一致性问题等。

 按我自己的理解来看zoookeeper就是连接各服务器高可用和协调的工具,有了他,使很多高速运算和存储变得有可能。

特性

一致性

可靠性

顺序性

原子性

实时性

角色

Leader:领导者,一个

Follower:追随者,多个

Observer:观察者

Zookeeper分布式集群部署

下载

 

我这里用的是3.6.3版本的

连接放这里了

https://pan.baidu.com/s/1f4HOiFL7rufd12VpnwkQJw?pwd=1234

 提取码:1234

大家自己去Apache官网下载也可

 

上传安装包

 

解压

 

配置环境变量

 

不要忘了让环境变量起作用奥

 

Zookeeper的配置文件

 修改配置

 

 

创建myid文件

 

 分发文件

分发zookeeper

 

 二三都要分发一遍

 分发环境变量配置文件

分发myid文件,并修改hadoop02的myid文件的内容为2,hadoop03的myid的内容为3

修改hadoop002的myid

 

 

修改hadoop003的myid

 

环境变量生效

 

启动集群

这里有几个注意的地方

首先必须关闭所有的防火墙

然后zookeeper要一个一个按顺序启动

也得一个一个按顺序关闭

这影响到zookeeper不同虚拟机的角色

在后来学习中我发现直接全局命令使zookeeper在虚拟机同时启动即可

就是在这输入即可

 

 

zkServer.sh start是开启命令

zkServer.sh status是查看状态

Zookeeper的shell操作

启动集群

 

启动shell

zkCli.sh

 

查看zookeeper某个目录信息

 

查看某个目录的数据信息

 

 

 

创建节点

 

 

获取节点

Get、

 

修改节点

set

 

监听节点

Get -w

 

删除节点

 

Zookeeper的Java API操作

启动idea,新建一个maven工程

 

引入pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.edu.hgu</groupId>
    <artifactId>zookee-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.6.3</version>
        </dependency>
    </dependencies>
</project>

新建包,在包下新建一个类

测试客户端是否创建成功创建节点



package cn.edu.hgu.zookeeper;


import org.apache.zookeeper.*;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * zookeeper
 * @author
 * @date 2021/11/9
 */
public class ZookeeperDemo {
    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {

        //1.创建zookeeper的客户端
        //构造器第一个参数是连接字符串;第二个参数是会话超时时间,单位是毫秒;第三个参数是监视器
        ZooKeeper zookeeper = new ZooKeeper("hadoop001:2181,hadoop002:2181,hadoop003:2181", 30000, new Watcher() {
            @Override//覆盖的注释
            public void process(WatchedEvent watchedEvent) {
                System.out.println(watchedEvent.toString());

            }
        });
        System.out.println(zookeeper);
        //2.创建节点
        zookeeper.create("/testRootPath","HelloZookeeper".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

        //3.创建子节点
        zookeeper.create("/testRootPath/one","childone".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);

    }
}

 

创建子节点

   //3.创建子节点
        zookeeper.create("/testRootPath/one","childone".getBytes(StandardCharsets.UTF_8), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);

    }
}

其余一些常规操作

获取目录节点数据

System.out.println(“hellozookeeper节点数据为:”,+new String(zookeeper.getData(path:”

/testRootPath”,watch: false,stat ;null)));

修改子目录节点数据,使得监听触发

Zookeeper.setData(“/testRootPath/one”,”modifyone”.getBytes(),version :-1)

判断目录是否存在

System.out.println(“目录节点状态:[“+zookeeper.exists( path:”/testRootPath”,watch: true)+”)]”);

删除子目录节点

zookeeper.delete(path:”/testRootPath/one”,version:-1);

删除目录节点

zookeeper.delete(path:”/testRootPath”,version:-1);

zookeeper.close();

zookeeper到这里基本上就结束了,总的来说zookeeper在后来做项目的操作内容很少,但是是一个不可或缺的组件,基本上随时打开,部署环境也属于一劳永逸,在下一篇(7)我会介绍HA高可用相关内容,hadoop相关内容请移步主页。

如遇侵权,请联系删除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星欲冷hx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值