依赖

请参照适配表格选择合适的Hadoop/HBase版本,否则很可能出现奇怪的bug。

本文假设环境zookeeper集群安装部署, hadoop快速安装指南安装按照对应文章步骤,且已经配置好java,hadoop,zookeeper的环境变量

安装

官网地址:http://hbase.apache.org/

使用的HBase版本为2.1.3,安装方式为伪分布式因为我没钱租服务器

1
2
3
4
5
6
$ tar -zxf hbase-2.1.3-bin.tar.gz 
$ mv hbase-2.1.3 hbase
$ mv hbase ../bin/
$ cd ../bin/hbase/
$ pwd
/root/bin/hbase

配置

1
2
3
4
$ vim conf/hbase-env.sh
# The java implementation to use. Java 1.8+ required.
# 这里的jdk路径按照个人设置来配置
export JAVA_HOME=/root/bin/jdk
1
2
3
4
5
6
7
8
$ vim conf/hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://mycentos:8020/hbase</value>
</property>

</configuration>
1
2
$ bin/hbase shell
hbase(main):001:0>

至此,单机的hbase部署完成。

配置环境变量

1
2
3
4
5
export LOCAL=/root/bin

# Hbase
export HBASE_HOME=$LOCAL/hbase
export PATH=$HBASE_HOME/bin:$PATH

退出后,修改配置文件来安装伪分布式Hbase

1
2
3
$ vim conf/hbase-env.sh
# 使用外部zookeeper而不是hbase自带的
export HBASE_MANAGES_ZK=false

修改hbase-site.xml,完整的配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://mycentos:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/root/bin/hbase/tmp</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/root/bin/zookeeper/data</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>mycentos</value>
</property>
</configuration>
  • hbase.rootdir的前半部分地址和hadoop配置文件core-site.xml中的fs.defaultFS相同,这个例子中,fs.defaultFS配置的是hdfs://mycentos:9000,该目录用来用来持久化HBase的数据
  • hbase.cluster.distributed需要设置为true
  • hbase.zookeeper.quorum,多个域名之间用逗号分隔,这里我只在本地启动了一个zookeeper
  • hbase.zookeeper.property.dataDir,和zookeeper配置文件zoo.cfg中的dataDir配置的路径相同

启动

1
$ start-hbase.sh

验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 出现HMaster,HRegionServer说明启动成功
$ jps
86529 DataNode
87393 NodeManager
107136 HMaster
86324 NameNode
86807 SecondaryNameNode
12730 SupportedKafka
11931 QuorumPeerMain
107277 HRegionServer
87260 ResourceManager
109422 Jps

$ hbase shell
# hbase的命名空间默认是default
hbase(main):001:0> list_namespace
NAMESPACE
default
hbase
2 row(s)
Took 1.0839 seconds

# 新建一个名为test的命名空间
hbase(main):003:0> create_namespace 'test'
Took 0.4517 seconds

# test的命名空间内新建一个表test_table_1,其有一个列族名为column_family_1
hbase(main):005:0> create 'test:test_table_1', 'column_family_1'
Created table test:test_table_1
Took 1.5447 seconds
=> Hbase::Table - test:test_table_1

# test:test_table_1表中行键为rowkey1的位置,列族为column_family_1,列为column_1
# 的位置插入value1
hbase(main):006:0> put 'test:test_table_1', 'rowkey1', 'column_family_1:column_1', 'value1'
Took 0.2476 seconds

# 查看test:test_table_1的所有值
hbase(main):007:0> scan 'test:test_table_1'
ROW COLUMN+CELL
rowkey1 column=column_family_1:column_1,timestamp=1553147678290,value=value1
1 row(s)
Took 0.0630 seconds

# 查看test:test_table_1的表的属性
hbase(main):010:0> describe 'test:test_table_1'
Table test:test_table_1 is ENABLED
test:test_table_1
COLUMN FAMILIES DESCRIPTION
{NAME => 'column_family_1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false',DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}
1 row(s)
Took 0.5791 seconds

HBase web监控界面 默认端口号为16010

参考资料

  1. HBase官方文档
  2. HBase默认配置文件
  3. HBase学习之路 (二)HBase集群安装
  4. HBase 伪分布式搭建(使用外部ZK)
  5. 常见错误排查