热度 1
zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。必须部署奇数节点。
zookeeper的下载:
http://mirrors.hust.edu.cn/apache/zookeeper/
将下载的安装包zookeeper-3.4.8传到hadoop集群服务器上。
[hadoop@hadoop1 ~]$ scp zookeeper-3.4.8.tar.gz hadoop@hadoop2:/home/hadoop/
[hadoop@hadoop1 ~]$ scp zookeeper-3.4.8.tar.gz hadoop@hadoop3:/home/hadoop/
解包:
[hadoop@hadoop1 ~]$ tar -zxvf zookeeper-3.4.8.tar.gz
[hadoop@hadoop2 ~]$ tar -zxvf zookeeper-3.4.8.tar.gz
[hadoop@hadoop3 ~]$ tar -zxvf zookeeper-3.4.8.tar.gz
修改配置:
修改配置文件
vi conf/zoo.cfg
tickTime=2000
#连接leader的等待的最长时间(秒)
initLimit=10
#标识 Leader 与 Follower 之间发送消息,请求和应答时间最长时间
syncLimit=5
dataDir=/home/hadoop/zookeeper-3.4.8/tmp/data
#需要创建对应的tmp/data目录
clientPort=2181
#server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的
#Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的
#Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。server.1=192.168.72.131:2287:3387
server.2=192.168.72.132:2287:3387
server.3=l92.168.72.133:2287:3387
将第一节点的配置复制到其他节点
增加myid文件
并在data目录下放置myid文件:(上面zoo.cfg中的dataDir)
vi myid
myid指明自己的id,对应上面zoo.cfg中server.后的数字,第一台的内容为1,第二台的内容为2,内容如下:
myid
1
启动zookeeper
在各节点上执行:zkServer.sh start 并通过jps可以看到:启动了QuorumpeerMain进程。
[hadoop@hadoop1 bin]$ ./zkServer.sh start
查看服务:
[hadoop@hadoop2 bin]$ jps
7144 DataNode
8938 Jps
8911 QuorumPeerMain
7248 NodeManager
此时可以通过zkServer.sh status 命令来查看节点的启动状态。
这里需要注意点,只有当至少启动了三个节点之后,该命令才会产生结果。否则会显示:zookeeper Error contacting service. It is probably not running错误,如果节点都启动了,还是报这样的错误,很有可能是防火墙的问题,将防火墙关闭。
#查看防火墙状态
service iptables status
#查看防火墙开机启动状态
chkconfig iptables --list
[root@hadoop1 ~]# /etc/init.d/iptables stop
[root@hadoop1 ~]# chkconfig iptables off
当你启动了至少三个节点之后,执行该命令可以看到:
[hadoop@hadoop2 bin]$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: follower
测试zk服务
[hadoop@hadoop1 bin]$ zkCli.sh -server 192.168.72.131:2181
############################################################
HBase和ZooKeeper
HBase内置有ZooKeeper,也可以使用外部ZooKeeper。
让HBase使用一个已有的不被HBase托管的Zookeep集群,需要设置 conf/hbase env sh文件中的HBASE_MANAGES_ZK 属性为 false
... # Tell HBase whether it should manage it's own instance of Zookeeper or not. export HBASE_MANAGES_ZK=false
接下来,指明Zookeeper的host和端口。可以在 hbase-site.xml中设置, 也可以在HBase的CLASSPATH下面加一个zoo.cfg配置文件。 HBase 会优先加载 zoo.cfg 里面的配置,把hbase-site.xml里面的覆盖掉.
当HBase托管ZooKeeper的时候,Zookeeper集群的启动是HBase启动脚本的一部分。但你需要自己去运行。你可以这样做
${HBASE_HOME}/bin/hbase-daemons sh {start,stop} zookeeper
你可以用这条命令启动ZooKeeper而不启动HBase.