HBase 指南

HBase 简介

简介

HBase

基于 HDFS 的大表软件(实时数据库)

十亿行 x 百万列 x 上千个版本

版本是通过 mvcc 技术控制:multiple version concurrent control

HBase 数据是以字节形式存储

HBase 和 Hive 的区别

1
2
3
4
5
# 数据库,不支持分析
HBase: 基于 HDFS 的数据库,随机访问和实时读写,本身不支持分析

# 数据仓库,支持分析
Hive:基于 Hadoop 的数据仓库软件,多用于离线分析

HBase 安装

本地安装

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
# 1.解压
tar -xzvf hbase-1.2.6-bin.tar.gz -C /soft/

# 2.符号链接
cd /soft/
ln -s hbase-1.2.6/ hbase

# 3.环境变量
sudo nano /etc/profile

# hbase环境变量
export HBASE_HOME=/soft/hbase
export PATH=$PATH:$HBASE_HOME/bin

# 4.生效环境变量
source /etc/profile

# 5.验证hbase
hbase version

# 6.配置hbase-env.sh
# 添加
export JAVA_HOME=/soft/jdk

# 7.修改hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///home/centos/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/centos/hbase/zk</value>
</property>
</configuration>

# 8.创建文件夹
mkdir -p /home/centos/hbase/zk

# 9.启动hbase
start-hbase.sh

# 10.进入命令行
hbase shell

完全分布式安装

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
53
54
55
56
57
58
59
# 0.关闭hbase进程
stop-hbase.sh

# 1.开启zk进程
xzk.sh start

# 2.开启hdfs进程
start-dfs.sh

# 3.配置hbase,并分发
# hbase-env.sh,添加
export HBASE_MANAGES_ZK=false

# 修改hbase-site.xml
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://mycluster/user/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/centos/zookeeper</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>s102:2181,s103:2181,s104:2181</value>
</property>
</configuration>

# 将hdfs配置文件拷贝到hbase/conf下
cp /soft/hadoop/etc/hadoop/hdfs-site.xml /soft/hbase/conf/
cp /soft/hadoop/etc/hadoop/core-site.xml /soft/hbase/conf/

# 修改regionservers
s102
s103
s104

# 4.分发hbase到其他节点
xsync.sh /soft/hbase
xsync.sh /soft/hbase-1.2.6

# 5.分发环境变量
su root
xsync.sh /etc/profile
exit

# 6.分别在s102-s104生效环境变量
source /etc/profile

# 7.启动
start-hbase.sh

# 8.进入命令行
hbase shell

HBase 数据模型

HBase 命令

HBase 与 SQL 的区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1.进入hbase命令行
hbase shell

hbase sql
-----------------------------------------------------------------------------------------
数据库 namespace database
表 table table
建库 create_namespace 'ns1' create database ns1;
列出库 list_namespace show databases;
建表 create 't1','f1','f2' create table t1(name varchar(100) ,..);
列出指定库下表 list_namespace_tables 'ns1' use ns1; show tables;
删表 disable 't1' drop table t1;
drop 't1'
插入数据 put 'ns1:t1','row1','f1:name','tom' insert into xxx values xxx;
删除数据 delete 'ns1:t1','row1','f1:name' delete from ....

合并 HBase 中的小文件

1
major_compact 'test:t1'

删除数据的区别

HBase 在 shell 中删除时将整条记录删除
HBase 在 api 中是删除最新版本的记录

HBase 开发

HBase API 使用

TestHbase

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建创建命名空间
createNS()

# 创建表
createTable()

# 插入数据
putData1()

# 批量插入数据
putData2()

# 删除数据
delData()

# 删除表
dropTable()

HBase 原理

HBase 写入过程

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
# hbase数据在写入时,将数据写到WAL,同时写入到memstore(内存)中
# WAL作用:当内存数据由于断电或内存溢出等方式导致数据丢失,则可以通过WAL进行数据恢复



# Memstore:hbase数据在内存中的体现,memstore有阈值,
# 如果超出此大小就会被刷写到磁盘变为HFile(StoreFile),还可以通过flush将memstore数据实例化
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
------ 本文结束------
如果对您有帮助的话请我喝瓶水吧!