【八】Zookeeper3.7.1集成Hadoop3.3.4集群安装

news2024/9/29 15:46:50

文章目录

  • 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 处理。
  1. 会话和 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 . 环境准备

hostnameip
ubuntu1172.16.167.131
ubuntu2172.16.167.132
ubuntu3172.16.167.133

2 . 下载ZooKeeper 3.7.1(或其他兼容版本)的二进制文件

https://archive.apache.org/dist/zookeeper/zookeeper-3.7.1/

image.png

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 . 将环境变量分发到其他节点并刷新

image.png

4.配置ZooKeeper

1 . 进入ZooKeeper的配置目录:

cd /usr/local/zookeeper/conf

2 . 复制zoo_sample.cfgzoo.cfg

cp zoo_sample.cfg zoo.cfg

3 . 编辑zoo.cfg文件,进行基本配置:

vim zoo.cfg

根据你的集群环境修改以下内容,目录一定要注意:

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=10
syncLimit=5

server.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分发到所有节点。

image.png

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

image.png

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>

image.png

8.重启Hadoop

1 . 重新启动Hadoop集群以应用新的配置:

stop-all.sh
start-all.sh

image.png

9.ZooKeeper状态检查

  • 使用ZooKeeper命令行客户端检查ZooKeeper的状态:
zkCli.sh -server ubuntu1:2181
  • 在ZooKeeper命令行客户端中,可以输入以下命令来检查集群状态:
ls /
stat

创建一个新的节点:

create /mytest "testdata"

验证节点创建:

ls /

删除节点:

delete /mytest

image.png

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

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

相关文章

51单片机—智能垃圾桶(定时器)

一. 定时器 1. 简介 C51中的定时器和计数器是同一个硬件电路支持的&#xff0c;通过寄存器配置不同&#xff0c;就可以将他当做定时器或者计数器使用。 确切的说&#xff0c;定时器和计数器区别是致使他们背后的计数存储器加1的信号不同。当配置为定时器使用时&#xff0c;每…

vue3 手写日历组件

找了很久vue3的element样式一直没办法修改实现。只能手写日历了。借鉴了一些大佬的代码 调用&#xff1a; 再要使用的地方引入 import calendarelement from ./calendarelement.vue //日历组件 <div > <calendarelement /> //日历</div> 效果&#…

押金原路退回系统在医院中应用,一键操作秒到账 押金+身份证+电子押金单

一、医院押金管理必要性 保障医疗服务的连续性&#xff1a;患者缴纳押金能够确保在治疗过程中&#xff0c;医院有足够的资金来提供必要的医疗服务、药品和设备&#xff0c;不会因为费用问题而中断治疗。例如&#xff0c;在紧急手术或需要持续使用昂贵药物的情况下&#xff0c;…

【Vue3】组件通信之$attrs

【Vue3】组件通信之$attrs 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的…

开发在线客服系统新的宣传推广站【微客客服】

打造一个软件宣传官网&#xff0c;这事儿可不简单。咱们得先搞清楚&#xff0c;这个网站要给谁看&#xff0c;要传达啥信息&#xff0c;需要哪些功能。 我们网站是宣传【在线客服系统】的&#xff0c;所以需要把主要功能展示清楚 在线网址&#xff1a;https://weikefu.com.cn 然…

Python面试宝典第27题:全排列

题目 给定一个不含重复数字的数组nums&#xff0c;返回其所有可能的全排列 。备注&#xff1a;可以按任意顺序返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]] 示例 2&#xff1a; 输…

Qt之Gui

组件依赖关系 应用 #mermaid-svg-GADicZtZJRVVUeiF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GADicZtZJRVVUeiF .error-icon{fill:#552222;}#mermaid-svg-GADicZtZJRVVUeiF .error-text{fill:#552222;stroke:#…

【Spark计算引擎----第三篇(RDD)---《深入理解 RDD:依赖、Spark 流程、Shuffle 与缓存》】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;本阶段和大家一起分享和探索大数据技术Spark—RDD&#xff0c;本篇文章主要讲述了&#xff1a;RDD的依赖、Spark 流程、Shuffle 与缓存等等。欢迎大家一起探索讨论&#xff01;&#xff0…

【Gold菜鸟】Linux知识回忆(8)——进程和计划任务

