Chinaunix首页 | 论坛 | 博客
  • 博客访问: 99920
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2018-05-23 12:43
文章分类

全部博文(41)

文章存档

2016年(2)

2015年(3)

2014年(16)

2013年(20)

分类: HADOOP

2014-09-03 15:49:31

.简介

        Zookeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务
它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等
       ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用
       Zk可以保证数据在zk集群各节点之间的是事务性一致(consistency)。

Zk是一个分布式框架,存在的目的是为了解决其他分布式应用中出现的一些难以处理的问题,诸如同步服务、命名服务、分组管理等。

       Zk本身有一个命名空间。命名空间是一个层级结构,根节点是“/”,根节点下面有一级一级的节点,类似于树。这些节点称作znode。类似于Linux的文件系统。Znode专门用于存储数据的。
Zk集群只有一个命名空间。能够保证当客户端连接到zk集群的一个节点时的读写操作,都是原子的。
zookeeper简介和简单集群搭建 - frank_gwf - frank_gwf的博客
follower都会和leader连在一起,client和follower连在一起,这就有一个功能,如果其中一个客户端向follower传递数据,那么其他所有的客户端都可以获得这个数据。当其中一个客户端上传数据之后会在ZK集群中进行广播,这样其他的客户端就可以获得了。
2.搭建简单的zookeeper的集群
          1.集群的节点最后少3个或者是奇数,因为要选举主节点,还有他们的时间要同步。tar -zxvf 压缩文件名称
2.解压zookeeper,然后改名,配置ZOOKEEPER_HOME
3.进入conf下面,把zoo_sample.cfg重新命名为zoo.cfg(之前只是一个事例文件)
4.编辑zoo.cfg
把dataDir改为/usr/local/zookeeper/data文件目录
然后最下面写上
server.0=hadoop0:2888:3888
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888

这表示一个zk集群,三个节点,名字是0,1,2,通信端口是2个是2888 和3888
这个0,1,2,只是起一个名字,你可以随便起名,起zhangsan lisi 都行
注意我们客户端连接到zk服务器集群也有一个端口叫:clientPort=2181


5.创建/usr/local/zookeeper/data文件目录,
6.并且在data文件下面创建一个myid文件,内容是自己的名字0或者1或者2
7.把hadoop0上的zookeeper文件夹和/etc/profile复制到hadoop1和hadoop2上 scp -r /usr/local/zookeeper hadoop1:/usr/local
8.到其他节点修改myid,并且source文件
9.每个节点使用zkServer.sh start
10.启动之后进入bin目录。会多一个文件写了一些zookeeper的信息(前提是你使用zkServver.sh start是在bin目录下执行),里面的一个数据表明3888是一个选举端口,当然
可能会报错说不能连接到hadoop1,因为其他节点都没启动呢,所以我们去hadoop1 2都启动起来
通过zkServer.sh status来看看他的领导还是follower
11.通过jps来查看多了一个quorunpeermain进程

ZK集群保证数据传递在集群之间的一致性
zkCli.sh (command line interface)
使用上面的命令进入ZK命令操作
你要记住ZK包含一个文件系统,我们就可以把这里面的命令看着是一个文件系统的操作,有ls查看文件,mkdir类似的操作
每一个目录都可以写值读取值,mkdir没有但是有creat命令
create /hello 120 那么我们用get /hello就能获取到120这个属性值,当然我们的hello是一个目录
这些都不是重点,但是你要知道明白的是!这个一个文件系统。保证文件操作的一致性,类似事务性操作,你可以再2号机器创建一个文件夹
在1号机器马上就能看到,但是你会问为什么不是1G电影,但是我要告诉你,这是zk规定的,他是为了保证一致性,所以限定为2MB以内,
而且我们日常开发一般一次也就几K的信息,我们只是为了及时传输重要的配置信息才使用这个ZK集群,不要想着用一个G电影放上去叫给他们去同步,
现在有个场景:比如说,如果我们的几个服务器连到两个数据库上,如果一个服务器宕机了,那么我们可以利用zk快速的切换到另一个数据库中

我们创建一个/hello 后面跟他的属性,很多人都需要拿这个属性,现在管理员说现在这个属性不能用的,我们换个新的属性,然后管理员就把属性给修改了
叫其他人再去拿属性的时候,属性已经改变了。

用eclipse操场zk时候,只需要在hadoop的基础添加一个zooker包
一个客户端可以配置很多链接字符串,但是他是随机链接一个服务器,这样保证健壮性
阅读(1192) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~