【八】Zookeeper3.7.1集成Hadoop3.3.4集群安装
文章目录
- 1.基本原理
- 2.下载并解压ZooKeeper
- 3.配置环境变量
- 4.配置ZooKeeper
- 5.创建数据目录并初始化myid
- 6.启动ZooKeeper
- 7.配置ZooKeeper集成到Hadoop
- 8.重启Hadoop
- 9.ZooKeeper状态检查
1.基本原理
ZooKeeper 是一个分布式协调服务,用于分布式系统中管理配置信息、命名、同步和集群服务。它提供了一种简单的接口来访问存储在其文件系统中的数据,同时为复杂的分布式系统提供了高可用性和一致性保障。以下是 ZooKeeper 的基本原理:
1 . 数据模型和 ZNode
- 数据模型:ZooKeeper 以分层命名空间的方式存储数据,类似于文件系统。每个节点称为一个 ZNode。
- ZNode:ZNode 是 ZooKeeper 中的基本数据单元,可以存储少量数据。它有两种类型:
- 持久节点(Persistent ZNode):即使客户端断开连接或系统重启,节点数据也会一直存在。
- 临时节点(Ephemeral ZNode):客户端会话结束时自动删除。
- 顺序节点(Sequential ZNode):自动在名称末尾附加一个单调递增的数字。
2 . 一致性保证
ZooKeeper 提供了一致性保障,确保以下条件:
- 原子性:操作要么成功,要么失败,没有中间状态。
- 顺序一致性:所有操作按照它们的执行顺序进行。
- 单一系统映像:所有客户端无论连接到哪个 ZooKeeper 服务器,看到的数据都是一致的。
- 耐久性:一旦操作成功执行,数据将被持久化,不会丢失。
- 及时性:在合理的时间内,客户端可以看到最近的系统状态。
3 . Leader 选举和复制
- 集群角色:ZooKeeper 集群由多个服务器(节点)组成,其中一个节点是 Leader,其余是 Follower。
- Leader 选举:在集群启动或 Leader 故障时,ZooKeeper 使用选举算法(如基于 ZAB 协议的选举)选举新的 Leader。
- 数据复制:Leader 负责处理所有的写请求,并将更新同步到所有 Follower,从而保持数据一致性。读请求可以由任何 Follower 处理。
- 会话和 Watcher
- 会话:客户端与 ZooKeeper 服务器之间的连接称为会话。会话有超时机制,如果客户端在指定时间内没有发送心跳包,ZooKeeper 将认为会话结束。
- Watcher:ZooKeeper 提供了一种监控机制,称为 Watcher。客户端可以在 ZNode 上设置 Watcher,当节点状态发生变化时,ZooKeeper 会通知客户端。这种机制常用于配置管理、命名服务和分布式锁等场景。
5 . 高可用性和容错
- 高可用性:ZooKeeper 依赖于集群的多台服务器提供服务,即使部分节点故障,也能继续提供服务。
- 容错性:ZooKeeper 能容忍少数节点的故障,而无需停止服务。只要集群中的活跃节点数量超过总节点数的一半(即超过多数节点),ZooKeeper 就能继续正常工作。
6 . ZAB 协议
ZooKeeper 使用的 ZAB 协议(ZooKeeper Atomic Broadcast)是一种基于投票的协议,确保了事务的顺序一致性和数据的复制。它包括两部分:选举阶段(用于选举 Leader)和 广播阶段(用于复制数据)。
7 . 典型应用
ZooKeeper 常用于分布式系统中的服务注册和发现、分布式锁、配置管理、分布式消息队列等。其高可用性和一致性特性使其成为这些场景中的关键组件。
总之,ZooKeeper 通过提供可靠的分布式协调机制和数据一致性保障,为分布式系统的构建和管理提供了强有力的支持。
2.下载并解压ZooKeeper
1 . 环境准备
hostname | ip |
---|---|
ubuntu1 | 172.16.167.131 |
ubuntu2 | 172.16.167.132 |
ubuntu3 | 172.16.167.133 |
2 . 下载ZooKeeper 3.7.1(或其他兼容版本)的二进制文件
https://archive.apache.org/dist/zookeeper/zookeeper-3.7.1/
3 . 解压缩文件并将其移动到适当的目录:
tar -xzf apache-zookeeper-3.7.1-bin.tar.gz
mv apache-zookeeper-3.7.1-bin /usr/local/zookeeper
3.配置环境变量
1 . 编辑/etc/profile
文件,添加ZooKeeper的环境变量:
vim /etc/profile
2 . 添加以下内容:
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
3 . 刷新环境变量:
source /etc/profile
4 . 将环境变量分发到其他节点并刷新
4.配置ZooKeeper
1 . 进入ZooKeeper的配置目录:
cd /usr/local/zookeeper/conf
2 . 复制zoo_sample.cfg
为zoo.cfg
:
cp zoo_sample.cfg zoo.cfg
3 . 编辑zoo.cfg
文件,进行基本配置:
vim zoo.cfg
根据你的集群环境修改以下内容,目录一定要注意:
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=10
syncLimit=5server.1=ubuntu1:2888:3888
server.2=ubuntu2:2888:3888
server.3=ubuntu3:2888:3888
tickTime
:ZooKeeper中两个心跳之间的基本时间单位,以毫秒为单位。dataDir
:存储快照的目录。clientPort
:客户端连接到ZooKeeper服务器的端口。initLimit
:允许追随者(Follwer)在连接并同步到Leader之前可以进行的心跳数。syncLimit
:Leader与Follower之间发送消息、请求和响应时间的数量。server.X
:ZooKeeper集群中服务器的配置,ubuntu1
,ubuntu2
,ubuntu3
是你的服务器主机名或IP地址。- 用scp命令,将zookeeper分发到所有节点。
5.创建数据目录并初始化myid
1 . 在每个ZooKeeper节点上创建数据目录:
mkdir -p /var/lib/zookeeper
chmod -R 755 /var/lib/zookeeper
2 . 在每个节点的数据目录中创建myid
文件,并写入对应的服务器编号(1,2,3):
echo "1" > /var/lib/zookeeper/myid # 在ubuntu1上
echo "2" > /var/lib/zookeeper/myid # 在ubuntu2上
echo "3" > /var/lib/zookeeper/myid # 在ubuntu3上
6.启动ZooKeeper
1 . 在每个节点上启动ZooKeeper服务:
zkServer.sh start
2 . 验证每个节点ZooKeeper是否正常启动:
zkServer.sh status
7.配置ZooKeeper集成到Hadoop
1 . 修改Hadoop的core-site.xml
文件,添加ZooKeeper的Quorum配置:
vim $HADOOP_HOME/etc/hadoop/core-site.xml
2 . 添加以下内容:
<property><name>ha.zookeeper.quorum</name><value>ubuntu1:2181,ubuntu2:2181,ubuntu3:2181</value>
</property>
8.重启Hadoop
1 . 重新启动Hadoop集群以应用新的配置:
stop-all.sh
start-all.sh
9.ZooKeeper状态检查
- 使用ZooKeeper命令行客户端检查ZooKeeper的状态:
zkCli.sh -server ubuntu1:2181
- 在ZooKeeper命令行客户端中,可以输入以下命令来检查集群状态:
ls /
stat
创建一个新的节点:
create /mytest "testdata"
验证节点创建:
ls /
删除节点:
delete /mytest
相关文章:

