Hadoop系大数据Hadoop

ZooKeeper入门

2017-12-14  本文已影响42人  dodo_lihao

ZooKeeper是什么

Zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统,可提供的服务主要有:配置服务、名字服务、分布式同步、组服务等。

我们可以到apache的zookeeper官网看一下介绍:

apache的zookeeper官网

ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. 
All of these kinds of services are used in some form or another by distributed applications. 

自己简单的翻译一下,理解为:

ZooKeeper是维护的配置信息,命名,提供分布同步,提供组服务的一项集中化服务。
会以某种形式或者在其他的分布式应用中使用。

我们知道,著名的hadoop,kafka,dubbo 都是基于zookeeper而构建。


简单安装

官网下载对应ZooKeeper的tar.gz文件,解压到linux即可

这里版本是用的 3.4.7

文件夹大体结构为:


ZooKeeper文件夹结构

如果只是简单使用,直接启动bin目录下面的

./zkServer.sh start 

即可


具体的配置,我们可以看一下 conf目录下面的

zoo.cfg文件


linux客户端单机连接

和mysql等等的类似,我们可以直接使用ZooKeeper自带的命令行客户端连接server
(前提是ZooKeeper的server已经启动)
到bin目录,

./zkCli.sh

进入命令行界面

和linux命令类似, 我们

ls / 查看ZooKeeper的根目录(节点)
create /dodo dodoInfo 创建一个 dodo的节点,设置的内容为 dodoInfo


创建ZooKeeper的dodo节点

也可以

get /dodo 查询对应节点的信息


查询ZooKeeper的dodo节点

里面包括:

当然
如果是分布式的,这些信息也会用于判断信息的新旧,主从应该有的操作等等


ZooKeeper简单集群搭建

ZooKeeper无论是搭建和使用都很方便,ZooKeeper由于它的选举机制,最好搭建奇数台,可以减少容忍度,提高效率

选举说明
虽然不难,但是篇幅有限,不描述了
选举满足pk原则

【pk原则】

【选举状态】

连接用官网的图片简单说明一下


client连接

我们用客户端连接任何一台的时候,其实都会转向对应的Leader读取数据
图中也很容易看出所有连接到Follower的连接,都会转向Leader

下面自己用3台说明一下
(也就是用3台虚拟机,类似helloworld)

我们创建3台服务器,都装好ZooKeeper

和上面一样,我们配置对应的zoo.cfg文件
(不同的是,添加集群中对应的server)

例如:

server.1=192.168.41.151:2888:3888
server.2=192.168.41.152:2888:3888
server.3=192.168.41.153:2888:3888

整个图是这样的


集群中ZooKeeper的配置

这里也就是指出

最后,我们按照对应的id,设置myid
设置在dataDir下面

这里自己是(/home/software/zookeeper-3.4.7/tmp) 配置myid

内容很简单,就是对应的id值即可,例如myid设置为1,写1 就行,如图


设置myid为1

最后启动3台服务器的ZooKeeper
分别 ./zkServer.sh start 即可

这里,为启动的顺序是 151, 153, 152
我们用 ./zkServer.sh status 可以分别查看对应的状态

状态是leader 状态是follower

最后, 我们可以发现,中间启动的153是leader
由于第二台启动后,投票过半,153就是leader了
理解选举机制, 大家再自己理解即可


ZooKeeper简单集群测试

我们知道,ZooKeeper最大用处就是其 原子性
我们先在集群的一台机器上面创建节点 /dodoNode 试试
我们在151上面创建 /dodoNode

151上面创建dodoNode节点

我们再分别查看一下152, 153的ZooKeeper


152,153一样

我们发现,152,153都会出现创建的节点

同理,我们删除任意节点, 集群中其他ZooKeeper也会删除对应的节点,也就是原子性的简单理解


省略的java代码

对应的命令调用,都可以用java去调用
增删改查的实现也很简单,有1个月代码量的程序员都可以单独完成
百度一下就行
这里就略了


ZooKeeper特性


ZooKeeper的应用场景

ZooKeeper的实现,也就是分布式锁。
我们知道,著名的hadoop,kafka,dubbo 都是基于zookeeper而构建。
除了直接在hadoop,kafka,dubbo中使用外。
我们可以应用其特性简单在其他方面使用


ZooKeeper不适合做的

千万不要因为方便,而上面都存储在ZooKeeper里面
不能用zk存储大量数据。
znode树是维系在内存里的,如果数据大,会吃掉大量内存


简单结束语

上一篇下一篇

猜你喜欢

热点阅读