您的位置:首页 > 其它

hbase+zookeeper集群搭建

2013-12-11 14:55 10 查看
(博客源址http://blog.chinaunix.net/uid-23916356-id-3255678.html

继上一篇的hadoop集群搭建的基础上,再把hbase和zookeeper(独立部署,不用hbase自带的。因为测试中发现自带的zookeeper挂了一个以后,数据抛出异常)搭建说一下吧!
hbase版本:0.92.1.tar.gz,在hadoop1上部署master和slave,在其余的节点上部署slave,这样就形成了一个hbase集群。
zookeeper版本:3.3.5.tar.gz,在hadoop2、hadoop3、hadoop4上部署zookeeper。
主机名 IP地址 用途
hadoop1 192.168.3.65 master、regionserver
hadoop2 192.168.3.66 regionserver、zookeeper
hadoop3 192.168.3.67 regionserver、zookeeper
hadoop4 192.168.3.64 regionserver、zookeeper
下载hbase和zookeeper源码包,也将其放到/root目录下即可!
链接:http://labs.renren.com/apache-mirror/hbase/
链接:http://labs.renren.com/apache-mirror/zookeeper/
[root@hadoop1 ~] # tar –zxvf hbase-0.92.1.tar.gz

[root@hadoop1 ~] # cp -r hbase-0.92.1 hbase

配置hbase的环境变量:

在/root/hbase/conf目录下的hbase-env.sh中添加Hbase需要的环境变量。如下:

下面第四行注意这个值为false时,表示启动的是独立的zookeeper。而配置成true则是hbase自带的zookeeper。

export JAVA_HOME=/usr/java/jdk1.6.0_14

export HBASE_HOME=/root/hbase

export PATH=$PATH:/root/hbase/bin

export HBASE_MANAGES_ZK=false

export HADOOP_HOME=/root/hadoop

修改hbase-site.xml文件

注意hbase.rootdir必须和你的namenode里面的hdfs的主机名和端口一样

<configuration>

<property>

<name>hbase.rootdir</name>

<value>hdfs://hadoop1:9000/hbase</value>

</property>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>hbase.zookeeper.quorum</name>

<value>hadoop2,hadoop3,hadoop4</value>

</property>

<property>

<name>hbase.zookeeper.sission.timeout</name>

<value>60000</value>

</property>

<property>

<name>hbase.zookeeper.property.clientPort</name>

<value>2222</value>

</property>

<property>

<name>hbase.master</name>

<value>hadoop1</value>

</property>

<property>

<name>hbase.regionserver.lease.period</name>

<value>60000</value>

</property>

<property>

<name>hbase.rpc.timeout</name>

<value>60000</value>

</property>

</configuration>

修改regionservers文件

通常部署master的机器上不就部署slave了,我这里情况比较特殊。

hadoop1

hadoop2

hadoop3

hadoop4

修改hbase-default.xml文件

注意只修改hbase.rootdir这项,文件位置:/root/hbase/src/main/resources目录下

<property>

<name>hbase.rootdir</name>

<value>hdfs://hadoop1:9000/hbase</value>

注意事项:如果你的版本和我不一样,hbase启动后查看表失败,可以将hadoop的jar拷贝至hbase的lib目录下,这一步很关键!我这个版本不需要拷贝!

做完上述操作后,可以将hadoop1上的hbase目录拷贝到hadoop2、hadoop3、hadoop4三台就机器上,注意保证目录结构一致。(步骤略)

单独部署zookeeper

下载相应的版本后上传到hadoop2机器的/root目录下即可!

[root@hadoop2 ~] # tar –zxvf zookeeper-3.3.5.tar.gz

[root@hadoop2 ~] # cp -r zookeeper-3.3.5 zookeeper

[root@hadoop2 ~] # cp zookeeper/conf/zoo_sample.cfg zoo.cfg
修改zoo.cfg如下图所示,我这里启动3个zookeeper
# 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=/root/zookeeper/zookeeper-data

# the port at which the clients will connect

clientPort=2222

server.1=hadoop2:2888:3888

server.2=hadoop3:2888:3888

server.3=hadoop4:2888:3888

[root@hadoop2 ~] # mkdir /root/zookeeper/zookeeper-data

再把hadoop1上的zookeeper目录同步到hadoop3、hadoop4机器上(步骤略 )
最后记得在部署zookeeper的节点上的/root/zookeeper/zookeeper-data的目录下新建一个myid文件里写上zoo.cfg文件对应的server号码,hadoop2写1,hadoop3写2,hadoop4写3,这样基本就完成了zookeeper的配置了。
下面准备启动zookeeper。(前提是hadoop已经启动)
在每个部署zookeeper节点的机器上执行如下命令

[root@hadoop2 ~] # zookeeper/bin/zkServer.sh start

[root@hadoop3 ~] # zookeeper/bin/zkServer.sh start

[root@hadoop4 ~] # zookeeper/bin/zkServer.sh start
启动完成后可以看看哪个节点的zookeeper是leader?哪两个是follower?
分别执行如下命令检查
[root@hadoop3 ~]# zookeeper/bin/zkServer.sh status

JMX enabled by default

Using config: /root/zookeeper/bin/../conf/zoo.cfg

Mode: leader
[root@hadoop4 ~]# zookeeper/bin/zkServer.sh status

JMX enabled by default

Using config: /root/zookeeper/bin/../conf/zoo.cfg

Mode: follower

[root@hadoop2 ~]# zookeeper/bin/zkServer.sh status

JMX enabled by default

Using config: /root/zookeeper/bin/../conf/zoo.cfg

Mode: follower
再查看zookeeper的状态
[root@hadoop2 ~]# echo ruok | nc 192.168.3.66 2222

imok
[root@hadoop2 ~]# echo ruok | nc 192.168.3.67 2222

imok
[root@hadoop2 ~]# echo ruok | nc 192.168.3.64 2222

imok
最后输入jps命令查看一下部署zookeeper节点上的QuorumPeerMain进程是否存在?存在则说明OK,或者我们用浏览器查看,点击zk.dump进行检查。



这里说一下zookeeper的功能吧!简单说是协调服务的,我这里部署了3个zookeeper,follower挂了一个对集群没任何影响。leader挂了它会自动从存活的follower中再选举出一个leader出来。所以不必担心。还有一个特点是hbase的master单节点的问题。我们可以在部署datanode的节点上手动启动一个备用的master,当hbase的master挂了,它也会通过zookeeper来通知备用的master接替任务。好了,就说到这,研究的也不深,高手见笑了!
最后我们来启动hbase吧!
在hadoop1节点上执行如下命令:

[root@hadoop1 ~] # hbase/bin/start-hbase.sh
我们可以输出的内容,先启动的是master再启动slave。
要关闭的hbase则执行

[root@hadoop1 ~] # hbase/bin/stop-hbase.sh

最后检查hbase是否正常?
浏览器查看http://192.168.3.65:60010,图如上面的截图,或者部署slave的节点上输入jsp查看一下是否有regionserver进程呢?更或者进入到hbase shell中查看表或者创建表

[root@hadoop1 ~] # hbase/bin/hbase shell
进去后执行list看是否会报错哈!再通过create创建表试试?这里就不班门弄斧了!欢迎大家去百度或者google吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: