之前早早的部署好了Hbase,不过用的是hbase集成的zookeeper,据说效果不好(具体如何没有亲测)。于是决定自己独立搭起zookeeper服务器。 首先下载了最新的zookeeper稳定版,目前是3.4.6,解压后开始修改配置文件
根据官方文档的描述,复制conf/zoo_sampe.cfg改名为zoo.cfg,设置如下:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=2
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/hdfs/zookeeper
# the port at which the clients will connect
clientPort=2181
server.1 hadoop0:2888:3888
server.2 hadoop1:2888:3888
server.3 hadoop2:2888:3888
注释已经写得比较清楚了
tickTime是zookeeper的时钟周期,单位是毫秒。initLimit和syncLimit后面跟的数值都是以这个时钟周期为单位的。
initLimit是follower连接leader的超时周期
syncLimit是follower允许和leader不保持同步的最大容忍周期
dataDir是zookeeper的内存快照等数据的保存目录,由于myid也保存在这个目录里,所以这个目录最好不要设置为系统的临时目录,否则每次重启机器都要重建myid
clientPort就是zookeeper客户端连接zookeeper服务器用的端口,如果修改了2181这个默认值,之后在hbase中也要做相应设置
server.x 就是设置zookeeper服务器了。不过要注意的是,zookeeper识别自己是哪个服务器,是通过dataDir里面的myid文件来确定的,而不是这里的参数。因此这里设置好之后,还要去dataDir(我这里是/hdfs/zookeeper)里面手工建立个文件叫myid,内容就是server.x中的x,比如我这里的hadoop0:/hdfs/zookeeper/myid,内容是
1
server.x后面跟的两个端口号,第一个是zookeeper服务器之间通信用的,第二个则是用来做leader election的。如果修改了2888、3888这两个默认值,在hbase的配置文件中也要做相应的设置
修改好这些后,就可以把zookeeper目录复制到各个zookeeper服务器上并运行了
这里要注意的是,与hdfs、hbase不同,zookeeper服务器是独立启动的,而不是在一台机器上敲个命令所有节点都自动启动。因此这里我写了个脚本:
for i in $(seq 0 2)
do
echo hadoop$i:
ssh root@hadoop$i /opt/zookeeper/bin/zkServer.sh $1
Done
其中的路径是zookeeper里面的zkServer.sh的所在路径,我这里把zookeeper文件夹整体放到了opt里面。利用这个脚本就可以方便的启动、关闭、查询zookeeper的状态了。比如需要查询zookeeper的状态可以如下操作:
[root@hadoop0 opt]# ./zooKeeper.sh status
hadoop0:
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
hadoop1:
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader
hadoop2:
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
可以看到,当前hadoop1是leader,其他的是follower。
中间有个插曲,就是启动zookeeper后,zookeeper服务器之间无法通信,原因是被系统的iptables限制了。由于对iptables没有过多的了解也暂时不打算深究,我直接用iptables -F清空了设置就可以了
zookeeper启动好以后可以参考官方文档用zookeeper里的bin/zkCli.sh连接zookeeper服务器做一些小例子,这里就不赘述了。
启动好zookeeper后,hbase作相应的设置就好了,首先修改hbase目录下的conf/hbase-env.sh将hbase的zk关掉,也就是去掉注释并修改这个语句
export HBASE_MANAGES_ZK=false
然后修改conf/hbase-site.html,注释掉hbase.zookeeper.property.dataDir相关的设置,zookeeper.quorum设置为zookeeper的服务器就可以了,我这里是
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop0,hadoop1,hadoop2</value>
</property>
与之前hbase的配置相同没做修改。
其他hbase的设置参考我之前的博文 http://blog.youkuaiyun.com/strangerzz/article/details/45040471 ,之后启动hbase就可以了