Hadoop高手之路6-ZooKeeper

news2024/9/20 15:09:16

文章目录

  • Hadoop高手之路6-Zookeeper分布式协调服务
    • 一、Zookeeper简介
    • 二、Zookeeper的特性
      • 1. 一致性C
      • 2. 可靠性
      • 3. 顺序性
      • 4. 原子性A
      • 5. 实时性
    • 三、Zookeeper分布式集群的部署
      • 1. 下载安装包
      • 2. 上传
      • 3. 解压
      • 4. 配置环境变量
      • 5. 配置Zookeeper
        • 1) 复制一个配置模板文件
        • 2) 修改配置文件
        • 3) 创建myid文件
      • 6. 分发zookeeper文件
      • 7. 在各服务器上创建myid文件
      • 8. 分发环境变量配置文件
      • 9. 使环境变量起作用
    • 四、Zookeeper集群服务的启动和关闭
      • 1. 启动Zookeeper服务
      • 2. 查看zookeeper集群各服务器的角色
      • 3. 关闭Zookeeper服务
    • 五、测试Zookeeper服务
      • 1. 启动各节点的Zookeeper服务
      • 2. 杀死leader,模拟服务器宕机
      • 3. 查看各节点角色
      • 4. 通过zookeeper客户端连接zookeeper服务
    • 六、Zookeeper的Shell操作
      • 1. 启动Zookeeper集群
      • 2. 启动shell
      • 3. help显示所有的操作命令
      • 4. ls查看目录信息
      • 5. ls -sw查看目录的数据信息
      • 6. create创建节点
      • 7. get获取节点数据
      • 8. 修改节点
      • 9. delete删除节点
    • 七、Zookeeper的Java API操作
      • 1. 启动idea,创建一个新的maven项目
      • 2. 添加pom依赖
      • 3. 新建一个包,并在包下新建类
        • 1) 测试客户端代码
        • 2) 创建目录节点
        • 3) 创建子目录节点
        • 4) 获取节点数据
        • 5) 获取子目录节点数据
        • 6) 修改子目录节点数据
        • 7) 判读节点是否存在
        • 8) 删除节点
        • 9) 完整代码
    • 八、Zookeeper的数据模型
      • 1. 数据的存储结构
      • 2. Znode类型
      • 3. 节点的属性
    • 九、Zookeeper的Watch机制
      • 1. Watch机制简介
      • 2. Watch机制的特点
        • 1) 一次性触发
        • 2) 事件封装
        • 3) 异步发送
        • 4) 先注册再发送
    • 十、Zookeeper的选举机制
      • 1. 选举机制简介
        • 1) 服务器ID
        • 2) 选举状态
        • 3) 数据ID
        • 4) 逻辑时钟
      • 2. 选举机制的类型
        • 1) 全新选举
        • 2) 非全新选举
    • 十一、Zookeeper的应用场景
      • 1. 数据发布与订阅
      • 2. 统一命名服务
      • 3. 分布式锁

Hadoop高手之路6-Zookeeper分布式协调服务

一、Zookeeper简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper包含一个简单的原语集,提供Java和C的接口。

ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

zookeeper主要是用来解决分布式集群中的一致性和单点故障问题

image-20221108135036778

二、Zookeeper的特性

保证了数据的AC特性

1. 一致性C

每个服务器都保存一份相同的数据副本,客户端连接到zookeeper集群的任意节点上,看到的的目录树都是一致的。

2. 可靠性

如果对目录结构进行任意的增删改查,那么所有的节点都会随着进行相应的改变。

3. 顺序性

Zookeeper顺序性分为全局有序和偏序两种。

  • 全局有序:如果在一台服务器上某一种操作(消息)a先于b进行,那么所有的服务器上都是a先于b进行的。

  • 偏序:如果一个操作(消息)b在a后被同一个发送者发布,a必将排在b前面。

4. 原子性A

一次数据的更新操作要么成功要么失败,不存在中间的状态。

5. 实时性

Zookeeper保证客户端在一个时间间隔范围内获得服务器的更新信息。

三、Zookeeper分布式集群的部署

1. 下载安装包

image-20221108110458301

image-20221108110531591

image-20221108110549993

image-20221108110903255

image-20221108110929650

image-20221108135256473

2. 上传

image-20221108140718304

image-20221108140709438

3. 解压

image-20221108141120825

image-20221108141146256

image-20221108141218336

在这里插入图片描述

4. 配置环境变量

image-20221108142159330

image-20221108142130403

5. 配置Zookeeper

image-20221108142432185

1) 复制一个配置模板文件

image-20221108143934196

2) 修改配置文件

在这里插入图片描述

3) 创建myid文件

myid文件的数据越大,越容易被选举成为leader,这个文件的内容一般就是服务器的编号,在每个服务器上都要创建相应的目录以及该文件。