前言 这部分让我们来继续了解Linux中进程和计划任务的相关知识吧~ 相关技术交流欢迎添加VX: wenjinworkon 目录 进程和内存管理 什么是进程 进程结构 进程相关概念 物理地址空间和虚拟地址空间 用户和内核空间 进程使用内存问题 进程状态 内存淘汰数据机制&#xff1a;…

数学建模评价类—Topsis法

目录 文章目录 前言 切记&#xff1a;以下内容仅用于参考理解&#xff0c;不可用于数模竞赛&#xff01;&#xff01;&#xff01; 一、Topsis的基本原理 二、Topsis的建模过程 1.判断矩阵是否需要正向化 2.原始矩阵正向化 3.矩阵标准化 4.计算距离&#xff0c;给出得…

Can Large Language Models Provide Feedback to Students? A Case Study on ChatGPT

文章目录 题目摘要相关工作方法结果讨论意义 题目 大型语言模型能为学生提供反馈吗&#xff1f;ChatGPT 案例研究 论文地址&#xff1a;https://ieeexplore.ieee.org/abstract/document/10260740 摘要 摘要——教育反馈已被广泛认为是提高学生学习能力的有效方法。然而&#x…

Python | Leetcode Python题解之第322题零钱兑换

题目&#xff1a; 题解&#xff1a; class Solution:def coinChange(self, coins: List[int], amount: int) -> int:dp [float(inf)] * (amount 1)dp[0] 0for coin in coins:for x in range(coin, amount 1):dp[x] min(dp[x], dp[x - coin] 1)return dp[amount] if d…

Python的if语句及其运用

一、条件测试 每条if语句的核心都是一个值为True或False的表达式&#xff0c;这种表达式称为条件测试。如果测试的条件满足if语句则为True&#xff0c;接着执行if里的语句&#xff1b;如果测试的条件不满足if语句则为False&#xff0c;则不执行if里的语句。 1.1、检查是否相等…

C++ | Leetcode C++题解之第322题零钱兑换

题目&#xff1a; 题解&#xff1a; class Solution { public:int coinChange(vector<int>& coins, int amount) {int Max amount 1;vector<int> dp(amount 1, Max);dp[0] 0;for (int i 1; i < amount; i) {for (int j 0; j < (int)coins.size();…

二叉树(真题)

1.用非递归遍历求二叉树结点个数【计学2020】 算法思想:用先序非递归遍历 当前指针不为空或栈不为空进行循环&#xff1b; 当前指针不为空访问当前结点&#xff0c;当前节点入栈&#xff0c;进入左子树 当前指针为空&#xff0c;栈顶元素出栈&#xff08;回溯&#xff09;&…

【kickstart+pxe批量安装linux系统】

目录 一、实验环境准备二、安装kickstart1、kickstart自动安装脚本的制作 三、安装web服务器&#xff0c;提供网络源四、安装dhcp五、安装syslinux&#xff0c;tftp-server六、虚拟机中新建新主机 一、实验环境准备 1、rhel7主机 2、开启主机图形 init 5 开图形 3、配置网络可…

ESP8266 烧录,待坑

ets Jan 8 2013,rst cause:1, boot mode:(7,0)waiting for host 空芯片&#xff0c;未加SPI FLASH 显示 下载模式(IO15 10k下拉 &#xff0c; IO0下拉 &#xff08;直接GND),IO2上拉&#xff08;文档上说是有内部上拉的&#xff0c;先上拉&#xff09;&#xff09; &#xff…

jdbc(mysql)

1.概述 jdbc&#xff1a;java database connection&#xff08;java与数据库连接&#xff09; java可以连接不同数据库&#xff0c;不同数据库连接细节不同&#xff0c;具体细节都由数据库自己实现 由java设计出一系列连接数据库的接口规范&#xff0c;然后由不同的数据库开发…

C语言程序设计26

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.3 上机运行下面的程序&#xff0c;分析输出结果 代码 //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //习题2.3 上机运行下面的程序&#xff0c;分析输出结果#include <stdio.h> int …

【MYSQL】MYSQL逻辑架构

mysql逻辑架构分为3层 mysql逻辑架构分为3层 1). 连接层&#xff1a;主要完成一些类似连接处理&#xff0c;授权认证及相关的安全方案。 2). 服务层&#xff1a;在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的&#xff0c;包括权限判断&#xff0c;SQL接口&…