【大数据技术基础 | 实验五】ZooKeeper实验:部署ZooKeeper

在这里插入图片描述

文章目录

    • 一、实验目的
    • 二、实验要求
    • 三、实验原理
    • 四、实验环境
    • 五、实验步骤
      • (一)安装JDK
      • (二)修改ZooKeeper配置文件
      • (三)启动ZooKeeper集群
    • 六、实验结果
    • 七、实验心得


一、实验目的

掌握ZooKeeper集群安装部署,加深对ZooKeeper相关概念的理解,熟练ZooKeeper的一些常用Shell命令。

二、实验要求

部署三个节点的ZooKeeper集群,通过ZooKeeper客户端连接ZooKeeper集群,并用Shell命令练习创建目录,查询目录等。

三、实验原理

ZooKeeper分布式服务框架是Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

ZooKeeper是以Fast Paxos算法为基础的。

ZooKeeper集群的初始化过程:集群中所有机器以投票的方式(少数服从多数)选取某一台机器作为leader(领导者),其余机器作为follower(追随者)。如果集群中只有一台机器,那么就这台机器就是leader,没有follower。

ZooKeeper集群与客户端的交互:客户端可以在任意情况下ZooKeeper集群中任意一台机器上进行读操作;但是写操作必须得到leader的同意后才能执行。

ZooKeeper选取leader的核心算法思想:如果某服务器获得N/2+1票,则该服务器成为leader。N为集群中机器数量。为了避免出现两台服务器获得相同票数(N/2),应该确保N为奇数。因此构建ZooKeeper集群最少需要3台机器。

四、实验环境

  • 云创大数据实验平台:
    在这里插入图片描述
  • Java 版本:jdk1.7.0_79
  • Hadoop 版本:hadoop-2.7.1
  • ZooKeeper 版本:zookeeper-3.4.6

五、实验步骤

本实验主要介绍ZooKeeper的部署,ZooKeeper一般部署奇数个节点,部署方法包主要含安装JDK、修改配置文件、启动测试三个步骤。

(一)安装JDK

下载安装JDK。因为ZooKeeper服务器在JVM上运行。学校的云创大数据实验服务器内已经安装JDK了所以不需要配置,而且一般的云服务器都会自带Java和Python环境,如果是自己本地的虚拟机的话就需要配置环境。简单的讲一下配置JDK的过程:

  1. 首先,到Oracle官网下载对应的jdk版本的压缩包
  2. 接着,通过WinSCP工具将jdk压缩包上传到虚拟机上
  3. 然后,在虚拟机内解压刚才的jdk压缩包
  4. 然后,进入etc/profile文件内配置jdk环境变量
  5. 最后,重启虚拟机并检查jdk环境是否配置成功

(二)修改ZooKeeper配置文件

首先配置master,slave1,slave2之间的免密和各个机器的/etc/hosts文件,可参考:【大数据技术基础 | 实验一】配置SSH免密登录

修改ZooKeeper的配置文件,步骤如下:
进入解压目录下,把conf目录下的zoo_sample.cfg复制成zoo.cfg文件。

cd /usr/cstor/zookeeper/conf
cp zoo_sample.cfg zoo.cfg

在这里插入图片描述

打开zoo.cfg并修改和添加配置项目,如下:

vim zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the port at which the clients will connect
clientPort=2181
# the directory where the snapshot is stored.
dataDir=/usr/cstor/zookeeper/data
dataLogDir=/usr/cstor/zookeeper/log
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

在这里插入图片描述

然后,新建两个目录。

mkdir /usr/cstor/zookeeper/data
mkdir /usr/cstor/zookeeper/log

/usr/cstor/zookeeper目录传到另外两台机器上。

scp -r /usr/cstor/zookeeper root@slave1:/usr/cstor
scp -r /usr/cstor/zookeeper root@slave2:/usr/cstor

在这里插入图片描述

然后,分别在三个节点上的/usr/local/zookeeper/data目录下创建一个文件:myid

vim /usr/cstor/zookeeper/data/myid

分别在myid上按照配置文件的server.中id的数值,在不同机器上的该文 件中填写相应过的值,如下:

  • master 的myid内容为1
  • slave1 的myid内容为2
  • slave2 的myid内容为3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(三)启动ZooKeeper集群

然后,启动ZooKeeper集群,进入客户端验证部署完成。分别在三个节点进入bin目录,启动ZooKeeper服务进程:

cd /usr/cstor/zookeeper/bin
./zkServer.sh start