image-20221108145330661

image-20221108145004712

6. 分发zookeeper文件

image-20221108150435026

image-20221108150505483

7. 在各服务器上创建myid文件

在hadoop002上

image-20221108150808451

在hadoop003上

image-20221108151605859

8. 分发环境变量配置文件

image-20221108151958621

9. 使环境变量起作用

image-20221108152048451

四、Zookeeper集群服务的启动和关闭

1. 启动Zookeeper服务

依次在hadoop001、hadoop002和hadoop003上启动Zookeeper服务

在hadoop001上

image-20221108153018547

在hadoop002上

image-20221108153116731

在hadoop003上

image-20221108153204867

2. 查看zookeeper集群各服务器的角色

角色有三种:leader(领导者)、follower(跟随者)、observer(观察者)

在hadoop001上

image-20221108153415954

在hadoop002上

image-20221108153758561

在hadoop003上

在这里插入图片描述

说明:因为先启动node1,然后启动node2,node2的myid为2,而且超过节点个数的半数,所以node2被选举为leader

3. 关闭Zookeeper服务

在hadoop001上

image-20221108154356508

在hadoop002上

image-20221108154455513

在hadoop003上

image-20221108154548101

五、测试Zookeeper服务

先启动Zookeeper后,杀掉leader的进程,然后查看选举产生新的leader

1. 启动各节点的Zookeeper服务

image-20221108155512114

image-20221108155459057

image-20221108155434418

2. 杀死leader,模拟服务器宕机

在hadoop002上

image-20221108155626085

image-20221108155659368

3. 查看各节点角色

发现hadoop003已经被选举为leader

image-20221108155818846

image-20221108155834834

image-20221108155852262

4. 通过zookeeper客户端连接zookeeper服务

image-20221108160329192

image-20221108160227123

没有出现[zk: localhost:2181(CONNECTED) 0],输入回车就可以了

可以输入命令

image-20221108164518941

六、Zookeeper的Shell操作

1. 启动Zookeeper集群

image-20221111122749847

image-20221111122809515

在这里插入图片描述

2. 启动shell

image-20221111123117098

image-20221111123341207

image-20221111123818471

3. help显示所有的操作命令

image-20221111124022141

4. ls查看目录信息

image-20221111124320481

image-20221111124452319

5. ls -sw查看目录的数据信息

image-20221111132129926

image-20221111132221626

6. create创建节点

格式:

create [-s] [-e] path [data] [acl]

说明:

  • s:开启节点的序列化特性
  • e:创建的是临时节点,如果不加默认创建永久节点

image-20221111154900201

image-20221111155106594

image-20221111155203996

7. get获取节点数据

image-20221111155455486

8. 修改节点

image-20221111155655742

9. delete删除节点

image-20221111160827367

image-20221111161746179

七、Zookeeper的Java API操作

1. 启动idea,创建一个新的maven项目

在这里插入图片描述

2. 添加pom依赖

image-20221111185249550

3. 新建一个包,并在包下新建类

1) 测试客户端代码

新建包和类

image-20221111184230861

image-20221111185045253

image-20221111185138013

image-20221111185705020

在这里插入图片描述

2) 创建目录节点

image-20221111225953979

运行

image-20221111230104628

通过客户端的shell进行查看

在这里插入图片描述

3) 创建子目录节点

先将目录代码注释掉,否则会报错

在这里插入图片描述

运行,查看结果

image-20221111230835001

4) 获取节点数据

image-20221111231424048

在这里插入图片描述

5) 获取子目录节点数据

image-20221111231935928

6) 修改子目录节点数据

image-20221111232154289
在这里插入图片描述

7) 判读节点是否存在

image-20221111232953865

8) 删除节点

image-20221111233212855

在这里插入图片描述

9) 完整代码

package cn.edu.hgu.bigdata20.zookeeper;


import org.apache.zookeeper.*;

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

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("/testHello","HelloZookeeper".getBytes(StandardCharsets.UTF_8),
//                ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        // 3.创建子目录节点
//        zooKeeper.create("/testHello/testWorld","HelloWorld".getBytes(StandardCharsets.UTF_8),
//                ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        // 4.获取节点数据
//        System.out.println(new String(zooKeeper.getData("/testHello",false,null)));
        // 5.获取子目录的节点数据
//        zooKeeper.getChildren("/testHello",true);
        // 6.修改子目录节点数据
//        zooKeeper.setData("/testHello/testWorld","123456".getBytes(StandardCharsets.UTF_8)
//                ,-1);
        // 7.判断节点是否存在
//        System.out.println(zooKeeper.exists("/testHello",true));
        // 8.删除节点
        zooKeeper.delete("/testHello/testWorld", -1);
    }
}

八、Zookeeper的数据模型

