ZooKeeper入门及安装,kafka-ui安装
一:简介
zk就是一个分布式文件系统,不过存储数据的量极小。
这个技术虽然比较小和简单,但是大数据领域还是离不开它的,比如:
hadoop集群,kafka集群,hbase 等都需要zk的支持。
1. zookeeper是一个为分布式应用程序提供的一个分布式开源协调服务框架。是Google的Chubby的一个开源实现,是Hadoop和Hbase的重要组件。主要用于解决分布式集群中应用系统的一致性问题。
2. 提供了基于类似Unix系统的目录节点树方式的数据存储。
3. 可用于维护和监控存储的数据的状态的变化,通过监控这些数据状态的变化,从而达到基于数据的集群管理。
比如namenode 启动两个 namenode1 namenode2
4. 提供了一组原语(机器指令),提供了java和c语言的接口
通俗的理解:
1、zk其实是一个小型的文件存储系统,可以存放少量的数据,这些数据不是什么正儿八经的数据,都是一些关于服务器的小数据。
2、它可以感知服务器是否上线,是否掉线。
3、我们为什么要学习这个东西?我们可以使用zk搭建集群环境。
比如:hadoop的高可用(HA),namenode 存在单节点故障。我们可以启用两个namenode,一个挂掉了,另一个自动启动。另一个namenode如何知道第一个namenode挂掉了?zk就可以做到。
包括:HBase也会使用到。
Java架构中: zk进行分布式锁等操作。
各个版本下载界面:https://zookeeper.apache.org/releases.html
二:特点
1. 也是一个分布式集群,一个领导者(leader),多个跟随者(follower).
2. 集群中只要有半数以上的节点存活,Zookeeper集群就能正常服务。
3. 全局数据一致性:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的。
4. 更新请求按顺序进行:来自同一个client的更新请求按其发送顺序依次执行
5. 数据更新的原子性:一次数据的更新要么成功,要么失败
6. 数据的实时性:在一定时间范围内,client能读到最新数据。
三:数据存储
结构是从根节点开始的/
每一个子节点都可以有其他子节点(节点数不限),也可以在该节点上存放数据,这个来讲有点像Unix.结构如图:
四:安装
安装之前:先关闭服务器(搭建的分布式集群每台的都要关)的防火墙 !!!!!
systemctl stop firewalld 关闭防火墙
systemctl disable firewalld 开机不启动防火墙
1.上传zookeeper的压缩包到 虚拟机的/opt/modules下面(我使用的MobaXterm直接拖拽到左侧对应的目录中)
2.解压 /opt/installs下面
tar -zxvf apache-zookeeper-3.6.4-bin.tar.gz -C /opt/installs/
3.重命名
mv apache-zookeeper-3.6.4-bin/ zookeeper
4.修改配置文件
进入到/opt/installs/zookeeper/conf文件夹下,重命名zoo_sample.cfg
mv zoo_sample.cfg zoo.cfg
MobaXterm中右键文件点击“使用...打开”使用nodepad++修改这个配置文件
或者使用vi进入这个配置文件输入i或者o进入编辑模式修改文件

在新版本的 zk 中,需要添加 ;2181,否则报如下错误
记得在zookeeper中创建zkData文件夹,以及myid文件
配置环境变量:
环境变量可以配置在很多地方, /etc/profile
建议放在 /etc/profile.d/myenv.sh但咱电脑没啥东西可以用上边的路径
在/etc/profile中写入
export ZOOKEEPER_HOME=/opt/installs/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
写入后刷新环境变量
source /etc/profile
接着是其他的设备(myscp是自己写的脚本可以把文件分发到其他设备,xcall也是自己写的可以在其他服务器上批量执行命令)
myscp /opt/installs/zookeeper
myscp /etc/profile
xcall source /etc/profile
在链接其他分布式服务器中,修改myid 为2,3.....


在每一台电脑上,都启动zkServer
xcall zkServer.sh start
因为zookeeper安装的节点比较多,每一个一个个操作非常的繁琐,所以我们可以编写一个脚本,管理zookeeper集群。(不必须)
在/usr/local/bin或sbin下面,创建zk.sh代码如下:
#!/bin/bash
# 获取参数
COMMAND=$1
if [ ! $COMMAND ]; then
echo "please input your option in [start | stop | status]"
exit -1
fi
if [ $COMMAND != "start" -a $COMMAND != "stop" -a $COMMAND != "status" ]; then
echo "please input your option in [start | stop | status]"
exit -1
fi
# 所有的服务器
HOSTS=( hadoop11 hadoop12 hadoop13 )
for HOST in ${HOSTS[*]}
do
ssh -T $HOST << TERMINATOR
echo "---------- $HOST ----------"
zkServer.sh $COMMAND 2> /dev/null | grep -ivh SSL
exit
TERMINATOR
done
给所有用户添加可执行权限
chmod u+x zk.sh
使用
zk.sh start
zk.sh stop
zk.sh status
五:zookeeper的shell操作(新版本)-3.5以上
zkServer.sh version
查看 zookeeper 的版本
1)连接zkServer
zkCli.sh 直接回车,连接的是本机的节点
create /bigdata
set /bigdata "我是数据" --修改数据
get /bigdata
[zk: localhost:2181(CONNECTED) 1] ls /zookeeper
[config, quota]
[zk: localhost:2181(CONNECTED) 2] set /qingyun "我是数据"
Node does not exist: /qingyun
[zk: localhost:2181(CONNECTED) 3] create /qingyun
Created /qingyun
[zk: localhost:2181(CONNECTED) 4] set /qingyun "我是数据"
[zk: localhost:2181(CONNECTED) 5] ls /qingyun
[]
[zk: localhost:2181(CONNECTED) 6] get /qingyun
我是数据
zkCli.sh -server hadoop12:2181


