前言

本文继安装Hadoop 2.7.2伪分布模式到Ubuntu 16.04教程,旨在以尽可能短的篇幅介绍HBase 1.1.5在Ubuntu 16.04上的安装过程,适合于有过HBase或Hadoop安装经验的同学。

本文绝大部分参考HBase官方文档,出处见参考。

本文首先介绍HBase单机模式的安装,然后介绍伪分布模式的安装。

关于HBase

HBase是一个分布式可扩展的NoSQL数据库,提供了对结构化、半结构化、甚至非结构化大数据的实时读写和随机访问能力。

首先理清楚HBase和HDFS以及Hadoop的关系。在某种程序上,可以把HBase等同于HDFS,或者认为HBase是HDFS的增强版;HBase并不依赖于Hadoop,反而,是因为Hadoop在处理数据上的需求,导致HBase的出现。当HBase工作在单机模式时,HBase是不需要HDFS的支持的,其数据库直接存储在本地文件系统中,也就是说HBase可以依靠自身实现单机上的全部功能,直接配合Hadoop;而当HBase工作在伪分布模式下时,HBase需要依靠HDFS实现可靠性和分布式等的支持,其数据库存储在HDFS中,显然,在伪分布模式下,HBase要在HDFS之后启动。而HBase对Hadoop不构成任何依赖关系。

简单来说,HBase之于HDFS,就像数据库之于文件系统。

下载和初始化HBase

本文假定已经如前文安装好Hadoop

下载

使用来自CNNIC的HBase镜像

$ cd ~
$ wget http://mirrors.cnnic.cn/apache/hbase/1.1.5/hbase-1.1.5-bin.tar.gz
$ tar zxvf hbase-1.1.5-bin.tar.gz
$ sudo mv zxvf hbase-1.1.5-bin /usr/local/hbase

初始化HBase

JDK路径

关于获取JDK路径如前文所述,这里不再重复。

设置JAVA_HOME

编辑hbase-env.sh

$ cd /usr/local/hbase
$ nano conf/hbase-env.sh

在其中加入JAVA_HOME(根据自己实际修改)

export JAVA_HOME=/usr/lib/jvm/java-7-oracle

后续操作全部在/usr/local/hbase路径下

单机模式

配置

编辑conf/hbase-site.xmlconfiguration配置为

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///home/hadoop/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/hadoop/zookeeper</value>
  </property>
</configuration>

这里即配置root和zookeeper路径,单机模式下将其配置到本机文件系统中,路径根据自己实际修改。注意文件夹不需要自己创建,HBase启动时会自动创建。

测试

启动HBase

$ bin/start-hbase.sh

此时

$ jps

会看到

HMaster
Jps

连接到HBase

$ bin/hbase shell

出现

hbase(main):001:0>

创建一个表

create 'test','cf'

出现

0 row(s) in 5.9060 seconds

=> Hbase::Table - test

列出表信息

list 'test'

出现

TABLE
test
1 row(s) in 0.1540 seconds

=> ["test"]

向表中插入数据

put 'test', 'row1', 'cf:a', 'value1'

put 'test', 'row2', 'cf:b', 'value2'

put 'test', 'row3', 'cf:c', 'value3'

分别显示

0 row(s) in 1.0830 seconds
0 row(s) in 0.0410 seconds
0 row(s) in 0.0560 seconds

扫描表

scan 'test'

出现

ROW                   COLUMN+CELL
 row1                 column=cf:a, timestamp=1464270895228, value=value1
 row2                 column=cf:b, timestamp=1464270901285, value=value2
 row3                 column=cf:c, timestamp=1464270906979, value=value3
3 row(s) in 0.1610 seconds

获取一行数据

get 'test','row1'

出现

COLUMN                CELL
 cf:a                 timestamp=1464270895228, value=value1
1 row(s) in 0.1940 seconds

删除表

disable 'test'

drop 'test'

分别显示

0 row(s) in 4.5630 seconds

0 row(s) in 2.4850 seconds

断开连接

quit

停止HBase

$ bin/stop-hbase.sh

伪分布模式

配置

首先将HBase设置为分布式,编辑conf/hbase-site.xmlconfiguration添加

<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>

然后修改root由本地文件系统到HDFS,编辑conf/hbase-site.xmlhbase.rootdir值由

file:///home/hadoop/hbase

修改为

hdfs://localhost:9000/hbase

注意后面的端口号9000,需要保证与Hadoop DFS配置中的fs.defaultFS相同!

conf/hbase-site.xmlconfiguration大体来看就是

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://localhost:9000/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/hadoop/zookeeper</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
</configuration>

测试

启动HBase

启动HBase前必须先启动HDFS!

$ /usr/local/hadoop/sbin/start-dfs.sh

然后

$ bin/start-hbase.sh

此时

$ jps

会看到

HRegionServer
DataNode
SecondaryNameNode
NameNode
HMaster
Jps
HQuorumPeer

此时查看HDFS中/hbase/下目录

$ /usr/local/hadoop/bin/hdfs dfs -ls /hbase

会看到

Found 6 items
drwxr-xr-x   - hadoop supergroup          0 2016-05-26 22:47 /hbase/.tmp
drwxr-xr-x   - hadoop supergroup          0 2016-05-26 22:47 /hbase/MasterProcWALs
drwxr-xr-x   - hadoop supergroup          0 2016-05-26 22:46 /hbase/data
-rw-r--r--   3 hadoop supergroup         42 2016-05-26 22:46 /hbase/hbase.id
-rw-r--r--   3 hadoop supergroup          7 2016-05-26 22:46 /hbase/hbase.version
drwxr-xr-x   - hadoop supergroup          0 2016-05-26 22:46 /hbase/oldWALs

测试表操作

重复单机模式下的各种表操作。

停止hbase

$ bin/stop-hbase.sh

然后如果有需要,再停止HDFS

$ /usr/local/hadoop/sbin/stop-dfs.sh

启动和停止HBase

启动

在启动HDFS后

$ bin/start-hbase.sh

停止

在停止HDFS前

$ bin/stop-hbase.sh

小结

实际上HBase的安装很简单,而且逻辑也很清楚,关键是理清楚HBase和HDFS和Hadoop的关系,在弄清楚相互的依赖关系后,配置起来就不会一股脑跟着教程走了。

参考