1. 数据的存储结构

树型结构,树中的每个节点被称为Znode,每一个Znode默认能够存储1MB的数据,由三部分组成:stat(状态信息)、data(数据信息)和children(子节点)

在这里插入图片描述

2. Znode类型

加上-s选项,可以创建四种类型的节点

  • 永久节点:该节点的生命周期不依赖于会话,只有执行删除操作的时候才还被删除。
  • 临时节点:该节点的生命周期依赖于创建它们的会话,一旦会话结束,临时节点会被自动删除,也可以手动删除,临时节点不允许拥有子节点
  • 序列化永久节点
  • 序列化临时节点

创建一个临时节点:

image-20221111233629912

退出会话后再次进入,发现临时节点被自动删除

image-20221111233724668

创建会话

image-20221111233757025

image-20221111233901643

3. 节点的属性

image-20221111233942599

九、Zookeeper的Watch机制

1. Watch机制简介

在Zookeeper中,引入watch机制来实现分布式的通知功能,zookeeper运行客户端向服务器端注册一个watch监听,当服务器端的一些事件触发了这个watch,那就会指定客户端发送一个事件通知,来实现分布式的通知功能。

2. Watch机制的特点

1) 一次性触发

2) 事件封装

包括了状态、类型和路径

image-20221111234109827

3) 异步发送

4) 先注册再发送

十、Zookeeper的选举机制

1. 选举机制简介

Zookeeper为了保证各节点协同工作,需要一个Leader角色,而Zookeeper采用FirstLeaderElection算法,且投票数大于节点的半数则胜出成为Leader。

1) 服务器ID

配置集群时,给每个服务器一个myid,该编号越大,则权重越大,越容易被选举为Leader

2) 选举状态

  • LOOKING:竞选状态
  • FOLLOWING:随从状态,同步leader状态,参与投票
  • OBSERVING:观察状态:同步leader状态,不参与投票
  • LEADING:领导者状态

3) 数据ID

最新的数据版本号,该值越大,说明数据越新,权重越大,越容易被选为leader

4) 逻辑时钟

也叫做投票次数,起始值为0,每投完一次票,这个值就会增加。该值越低,说明投票次数越少,该服务器就有可能宕机。

2. 选举机制的类型

1) 全新选举

是指新搭建起来,没有数据id和逻辑时钟的选举。选举步骤:

步骤1:服务器1启动,先给自己投票后发送投票信息,处于LOOKING状态

步骤2:服务器2启动,先给自己投票,跟服务器1进行对比,服务器2编号大而胜出,服务器1会把票投给服务器2,如果超过半数,则服务器2为Leader状态,服务器1为追随者状态,否则两个服务器都是LOOKING状态。

步骤3:依次进行其他服务器的启动投票,选出Leader状态,其他服务器成为FOLLOWING状态

2) 非全新选举

对于正常运行的Zookeeper集群,一旦中途有服务器宕机,则需要重新选举。

步骤1:首先统计逻辑时钟是否相同,如果不同,有小的逻辑时钟,说明存在宕机,需要重新投票选举。

步骤2:统一逻辑时钟,对比数据ID值,ID值大的胜出。

步骤3:如果逻辑时钟和数据ID都相同,这比较服务器的ID(编号),值大者胜出。

说明:非全新选举是一种优中选优,保证Leader是集群中数据最完整、最可靠的。

十一、Zookeeper的应用场景

1. 数据发布与订阅

也叫全局配置中心

2. 统一命名服务

阿里开源的分布式服务框架Dubbo采用Zookeeper作为命名服务

3. 分布式锁

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

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

相关文章

C语言排序算法

冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 过程演示: #i…

shell第二天练习

题目 1、编写一个 Shell脚本,程序执行时从键盘读入一个目录名,如果用户输入的目录不存在,则提示file does not exist;如果用户输入的不是目录则提示用户必须输入目录名;如果用户输入的是目录则显示这个目录下所有文件…

django笔记《模型和数据库一》

文章目录1 前言2 创建一个demo项目2.1 修改配置文件3 模型3.1 主键3.2 django 内置字段类型3.3 自定义字段类型3.4 django字段选项3.5 字段备注名3.5 META3.6 关联关系3.6.1 多对一关系3.6.2 多对多关系3.6.3 一对一关系3.7 字段命名限制3.8 模型属性:Model.objects…

基于springboot+Vue前后端分离的招聘管理系统(程序+数据库+文档)

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

A Survey on Deep Learning Techniques for Stereo-based Depth Estimation论文阅读

1. 摘要 估计RGB图片的深度是一个长期存在的病态问题,计算机视觉、图形学、机器学习社区已经探索了数十年。立体匹配是最广泛见诸文献的技术之一,因为它与人类的双目系统有强关联。传统上,利用多张图片的人工特征匹配来处理基于立体的深度估…