【八】Zookeeper3.7.1集成Hadoop3.3.4集群安装
文章目录 1.基本原理2.下载并解压ZooKeeper3.配置环境变量4.配置ZooKeeper5.创建数据目录并初始化myid6.启动ZooKeeper7.配置ZooKeeper集成到Hadoop8.重启Hadoop9.ZooKeeper状态检查 1.基本原理 ZooKeeper 是一个分布式协调服务,用于分布式系统中管理配置信息、命名…...

【C/C++笔记】:易错难点3 (二叉树)
选择题 🌈eg1 一棵有15个节点的完全二叉树和一棵同样有15个节点的普通二叉树,叶子节点的个数最多会差多少个()? 正确答案: C A. 3 B. 5 C. 7 D. 9 解析:普通二叉树的叶子节…...
一篇文章解决Webpack
一:什么是webpack webpack是一个用于现代JavaScript应用程序的静态模块打包工具。本质是一个软件包, 静态模块包括以下:html、css、js、图片等固定内容的文件 二:webpack工作原理 当 webpack 处理应用程序时,它会在内…...
速盾:cdn如何解析php文件中的图片?
CDN(Content Delivery Network)是一种通过分布在全球各地的服务器来加速网络内容传输的技术。CDN通过将内容缓存在离用户最近的服务器上,提供更快的访问速度和更好的用户体验。在解析PHP文件中的图片时,CDN可以起到以下几个方面的…...

如何快速实现MODBUS TCP转Profinet——泗博网关EPN-330
泗博网关EPN-330可作为PROFINET从站,支持与西门子S7-200 SMART/300/400/1200/1500全系列PLC以及具有PROFINET主站的系统无缝对接,而Modbus TCP端,可以与Modbus TCP从站设备、主站PLC、DCS系统以及组态软件等进行数据交互。 通过EPN-330&…...

什么是实时数据仓库?它有哪些不可替代之处?
【实时数据仓库】可以分开来理解: ✅【实时数据】:即能够快速处理数据,且几乎无延迟的提供最新的数据的能力。 ✅【仓库管理】:可以理解为对仓库的库存控制、对仓库的存储优化以及协调物流。 那么实时数据仓库就是:…...

《Ubuntu22.04环境下的ROS2学习笔记1》
一、在ROS2环境下创建工作空间 ROS2相比ROS1来说工作空间的创建有较大的不同,同时工作空间中的四个目录被更换为src(存放源码) , build(存放编译的中间文件) , install(存放可执行文件) , log(日志)。同时命令行也有些许变化&…...
Jupyter nbextensions安装与使用
Jupyter nbextensions的安装与使用主要包括以下几个步骤: 一、安装步骤 确保已安装Jupyter Notebook 如果尚未安装Jupyter Notebook,可以使用pip命令进行安装: pip install jupyter 安装nbextensions 使用pip命令安装nbextensions包&#x…...

