大数据技术之Zookeeper客户端 API 操作(4)

目录

客户端 API 操作

IDEA 环境搭建

创建 ZooKeeper 客户端

创建子节点

获取子节点并监听节点变化

判断 Znode 是否存在

客户端向服务端写数据流程

客户端 API 操作

前提: 保证 hadoop12、hadoop13、hadoop14 服务器上的 Zookeeper 集群服务端已启动。

IDEA 环境搭建
  1. 创建一个工程: zookeeper

  2. 添加 pom 文件

    <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.5.7</version></dependency>
    </dependencies>

  3. 拷贝 log4j.properties 文件到项目根目录

    在项目的 src/main/resources 目录下,新建一个文件,命名为 “log4j.properties”,并在文件中填入以下内容:

    log4j.rootLogger=INFO, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
    log4j.appender.logfile=org.apache.log4j.FileAppender
    log4j.appender.logfile.File=target/spring.log
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
  4. 创建包名: com.lzl.zk

  5. 创建类名称: zkClient

创建 ZooKeeper 客户端
// 注意:逗号前后不能有空格
private static String connectString = "hadoop12:2181,hadoop13:2181,hadoop14:2181";
private static int sessionTimeout = 2000;
private ZooKeeper zkClient = null;
​
@Before
public void init() throws Exception {zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {@Overridepublic void process(WatchedEvent watchedEvent) {// 收到事件通知后的回调函数(用户的业务逻辑)System.out.println(watchedEvent.getType() + "--" + watchedEvent.getPath());// 再次启动监听try {List<String> children = zkClient.getChildren("/", true);for (String child : children) {System.out.println(child);}} catch (Exception e) {e.printStackTrace();}}});
}
创建子节点
// 创建子节点
@Test
public void create() throws Exception {// 参数 1:要创建的节点的路径; 参数 2:节点数据 ; 参数 3:节点权限 ; 参数 4:节点的类型String nodeCreated = zkClient.create("/lzl", "shuaige".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}// 测试:在 hadoop12 的 zk 客户端上查看创建节点情况
[zk: localhost:2181(CONNECTED) 16] get -s /lzl
shuaige
 
获取子节点并监听节点变化
// 获取子节点
@Test
public void getChildren() throws Exception {List<String> children = zkClient.getChildren("/", true);for (String child : children) {System.out.println(child);}// 延时阻塞Thread.sleep(Long.MAX_VALUE);
}
​
// (1)在 IDEA 控制台上看到如下节点:
// zookeeper
// sanguo
// lzl
​
// (2)在 hadoop12 的客户端上创建再创建一个节点/lzl1,观察 IDEA 控制台
// [zk: localhost:2181(CONNECTED) 3] create /lzl1 "lzl1"
​
// (3)在 hadoop12 的客户端上删除节点/lzl1,观察 IDEA 控制台
// [zk: localhost:2181(CONNECTED) 4] delete /lzl1
判断 Znode 是否存在
// 判断 znode 是否存在
@Test
public void exist() throws Exception {Stat stat = zkClient.exists("/lzl", false);System.out.println(stat == null ? "not exist" : "exist");
}
客户端向服务端写数据流程

写流程之写入请求直接发送给 Leader 节点

Client       ZK Server          Follower           ZK Server          Follower
write        |                   |                   |                   ||                   |                   |                   ||--------- write -->|                   |                   ||                   |                   |                   ||                   |--------- ack ---->|                   ||                   |                   |                   ||                   |                   |--------- ack ---->||                   |                   |                   ||                   |                   |                   ||                   |                   |--------- write -->||                   |                   |                   ||                   |                   |                   ||                   |                   |                   ||                   |                   |                   ||                   |                   |                   ||                   |                   |                   ||                   |                   |                   ||                   |                   |                   ||                   |                   |--------- ack ---->||                   |                   |                   ||                   |                   |                   ||                   |                   |--------- ack ---->|

写流程之写入请求发送给 follower 节点

Client       ZK Server          Follower           ZK Server          Follower
write        |                   |                   |                   ||                   |                   |                   ||                   |--------- write -->|                   ||                   |                   |                   ||                   |                   |--------- ack ---->||                   |                   |                   ||                   |                   |                   ||                   |                   |--------- ack ---->||                   |                   |                   ||                   |                   |--------- write -->||                   |                   |                   ||                   |                   |                   ||                   |                   |                   ||                   |                   |                   ||                   |                   |                   ||                   |                   |                   ||                   |                   |                   ||                   |                   |--------- ack ---->||                   |                   |                   ||                   |                   |--------- ack ---->|

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式---简单工厂模式

简单工厂模式&#xff08;Simple Factory Pattern&#xff09; 是一种创建型设计模式&#xff0c;它定义了一个工厂类&#xff0c;通过这个工厂类可以创建不同类型的对象。简单工厂模式的主要目的是将对象的创建逻辑集中在一个地方&#xff0c;简化客户端的代码&#xff0c;使得…

黑神话 悟空 配置 Mac玩游戏

兄弟们&#xff0c;这次《黑神话&#xff1a;悟空》真的是全网吹爆了&#xff01;我提前开香槟拿个年度游戏好吧&#xff01;Mac玩家也不用担心&#xff0c;系统兼容工具CrossOver也在第一时间支持了《黑神话&#xff1a;悟空》&#xff0c;现在你可以直接在Mac上玩《黑神话&am…

CSS的:target伪类:动态URL定位样式的指南

CSS的:target伪类是一种强大的工具&#xff0c;它允许开发者根据URL的锚点&#xff08;即页面内某个元素的ID&#xff09;来改变对应元素的样式。这在创建可滚动的页面、文章目录跳转、或任何需要通过URL直接指向页面特定部分的场景中非常有用。本文将详细介绍:target伪类的使用…

Python实现人脸轮廓提取

目录 一、背景知识1.1 人脸检测和轮廓提取的意义1.2 人脸检测方法概述1.3 轮廓提取方法概述二、常用的人脸轮廓提取方法2.1 基于边缘检测的轮廓提取2.2 基于形态学操作的轮廓提取2.3 基于特征点检测的轮廓提取三、Python实现人脸轮廓提取3.1 安装依赖库3.2 使用Dlib进行人脸检测…

World of Warcraft [CLASSIC] the Eye of Eternity [EOE] P1-P2

World of Warcraft [CLASSIC] the Eye of Eternity [EOE] 永恒之眼&#xff08;蓝龙&#xff09; 第一阶段 第二阶段 第三阶段 载具1-6技能介绍 World of Warcraft [CLASSIC] the Eye of Eternity [EOE]_永恒之眼 eoe-CSDN博客 永恒之眼怎么出副本呢&#xff0c;战斗结束&am…

嵌入式学习----网络通信之TCP协议通信

TCP&#xff08;即传输控制协议&#xff09;&#xff1a;是一种面向连接的传输层协议&#xff0c;它能提供高可靠性通信(即数 据无误、数据无丢失、数据无失序、数据无重复到达的通信) 适用情况&#xff1a; 1. 适合于对传输质量要求较高&#xff0c;以及传输大量数据 的通信。…

Leetcode 2760.最长奇偶子数组

给你一个下标从 0 开始的整数数组 nums 和一个整数 threshold 。 请你从 nums 的子数组中找出以下标 l 开头、下标 r 结尾 (0 < l < r < nums.length) 且满足以下条件的 最长子数组 &#xff1a; nums[l] % 2 0对于范围 [l, r - 1] 内的所有下标 i &#xff0c;num…

【Kubernetes】k8s集群图形化管理工具之rancher

目录 一.Rancher概述 1.Rancher简介 2.Rancher与k8s的关系及区别 3.Rancher具有的优势 二.Rancher的安装部署 1.实验准备 2.安装 rancher 3.rancher的浏览器使用 一.Rancher概述 1.Rancher简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台&#xff0c;实…

APScheduler 3.X版本 - 中文译本

背景&#xff1a;工作使用python django apscheduler celery MySQL redis&#xff0c;某次想要使用异步的结果资料不全&#xff0c;所以想要搞一搞&#xff0c;问题是中文译本也不太好&#xff0c;为了提升熟练度&#xff0c;自己也来一套 时间&#xff1a;20240822 目的…

ES+FileBeat+Kibana日志采集搭建体验

1.环境准备 需要linux操作系统&#xff0c;并安装了docker环境 此处使用虚拟机演示。&#xff08;虚拟机和docker看参考我之前写的文章&#xff09; VirtualBox安装Oracle Linux 7.9全流程-CSDN博客 VirtualBox上的Oracle Linux虚拟机安装Docker全流程-CSDN博客 简单演示搭建ES…

SpringBoot教程(二十二) | SpringBoot实现分布式定时任务之elastic-job

SpringBoot教程&#xff08;二十二&#xff09; | SpringBoot实现分布式定时任务之elastic-job 简介前置条件&#xff1a;需要ZooKeeper配合1、引入相关依赖2、application.yml中配置注册中心和作业调度巨坑&#xff08;配置修改无效&#xff09;3、job实例4、ElasticJob-UI监控…

git-20240822

目录 初始化仓库 Git init Git init project --bare 查看提交的记录 git log --prettyoneline 查看当前git远程库地址 git remote -v 查看详细提交记录 git log 撤出暂存区的文件 git reset HEAD file(.代表全部文件&#xff09; 提交数据到远程仓库 git config --global push.…

TCP+UDP通信

一、UDP协议 1.1、recvfrom() 参数说明 int sockfd, //socket 的fd void *buf, // 保存数据的一块空间的地址 size_t len, //这块空间的大小 int flags,// 0 默认的接收方式 -----阻塞方式 默认行为是阻塞 MSG_DONTWAIT 不阻塞方式&#xff0c;用他的话代表读的时候是非…

使用dockerDesktop下载x86,amd64,arm64镜像

开启梯子 注意dockerDesktop不需要登录账号密码&#xff0c;不然拉取镜像会提醒账号或者密码错误 修改dockerDesktop配置&#xff0c;将experimental的值设置成 true&#xff0c;意思是&#xff1a;开启manifest实验特性 重启docker后下载镜像 –platform后面就是架构版本&a…

git服务器配置

git服务器http配置 1&#xff0c;配置apache服务器&#xff08;假定目录在gitFile&#xff09; 2&#xff0c;终端执行 cd ~/local/gitFile &#xff0a;定位至apache目录 mkdir myproject.git cd myproject.git git init --bare &#xff0a;创建仓库 完…

华为账号“一键登录”能力让美团用户尽享安全便捷的登录体验

背景 随着全场景智能生态的日益完善&#xff0c;用户面临着众多应用与服务的登录需求&#xff0c; 而繁琐的注册登录流程通常是用户转化的隐形障碍&#xff0c;用户可能因为步骤繁琐、记忆密码困难而中途放弃&#xff0c;导致应用错失潜在用户。其次&#xff0c;高门槛的登录方…

4.6算法之贪心_702:Crossing River

题目 702:Crossing River 总时间限制: 1000ms 内存限制: 65536kB 描述 A group of N people wishes to go across a river with only one boat, which can at most carry two persons. Therefore some sort of shuttle arrangement must be arranged in order to row the boat…

力扣223题详解:矩形面积的多种解法与模拟面试

在本篇文章中&#xff0c;我们将详细解读力扣第223题“矩形面积”。通过学习本篇文章&#xff0c;读者将掌握如何使用多种方法来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力扣第223题“…

【C++】深入解析C/C++内存管理:new与delete的使用及原理

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类 本章将分享C为何放弃malloc/free系列&#xff0c;选择新系列new/delete去管理内存。深度探索new/delete的使用及其原理,m…

使用cbsd指令快速创建bhyve Ubuntu虚拟机实践

首先查看当前的模板 ls -la /usr/jails/etc/defaults/ 可以看到Ubuntu的20 22 23 24都有模板 ls /usr/jails/etc/defaults/vm-linux-ubuntuserver-amd64-2* /usr/jails/etc/defaults/vm-linux-ubuntuserver-amd64-20.conf /usr/jails/etc/defaults/vm-linux-ubuntuserver-a…