nginx 实现图片防盗链功能

在搜索浏览网页的时候,发现一篇文章是从我的个人网站转载的,但是没有注明出处,文章中的图片也没有本地化处理,还是从我的服务器请求,这就无形中增加了我的服务器的开销,于是有了设置防盗链功能这一想法。 …

Kafka 核心源码解读【五】--延迟操作模块

文章目录1 TimingWheel:探究Kafka定时器背后的高效时间轮算法1.1 时间轮简介1.2 源码层级关系1.3 时间轮各个类源码定义1.3.1 TimerTask 类1.3.2 TimerTaskEntry 类1.3.3 TimerTaskList 类1.3.4 TimingWheel 类1.4 总结2 DelayedOperation:Broker是怎么延…

【Vue】九、vue-element-admin

后端程序员的vue学习之路一、介绍二、功能特性三、前置准备四、前置知识五、项目结构说明:六、安装运行一、介绍 vue-element-admin 是一个后台前端解决方案,它基于 vue 和 element-ui实现,它使用了最新的前端技术栈,内置了动态路…

深入理解计算机系统_程序的链接过程

编辑好的程序,依次经过预处理(注释,宏替换,头文件包含,生成.s文件)、编译(生成汇编文件.s )、汇编(生成静态可重定位目标文件,文件名是.o)、链接后最终得到可执行目标文件,这个笔记记录一下,链接…

信号处理系列之死区滤波器(DeadZone)

信号处理专栏相关限幅滤波的文章,可以参看下面的链接,这里不再赘述: 博途PLC信号处理系列之限幅消抖滤波_RXXW_Dor的博客-CSDN博客关于限幅滤波可以参看下面这篇文章PLC信号处理之限幅滤波(西门子三菱FB)_RXXW_Dor的博客-CSDN博客限幅滤波是一种消除随机干扰的有效方法,比…

WordPress元宇宙和VR(虚拟现实)最佳插件汇总

近年来,虚拟现实(VR )和元宇宙(Metaverse )变得越来越流行。它使用户能够在舒适的家中享受身临其境的体验。此外,将此功能添加到您的网站可以帮助您的内容更具交互性,这可能会带来更多转化。幸运…

RHCE——ansible安装配置(2)

安装并且配置ansible: 1)安装和配置ansible以及ansible控制节点server.example.com如下: 2)创建一个名为/home/student/ansible/inventory的静态库存文件如下所示: 2.1)node1 是dev主机组的成员 2.2)node2是test主机组的成员 2.3)node1和node…

c++动态内存管理

1.回顾c语言中的动态内存管理 在c语言中,我们想要动态开辟一段空间,需要使用malloc,calloc,realloc几个函数 void* malloc (size_t size); //在堆上申请size个字节的空间void* calloc (size_t num, size_t size); //第一个参数是…

压缩空气储能研究(Matlab代码)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

CMMI之技术预研

技术预研(Technical Pre-Research, TPR)是指在立项之后到开发工作完成之前的时间内,对项目将采用的关键技术提前学习和研究,以便尽可能早地发现并解决开发过程中将会遇到的技术障碍。 技术预研过程域是SPP模型的重要组成部分。本…

Android实现轮播控件Banner

背景 最近做需求要实现一个轮播图,最后通过HandlerViewPager实现了需求,所以把实现的过程总结一下,方便以后学习参考,以下是轮播图的效果: 实现思路 定时轮播 利用HandlerViewPager,Handler发送定时消息切…

初探Scala

目录 Scala介绍 Scala 环境搭建 IDEA新建Maven工程 创建执行输出Hello Scala Scala中main方法语法的详细解读 class 和 object 说明 Scala介绍 一般来说,学 Scala 的人,都会 Java,而 Scala 是基于 Java 的,因此我们需要将 S…

CSS基础总结(五)定位

文章目录 1.为什么需要定位 2.定位的组成 2.1公式 2.2定位模式 2.2.1静态定位static 2.2.2相对定位relative 2.2.3绝对定位absolute 2.2.4固定定位fixed 2.2.5粘性定位sticky 总结 2.3边偏移 3.定位叠放次序 4.定位拓展 4.1子绝父相布局法 4.2固定于版心右侧位置方…

read and write

read and write The read and write methods both perform a similar task, that is, copying data from and to application code. Therefore, their prototypes are pretty similar, and its worth introducing them at the same time: read 和 write 方法都执行类似的任务&…

Java开发 - 常用算法深度讲解,让你再也不会忘记

目录 前言 冒泡排序 原理 选择排序 原理 插入排序 原理 二分查找排序 原理 结语 前言 经常会有一些算法,我们说常用不常用,说不用也偶尔会用,当时看记住了,过几天提起来又忘记了,这是为什么呢?以…