ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。Zookeeper是Google的Chubby一个开源的实现.是高有效和可靠的协同工作系统.Zookeeper能够用来leader选举,配置信息维护等.在一个分布式的环境中,我们需要一个Master实例或存储一些配置信息,确保文件写入的一致性等.
ZooKeeper目前是安装HBase 0.90.2的必要前提,所以在安装HBase之前,先要确保ZooKeeper正常运行.
1.下载安装包
2.将安装包解压到hadoop同一子目录,如/home/grid/zookeeper-3.3.3,编辑conf/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 directory where the snapshot is stored.
-
-
dataDir=/home/grid/zookeeper
- #dataLogDir=/hadoop/zookeeper/logs
-
# the port at which the clients will connect
-
-
clientPort=3355
-
-
# 2888,3888 are election port
-
-
server.1=hadoop1:2888:3888
-
server.2=hadoop2:2888:3888
-
server.3=hadoop3:2888:3888
-
server.4=hadoop4:2888:3888
其中tickTime表示节点间通信超时的单位时长,单位是毫秒,initLimit是指follower服务器初始化连接到leader服务器时可以忍受的超时时间,时长以initLimit*tickTime表示,syncLimit指leader与follower之间通信的超时时长,以syncLimit*tickTime表示,这里是5*2000=10秒
"server.1=hadoop1:2888:3888"这一句中的server.1表示节点编号,"hadoop1"表示这台服务器的主机名,也可以直接指定ip地址,"2888"是ZooKeeper服务间通信的端口,"3888"是ZooKeeper服务与其他服务通信的端口
dataDir指定ZooKeeper的数据目录
2.建立/home/grid/zookeeper目录
在其中新建一个空白文件,名为myid
3.把/home/grid/zookeeper-3.3.3和/home/grid/zookeeper两个目录复制到所有服务器节点
4.修改/home/grid/zookeeper/myid,比如:hadoop1上,修改myid内容为1,hadoop2上,修改为2
5.启动ZooKeeper
在所有机器上分别启懂ZooKeeper:
/home/grid/zookeeper-3.3.3/bin/zkServer.sh start
在启动过程中,被选举为leader的服务器,会因为其他服务器连不上而报错,所有服务器都启动以后,报错就会消失
6.查看服务器状态
/home/grid/zookeeper-3.3.3/bin/zkServer.sh status
输出最后一行会指出当前服务器所在集群的角色,不是follower就是leader,否则说明服务有问题
7.停止服务器
/home/grid/zookeeper-3.3.3/bin/zkServer.sh stop
ZooKeeper的选举算法使用的是Paxos,算法的详细过程见:
阅读(3144) | 评论(0) | 转发(1) |