HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。
HBase秘Hadoop的关系就是前者利用后者的文件存储系统。
HBase运行有两种模式——单机式和分布式。
在单机模式中,HBase使用本地文件系统;而分布式模式需要使用 Hadoop Distributed File System (HDFS)。
分布式模式分两种。伪分布式模式是把进程运行在一台机器上,但不是一个JVM.而完全分布式模式就是把整个服务被分布在各个节点上了。
如题,本文是关于伪分布模式的,其它模式的安装可以在HBase官方文档中文版中找到。
以下参考Jerry Tom的博客 HBse的安装,如果这个链接打不开,就看这个,后者为我转载的。
之前看过很多文章,或讲得比较片面,或根本就讲不清楚,上面这篇文章讲清楚了这么几件事情:
1 hbase和hadoop版本要匹配,如果不匹配怎么解决
2 hbase-env.sh 和 hbase-site.xml的配置,没有多余的配置,切中要害
3 zookeeper与hbase的关系
以下是我的安装情况
1)下载并解压
HBase版本跟Hadoop的版本要匹配才行,我使用hadoop-1.2.1版本,于是选择hbase-0.94.11版本。
在网上搜索并下载hbase-0.94.11.tar.gz,重命名为hbase,解压并放到/usr/下,与hadoop并列,解压命令为tar zvxf hbase-0.94.11.tar.gz
注意,hbase的位置并不受hadoop的影响,可以随意放。
2)配置安装路径
将hbase下的bin目录添加到系统的path中,在/etc/profile文件尾行添加如下的内容这样就不用非得到hbase的bin目录下就可以运行hbase的命令了(对hadoop也可以这样做)
>sudo vim /etc/profile
export PATH=$PATH:/usr/hbase-0.94.11/bin
执行source命令使上述配置在当前终端立即生效
>source /etc/profile
3) 配置/conf/hbase-env.sh
>sudo vim conf/hbase-env.sh
//配置本机的java安装根目录
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-amd64
export HADOOP_INSTALL=/usr/hadoop
export PATH=$PATH:/usr/hadoop/bin
export HBASE_MANAGES_ZK=true //配置由hbase自己管理zookeeper,不需要单独的zookeeper。
export HBASE_CLASSPATH=/usr/hadoop/conf //极其重要
4) 配置/conf/hbase-site.xml
在启动Hbase前需要设置属性hbase.rootdir。
$ sudo vim conf/hbase-site.sh
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value> //注意,为true,因为是伪分布式
</property>
</configuration>
hadoop/conf/core-site.xml中的fs.default.name就是hdfs://localhost:9000
5) 启动Hbase
启动顺序:先启动hadoop再启动hbase
>su - hadoop
>start-all.sh
>jps //查看java进程,如果以下进程都已经启动,说明就OK
2564 SecondaryNameNode
2391 DataNode
2808 TaskTracker
2645 JobTracker
4581 Jps
2198 NameNode
//然后再启动hbase
>start-hbase.sh
>jps //若为以下,则正常
SecondaryNameNode
DataNode
HQuorumPeer
TaskTracker
JobTracker
Jps
HRegionServer
HMaster
NameNode
查看web视图http://127.0.0.1:60010/
6) 进入shell模式
进入shell模式之后,通过status命令查看Hbase的运行状态,通过exit命令退出shell。
> hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.20, r09c60d770f2869ca315910ba0f9a5ee9797b1edc, Fri May 23 22:00:41 PDT 2014
hbase(main):001:0> create 't1','t2'
0 row(s) in 1.7450 seconds
hbase(main):001:0> list
TABLES
t1
1 row(s) in 0.6350 seconds
hbase(main):002:0> exit
如果hbase shell 中的list可以使用,但是create不能使用的话,就打开/etc/hosts,把127.0.1.1改成127.0.0.1
127.0.0.1 localhost
因为HBase期望的环回地址为127.0.0.1,Ubuntu和一些其它的发行版本会把环回地址IP默认设置为127.0.1.1 。
create 可以使用,那基本上没有问题了。
7) 停止HBase
先停止hbase再停止hadoop
> stop-hbase.sh
stopping hbase.....................
>stop-all.sh
安装完HBase后,启动时出现以下错误:
1 org.apache.hadoop.hbase.ZooKeeperConnectionException: HBase is able to connect to ZooKeeper but the connection closes immediately. This could be a sign that the server has too many connections (30 is the default). Consider inspecting your ZK server logs for that error and then make sure you are reusing HBaseConfiguration as often as you can. See HTable's javadoc for more information.
2 WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect java.net.ConnectException: Connection refused
3
>hbase shell
>list
error org.apache.hadoop.hbase.masternotrunningexception:
4
>hbase thrift -p 9090 start //启动thrift
org.apache.hadoop.hbase.ipc.SerVerNotRunningException:Server is not running yet
以上问题都是通过重新配置hbase/conf/下的hbase-env.sh 和 hbase-site.xml文件解决的。
更多介绍请看HBase技术介绍
关于HBase更为详细的安装和使用方法请看HBase官方文档中文版