hadoop生态--Zookeeper

一、Zookeeper是什么?

Zookeeper是一种高效可靠的协同工作系统,它是一个基础组件,是一种服务组件,可以应用于各种场景。它可以提供的功能主要包括两个:

1、为Zookeeper的客户端(即任意使用zk的用户)管理少量数据,它存储的数据是<key, value>形式,key的格式类似目录结构,eg.  /aa "hello"     /aa/test  "world"

2、为客户端监听指定数据节点的状态,并在数据节点发生变化时,把变化通知给客户端。

知道了它可以提供的功能,要用它做什么全看你怎么用。

二、Zookeeper可以怎么用?

2-1 集群管理

一个典型的应用就是服务器的上下线动态感知:在一个Server/Client的系统中,客户端向一个服务端发起请求,如果请求过多,一个服务进程不能满足需求,那就需要增加服务,并告知Client感知服务增加。一个解决方案:

利用Zookeeper,服务端程序向Zookeeper进行注册;客户端在向服务器发起请求前,先去Zookeeper查询可用的服务,根据可用服务信息再去发起请求。另外,客户端可以向Zookeeper注册监听,告诉Zookeeper对节点进行监听,如果有子节点发生了改变,就通知客户端

 2-2 配置管理

程序总是需要配置的,如果程序分散部署在多台机器上,要逐个改变配置就变得困难。现在把这些配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中就好。

注,这里只是列出几个使用思路,并不是zk提供的全部功能。

三、zookeeper的数据存储机制

3-1 数据的存储形式

Zookeeper的数据存储采用的是结构化存储,结构化存储是没有文件和目录的概念,里边的目录和文件被抽象成了节点(node),zookeeper里可以称为znode。

zookeeper中对用户的数据采用kv形式存储,只是zk有点特别:

key:是以路径的形式表示的,意味着,各key之间有父子关系,比如

/ 是顶层key
用户建的key只能在/ 下作为子节点,比如建一个key: /aa 这个key可以带value数据
也可以建一个key: /bb
也可以建key: /aa/xx
zookeeper中,对每一个数据key,称作一个znode

综上所述,zk中的数据存储形式如下: 

3-2 znode类型

zookeeper中的znode有多种类型:
1、PERSISTENT 持久的:创建者就算跟集群断开联系,该类节点也会持久存在与zk集群中
2、EPHEMERAL 短暂的:创建者一旦跟集群断开联系,zk就会将这个节点删除
3、SEQUENTIAL 带序号的:这类节点,zk会自动拼接上一个序号,而且序号是递增的

组合类型:
PERSISTENT :持久不带序号
EPHEMERAL :短暂不带序号
PERSISTENT 且 SEQUENTIAL :持久且带序号
EPHEMERAL 且 SEQUENTIAL :短暂且带序号

四、zookeeper的监听机制

创建zk对象的时候启动两个线程,一个线程用于收发数据 +一个线程用于监听(守护线程)(实际是一个serversocket)。

客户端对zk查数据的时候,如果注册了监听zk记录监听要求;当节点发生变化时,zk向客户端监听线程的端口发出通知(一次注册监听仅通知一次);zk客户端调用回调逻辑(watcher)。

 五、Zookeeper怎么部署?

5-1 部署

1、官网下载zookeeper放到机器上,解压

2、复制$zookeeperhome/conf下zoo_sample.cfg为zoo.cfg,并修改内容

cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

修改文件中内容:
dataDir=/tmp/zookeeper,修改为你想要存储数据的位置,我的修改成了 dataDir=/home/zkdata 

文件末尾添加集群中的机器以及机器ip port,如:

server.0=hadoop-0:2888:3888
server.1=hadoop-1:2888:3888
server.2=hadoop-2:2888:3888

3、将配置过的安装包拷贝给集群中节点

4、到每个机器上创建目录(刚才配置的dataDir)并在文件夹中创建文件myid,文件内容分别为0.1.2(与zoo.cfg文件末尾中添加的server.0等一致)

5、启动zookeeper集群:

必须挨个启动,到$zookeeper_home下执行
bin/zkServer.sh start

此时查看进程,虽然有QuorumPeerMain但是还没正常工作,因为只启动了一个节点

[root@hadoop-0 zookeeper]# jps
6305 DataNode
11382 Jps
6216 NameNode
11336 QuorumPeerMain
6889 NodeManager
6795 ResourceManager

查看状态

[root@hadoop-0 zookeeper]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
没有运行,因为还在投票阶段
6、继续去集群其他节点启动zk服务。当多于半数服务启动后,整个服务启动,此时再查看状态
[root@hadoop-0 zookeeper]# ./bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader

注,为避免重复操作,可以写脚本登陆到其他节点进行配置。

5-2 idea可视化插件安装

Zookeeper使用

Zookeeper客户端提供两种zk的访问方式:命令行方式 和 java api方式

原文地址:https://www.cnblogs.com/Jing-Wang/p/10894712.html