java.nio.charset.MalformedInputException: Input length = 1
1、问题 项目启动报错: Exception in thread "main" org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1提示原因: Caused by: java.nio.charset.MalformedInputException: Input length 1…...
yarn的安装和配置使用
文章目录 一、前言二、yarn简介三、yarn的特点四、yarn安装五、配置yarn5.1 全局配置5.2 项目配置 五、使用yarn六、yarn常用命令七、版本管理 一、前言 Yarn是facebook发布的一款取代npm的包管理工具,本文给大家介绍yarn的安装和使用,最详细教程&#…...

JVM知识总结(即时编译)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 即时编译 Java编译器经过解释执行,其执行速度必然会比…...

【网络】TCP协议——TCP连接相关、TCP连接状态相关、TCP数据传输与控制相关、TCP数据处理和异常、基于TCP应用层协议
文章目录 Linux网络1. TCP协议1.1 TCP连接相关1.1.1 TCP协议段格式1.1.2 确定应答(ACK)机制1.1.3 超时重传机制 1.2 TCP连接状态相关1.2.1 TIME_WAIT状态1.2.2 CLOSE_WAIT 状态 1.3 TCP数据传输与控制相关1.3.1 滑动窗口1.3.2 流量控制1.3.3 拥塞控制1.3.4 延迟应答1.3.5 捎带应…...
一起看看JavaAgent到底是干啥用的
JavaAgent 简介 定义: JDK提供的一种能力,允许开发者在运行时对已有class代码进行注入和修改。用途: 增强和修改类执行,如IntelliJ IDEA使用JavaAgent增强JVM行为实现调试功能。 JavaAgent 工作原理 premain 方法: JavaAgent的入口点,接收…...

k8s工作负载控制器--DaemonSet
文章目录 一、概述二、适用场景三、基本操作1、官网的DaemonSet资源清单2、字段解释3、编写DaemonSet资源清单4、基于yaml创建DaemonSet5、注意点5.1、必须字段5.2、DaemonSet 对象的名称5.3、.spec.selector 与 .spec.template.metadata.labels之间的关系 6、查看DaemonSet6.1…...

探索Python文档自动化的奥秘:MkDocs的神奇之旅
文章目录 **探索Python文档自动化的奥秘:MkDocs的神奇之旅**第一部分:背景为什么选择MkDocs? 第二部分:MkDocs是什么?MkDocs:文档生成的瑞士军刀 第三部分:如何安装MkDocs?一键安装&…...
树莓派边缘计算网关搭建:集成MQTT、SQLite与Flask的完整解决方案
一、项目概述 随着物联网(IoT)的快速发展,边缘计算的应用越来越广泛。边缘计算可以将数据处理和分析推向离数据源更近的地方,从而降低延迟,提高效率。本文将介绍如何利用树莓派构建一个多协议边缘计算网关,…...

如何通过GD32 MCU内部ADC参考电压通道提高采样精度?
ADC采样精度受很多因素影响,比如电源波动、参考电压波动、输入信号波动等,GD32 MCU内部提供了一个参考电压通道,理论上可以优化由于电源和参考电压较大波动引入的采样误差。 如下图所示,GD32F303 ADC内部17通道为VREFINT参考电压…...
Centos安装OpenSearch
Centos安装OpenSearch 下载并安装OpenSearch下载OpenSearch RPM包导入公共GNU Privacy Guard(GPG)密钥。此密钥验证您的OpenSearch实例是否已签名安装RPM包安装完设置开机自启动OpenSearch启动OpenSearch验证OpenSearch是否正确启动 测试OpenSearch向服务…...

【pkill pgrep】Centos/Linux pkill命令详细介绍
【pkill & pgrep】Centos/Linux pkill命令详细介绍 简介 基础语法 选项介绍 退出状态 基本用法 注意事项 简介 系统版本:Centos7.6 pkill命令用于杀死一个进程,会根据进程名称和其他属性杀死进程(默认会向进程发送SIGTERM信号&…...
Java如何使用 HTTP 请求下载图片
工具类: public FileInputStream fileDownload(String fileLink) throws Exception {System.out.println("开始下载"fileLink);// 转码中文URL url new URL(encodeURLChinese(fileLink));System.out.println("fileLink:"url);// 开始下载Trust…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

spring boot使用HttpServletResponse实现sse后端流式输出消息
1.以前只是看过SSE的相关文章,没有具体实践,这次接入AI大模型使用到了流式输出,涉及到给前端流式返回,所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...

python可视化:俄乌战争时间线关键节点与深层原因
俄乌战争时间线可视化分析:关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一,自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具,系统分析这场战争的时间线、关键节点及其背后的深层原因,全面…...