在安装hbase之前需要先选择hbase版本,不同的hbase版本可能支持的hadoop的版本不同,这里使用的是hbase-0.96.2-hadoop2版本。另外还需要同步各台主机的时间,否则可能刚启动好master就死掉;
1.同步各台主机之间的时间:
这里说下使用NTP(network time protocol)同步时间,选择局域网中的一台机器作为ntp服务器,在这台机器上需要安装并启动ntpd;
#关闭ntpd服务
service ntpd stop
#修改ntp服务器上的/etc/ntp.conf 配置文件
server 12.7.127.1.0
fudge 127.127.1.0 stratum 10
#重启ntpd
service ntpd restart
#等几分钟,让ntpd完成自身的时间同步,这期间可以用:watch ntpd -p 查看状态,第6列达到17时就可以了
#在其他的机器上执行以下命令,xxxx是ntp服务器的ip地址或是主机名
ntpdate xxxx
2.hbase是使用ha,所以这里使用两台机器作为master,一台作为active的master,另一台则作为backup master, 当active的master停止工作的时候,则立即启动backup master的master,这里使用hadoop03和hadoop04作为master, hadoop05/hadoop06/hadoop07作为HRegionServer;
3.解压文件:
tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz -C app/
4.修改配置文件:
修改hbase-env.sh
#修改JAVA_HOME的地址
export JAVA_HOME=/home/hadoop/app/jdk1.7.0_80/
#告诉hbase使用外部的zookeeper,而不是使用自带的zookeeper
export HBASE_MANAGERS_ZK=false
修改hbase-site.xml
<configuration>
<property>
<!--
指定hbase在HDFS上的存储路径,在启动hbase时这里会在hdfs上创建一个叫hbase的目录,另外在这里指定的是ns1,但是hbase并不知道ns1具体是那台主机的信息,因此需要将/home/hadoop/app/hadoop-2.4.1/etc/目录下的hdfs-site.xml以及core-site.xml配置文件复制到hbase的conf目录下:
cp /home/hadoop/app/hadoop-2.4.1/etc/{core-site.xml, hdfs-site.xml} ./base/conf/
-->
<name>hbase.rootdir</name>
<value>hdfs://ns1/hbase</value>
</property>
<property>
<!-- 指定hbase是分布式的-->
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<!-- 指定zookeeper的地址,多个用","分割-->
<name>hbase.zookeeper.quorum</name>
<value>hadoop05:2181,hadoop06:2180,hadoop07:2181</value>
</property>
</configuration>
修改regionservers文件,在文件中添加如下内容
hadoop05
hadoop06
hadoop07
5.拷贝HBASE安装目录到hadoop04/hadoop05/hadoop06/hadoop07中,为了拷贝更快一点,可以删除安装目录中的docs文档
scp -r /home/hadoop/app/hbase-0.96.2-hadoop2/ hadoop04:/home/hadoop/app
6.启动hbase,在启动hbase之前请确保hdfs和zookeeper是启动成功了的
#在hadoop03上执行start-hbase.sh,则hadoop03就是作为active的master
#保证集群的可靠性,使用多个master
#手动在hadoop04上启动master
hbase-daemon.sh start master
#单独启动一台regionserver
hbase-daemon.sh regionserver
7.可以通过浏览器访问hbase的管理页面:
http://hadoop03:60010
8.进入hbase shell
bin/hbase shell
9.hbase 简单命令
list #查看数据库中的所有表
scan 'tablename' #查看表中的所有数据