2) ls 查看某个路径下的子节点
ls /
ls /zookeeper
ls -s /zookeeper 可以查看某个节点的详细的信息 【版本不同命令不同】
[zk: bigdata02:2181(CONNECTED) 3] ls -s /zookeeper
[config, quota]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2
3)get 查看某个节点上的数据
get /bigdata01
get -s /bigdata01 【版本不同命令不同】
[zk: bigdata02:2181(CONNECTED) 4] get /qingyun
我是数据
[zk: bigdata02:2181(CONNECTED) 5] get -s /qingyun
我是数据
cZxid = 0x200000003
ctime = Fri May 16 16:10:05 CST 2025
mZxid = 0x200000004
mtime = Fri May 16 16:10:09 CST 2025
pZxid = 0x200000003
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 0
4) create 创建节点
-- 一口气创建多个节点,假如中间有不存在的节点,报错
[zk: bigdata02:2181(CONNECTED) 6] create /qingyun/a/b
Node does not exist: /qingyun/a/b
[zk: bigdata02:2181(CONNECTED) 7] create /qingyun/a
Created /qingyun/a
[zk: bigdata02:2181(CONNECTED) 8] create /qingyun/a/b
Created /qingyun/a/b
-- 创建一个临时节点,断开连接之后,下一次再进入,节点消失
[zk: bigdata02:2181(CONNECTED) 9] create -e /linshi
Created /linshi
[zk: bigdata02:2181(CONNECTED) 10] quit
[zk: bigdata02:2181(CONNECTED) 0] ls /
[qingyun, zookeeper]
-- 创建一个带有序号的节点
[zk: bigdata02:2181(CONNECTED) 1] create -s /xunhao
Created /xunhao0000000002
[zk: bigdata02:2181(CONNECTED) 2] ls /
[qingyun, xunhao0000000002, zookeeper]
[zk: bigdata02:2181(CONNECTED) 3] create -s /xunhao
Created /xunhao0000000003
[zk: bigdata02:2181(CONNECTED) 4] create -s /xunhao
Created /xunhao0000000004
-- 创建一个又临时又有序号的节点
[zk: bigdata02:2181(CONNECTED) 5] create -e -s /linshixunhao
Created /linshixunhao0000000005
临时节点,只要客户端和服务器端断开连接,临时节点就会被删除
永久节点:断开连接,不会删除。
|
节点类型 |
描述信息 |
|
EPHEMERAL |
临时节点,在会话结束后自动被删除。 |
|
EPHEMERAL_SEQUENTIAL |
临时顺序节点,在会话结束后会自动被删除。会在给定的path节点名称后添加一个序列号。 |
|
PERSISTENT |
永久节点,在会话结束后不会被自动删除。 |
|
PERSISTENT_SEQUENTIAL |
永久顺序节点,在会话结束后不会被自动删除。会在给定的path节点名称后添加一个序列号。 |
5)set 在节点上设置数据
set /bigdata01 "HelloWorld"
6) delete 删除节点
它只能删除没有子节点的数据
deleteall 可以删除整个节点,包含下面的子节点
delete /bigdata 如果删除带有子节点的节点,delete是删除不掉的
delete 只能删除单个节点
deleteall /bigdata deleteall可以删除一个节点以及节点下的所有子节点
7) watch 监听
给一个节点添加监听,这个节点有任何变动都会被监听到
addWatch /bigdata
比如修改数据: set /bigdata "修改数据"
比如创建子节点:create /bigdata/data01
比如删除节点: delete /bigdata/data01
查看节点不会触发监听。
移除监听:
removewatches /bigdata
再次创建子节点发现无法触发监听:create /bigdata/data01
quit --> 断开连接
六:Linux上的一个集成工具(kafka-ui)

在linux系统中安装
解压缩
tar -zxvf kafka-ui-lite-1.2.11-bin.tar.gz -C /opt/installs/
重命名
mv kafka-ui-lite-1.2.11/ kafka-ui
修改环境变量:
export KAFKA_UI_HOME=/opt/installs/kafka-ui
export PATH=$PATH:$KAFKA_UI_HOME/bin
刷新环境变量: source /etc/profile
启动:
[root@bigdata01 installs]# cd kafka-ui/bin
[root@bigdata01 bin]# ls
kafkaUI.bat kafkaUI.sh
[root@bigdata01 bin]# ./kafkaUI.sh start

访问:
http://hadoop11:8889/




AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)