在各机器上依次执行脚本,查看ZooKeeper状态信息,两个节点是follower状态,一个节点是leader状态:

./zkServer.sh status

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在其中一台机器上执行客户端脚本:

./zkCli.sh -server master:2181,slave1:2181,slave2:2181

在这里插入图片描述

在客户端shell下执行创建目录命令:

create /testZk ""

/testZk目录写数据:

set /testZk 'aaa'

读取/testZk目录数据:

get /testZk

删除/testZk目录:

rmr /testZk

在客户端shell下用quit命令退出客户端:

quit

在这里插入图片描述

六、实验结果

各个节点执行jps命令查看Java进程,有QuorumPeerMain进程代表该节点ZooKeeper安装成功,如图所示。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在客户端Shell下查看ZooKeeper集群目录,输入命令:ls /,查看ZooKeeper集群目录列表结果如图所示。

在这里插入图片描述

七、实验心得

  在本次ZooKeeper部署实验中,通过搭建包含三个节点的ZooKeeper集群,进一步理解了ZooKeeper在分布式系统中的角色和功能。

  首先,实验过程涵盖了JDK的安装、ZooKeeper配置文件的修改、节点间的免密设置等步骤。配置文件设置了基础的集群参数,如tickTimeinitLimitsyncLimit等,还指定了不同节点的端口信息及数据存储目录。各节点的数据文件myid的创建也体现了ZooKeeper的分布式集群特性,通过唯一ID标识每个节点的角色。

  其次,在启动集群后,通过客户端Shell操作成功验证了集群的正常运行状态。利用ZooKeeper客户端执行了目录创建、数据写入和读取、以及目录删除的基本操作,熟悉了ZooKeeper的基本命令。

  实验结果显示各节点正常启动了ZooKeeper进程,并正确识别了Leader和Follower节点。这次实验帮助加深了对ZooKeeper集群管理和分布式协调服务的理解,为分布式应用开发奠定了基础。

:以上文中的数据文件及相关资源下载地址:
链接:https://pan.quark.cn/s/5100e953755d
提取码:amiC

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

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

相关文章

基于Netty构建WebSocket服务并实现项目群组聊天和实时消息通知推送

文章目录 前言需求分析技术预研Web端方案服务端技术 技术方案设计思路功能实现添加依赖自定义NettyServer自定义webSocketHandler使用NettyServer向在线用户发送消息 需要完善的地方 前言 我们的项目有个基于项目的在线文档编制模块,可以邀请多人项目组成员在线协同…

python爬虫-爬取蛋白晶体和分子结构

文章目录 前言一、环境准备二、爬取PDB蛋白结构1.下载指定数量的随机PDB2.下载指定靶标的PDB二、从ZINC爬取小分子mol2结构1.下载指定数量的随机分子2.下载指定分子三、从ChEMBL爬取小分子信息1.下载指定ID的SMILES(测试不成功,网站变成readonly了)四、总结爬虫1.查看对应的…

AMD锐龙8845HS+780M核显 虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)

最近买了机械革命无界14X,CPU是8845HS,核显是780M,正好macOS 15也出了正式版,试试兼容性,安装过程和之前差不多,这次我从外网获得了8核和16核openCore,分享一下。 提前发一下ISO镜像地址和open…

Flink Rest API

REST API | Apache Flink Flink官网API 通过curl 或者Rest API工具测试web UI对应的接口返回信息 Flink 提交yarn任务 ./bin/flink run -t yarn-per-job historyServer ../bin/historyserver.sh start

JavaScript完整笔记

JS引入 JavaScript 程序不能独立运行,它需要被嵌入 HTML 中,然后浏览器才能执行 JavaScript 代码。 通过 script 标签将 JavaScript 代码引入到 HTML 中,有两种方式: 内部方式 通过 script 标签包裹 JavaScript 代码 我们将 &…

安装Maven配置以及构建Maven项目(2023idea)

一、下载Maven绿色软件 地址:http://maven.apache.org/download.cgi 尽量不要选择最高版本的安装,高版本意味着高风险的不兼容问题,选择低版本后续问题就少。你也可以选择尝试。 压缩后: 打开后: 在该目录下新建mvn-…

SQLite 3.47.0 发布,大量新功能来袭

SQLite 开发团队于 2024 年 10 月 21 日发布了 SQLite 3.47.0 版本,我们来了解一下新版本的改进功能。 触发器增强 SQLite 3.47.0 版本开始,触发器函数 RAISE() 的 error-message 参数可以支持任意 SQL 表达式。在此之前,该参数只能是字符串…

