分享

hbase+zookeeper集群搭建


问题导读:
1.hbase.rootdir和namenode里面的hdfs的主机名和端口是否一致?
2.regionservers文件的作用是什么?
3.zookeeper该如何单独部署?







首先已经搭建hadoop、版本匹配可以查看hadoop、hbase、hive版本对应关系查找表


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/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进行检查。
23916356_1340774372lbB4.jpg

这里说一下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创建表试试?













欢迎加入about云群425860289432264021 ,云计算爱好者群,关注about云腾讯认证空间

已有(3)人评论

跳转到指定楼层
buildhappy 发表于 2014-10-13 10:49:07
你好  我的部署一直有问题,麻烦帮帮忙

hbase版本:hbase-0.98.5-hadoop1
三台主机:host1,host2.host3
hbase-site.xml的配置信息:
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>host1,host2,host3</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/hadoop/hbase/zookeeper</value>
    </property>
</configuration>

当start-hbase.sh后,各个节点启动进程如下
host1:HMaster
host2:HRegionserver
host3:HQuorumPeer

但是我用eclipse连接host1时却出现”Session 0x0 for server null“错误?
请问是什么原因啊?
回复

使用道具 举报

sstutu 发表于 2014-10-15 22:47:14
buildhappy 发表于 2014-10-13 10:49
你好  我的部署一直有问题,麻烦帮帮忙

hbase版本:hbase-0.98.5-hadoop1
可能是通信问题,检查下端口、防火墙等
回复

使用道具 举报

轩辕依梦Q 发表于 2014-11-1 23:09:44
sstutu 发表于 2014-10-15 22:47
可能是通信问题,检查下端口、防火墙等



版本你好,一台机器有多个zookeeper,这时端口怎么配置呢?file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\583102041\QQ\WinTemp\RichOle\`@(FDE88YD`FTAJZ)V3KT97.jpg怎么区分哪个端口是哪个zookeeper呢?我的Master机器有两个zookeeper,按图中配置后,日志报无法定位登陆配置,而且只有一个HMaster启动。

hbase1.jpg

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条