SQL注入之sqlilabs靶场21-30题

重点插入:html表 第二十一题 分析过程:(没有正确的账号密码是否能拿到Cookie?最后注释好像只能使用#,--好像无法注释) 查看源码 这里输入账号密码处被过滤了 但Cookie被base64编码了 可以从Cookie入手 …

【Flutter】页面布局:弹性布局(Flex)

在 Flutter 开发中,布局是非常重要的部分。布局系统允许开发者控制和管理界面上的组件如何排列和展示。弹性布局(Flex)是其中一个非常强大且常用的布局组件,它能够在水平方向或垂直方向上灵活调整子组件的空间分配比例。Row 和 Co…

vue2结合echarts实现数据排名列表——前端柱状进度条排行榜

写在前面,博主是个在北京打拼的码农,工作多年做过各类项目,最近心血来潮在这儿写点东西,欢迎大家多多指教。 数据排名列表——图表开发,动态柱状图表,排名图 UI 直接搜到类似在线代码(数据列表…

javascript实现aes算法(支持微信小程序)

概述: 本代码是本人从c代码上转换成的javascript代码,并测试验证通过的。代码比较长1000多行,考虑放其他地方要么要会员要么容易关闭,不容易被需要的获取到,故直接贴在本文档下面的章节,功能代码。 测试平…

RK3568 android11 usb接口TP与电磁笔触点上报优先级问题

一,问题描述 双USB接口,电容触摸跟电磁手写笔触摸会产生误触现象,所以需要在底层实现电磁笔优先级。 电磁屏优先(指当笔和手都放屏上,手不发信息),因为都是USB接口使用,电容触摸跟电…

ubuntu22.04安装qemu-9.1并在i.MX6上运行linux kernel 6.11

1. qemu-stable-9.1源码编译安装 1.1. 下载qemu源码的stable-9.1分支 仓库地址 mkdir qemu_9.1 cd qemu_9.1 git clone https://gitlab.com/qemu-project/qemu.git --branchstable-9.1 --depth5 git submodule update --init --recursive cd qemu1.2. 安装依赖 参考文档 s…

多线程——线程池

目录 前言 一、什么是线程池 1.引入线程池的原因 2.线程池的介绍 二、标准库中的线程池 1.构造方法 2.方法参数 (1)corePoolSize 与 maximumPoolSize (2)keepAliveTime 与 unit (3)workQueue&am…

Redis集群分片存储最佳实践,手把手搭建Redis集群

目录 一、Redis集群介绍1、设计目标2、为什么需要分片存储 二、官网集群方案三、搭建集群1、准备6个独立的Redis服务2、通过redis-cli工具创建集群3、检验集群4、集群重新分片5、故障转移测试6、集群扩容7、集群节点删除 四、集群关心的问题五、集群功能限制 一、Redis集群介绍…

第11天理解指针

目录 数组指针 指针数组 字符指针数组 二维字符数组 const 修饰变量为常量 指针常量 常量指针 typedef 重命名数据类型 关于typedef的一般理解 具体示例分析 复杂示例分析 总结回顾--指针的奥秘:深入理解内存地址与数据存储 一、指针的本质 二、地址类…

使用Python实现智能火山活动监测模型

一、引言 火山爆发是自然界最具破坏力的事件之一,其对人类的影响可以从气候、空气质量到生命安全等多个方面产生深远影响。传统的火山监测依赖地质学家在现场采集数据,而现代科技的发展让远程监测成为可能。通过深度学习和数据分析技术,我们可以使用Python构建一个智能火山…

蓝桥杯题目理解

1. 一维差分 1.1. 小蓝的操作 1.1.1. 题目解析: 这道题提到了对于“区间”进行操作,而差分数列就是对于区间进行操作的好方法。 观察差分数列: 给定数列:1 3 5 2 7 1 差分数列:1 2 2 -3 5 6 题目要求把原数组全部…

C++[CSP-J 2023] 公路讲解

题目&#xff1a;2023CSP-J公路 思路&#xff1a;贪心 我们可以在草稿纸上列一列&#xff0c;滤清思路&#xff0c;这道题没什么难度的&#xff01; 代码&#xff1a; #include<bits/stdc.h> using namespace std; long long n,d,a[100005],v[100005],s[10005],id1; …

基于SpringBoot的高校体测管理系统设计与实现(源码+定制+开发)高校体测记录系统设计、高校体测信息管理平台、智能体测管理系统开发、高校体测记录系统设计

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…