1、概述
Apache HBase是一个构建在HDFS之上的分布式的、可扩展的、大数据存储数据库。
当你需要基于海量数据随机实时读写操作的时候你可以使用HBase,HBase的目标是容纳包含数十亿计的行和数百万的列的大表,它是一个开源的、分布式的、版本化的非关系型数据库,它受谷歌的“BigTable”论文启发而逐渐成型。正如Bigtable利用谷歌文件系统提供的分布式数据存储一样,Apache HBase在Hadoop和HDFS上提供了类似Bigtable的功能。
2、优势
a.社区成熟,理论经过实践充分验证,具有丰富的工具支持
b.将随机读写转变为顺序读写,适合做高并发写入
c.行中没有数据的列不占用存储空间
d.易扩展,大数据存储,基于HDFS
3.特点
a.一个表可以有数十亿行,上百万列
b.面向列:面向列(族)的存储和权限访问,列(族)独立索引
c.数据类型单一:HBase中只有字符串String类型
d.无模式:每一行都有一个可用于排序的主键和任意多的,可动态扩展的列
4.HBase VS RDBMS
a.HBase扩展性更好,对于大数据更有优势
b.HBase多表关联不如RDBMS方便
c.不引入别的工具,只有一个rowkey做索引,RDBMS索引种类繁多
d.HBase基于列,RDBMS基于行
e.HBase存储数据可以是图片,视频,音频,文本等,种类更多
f.HBase自带索引,查询效率更高,适合海量数据
h.HBase数据类型单一:HBase中只有字符串String类型
5.HBase术语
A.主键rowkey:用来检索记录
主键rowkey可以是任意的字符串,最大长度为64kb,按字典顺序存储,在HBase内部保存为字节数组
访问HBase中的数据有三种方式:
a.通过单个rowkey,查询一条数据
b.通过rowkey的范围
c.全表扫描
B.列族column family:
列族在声明时定义,一个列族有多个列,列中数据以二进制形式存储,没有数据类型,列族是列的集合
C.存储单元cell
HBase通过rowke和column确定的一个存储单元我们成为cell,每一个cell中都保存着一份数据的多个版本
在每个cell中,不同版本的数据按照时间的倒序排列,{row,column,version}元祖就是一个cell
D.时间戳TimeStamp
在写入数据时,时间戳可以由HBase自动赋值(当前系统时间精确到毫秒),也可以自定义赋值
E.杂:
在HBase中,所有数据全都存储在Region上,一张表有多个Region,RegionServer则负责维护Region,每一个列族对应HDFS上的一个文件
6.HBase在hdfs上的目录
.tmp目录:hbase临时目录,对表进行创建和删除时,会将表移到该目录下再进行操作
WALs目录:存储在RegionServer处理数据插入和数据删除过程中用来记录操作内容的日志
data目录:核心目录,存储HBase数据
hbase.id:存储集群的唯一cluster id
hbase.version:集群版本号
hbase.oldWALs:当WALs目录中的logs无效后会移动到该目录下,hbase会定期清理
7.hbase shell
基本操作如下:
创建表:create ‘表名’,‘列族名1’,‘列族名2’
添加记录:put ‘表名’,‘行名’,‘列族名:列名’,‘值’
查看记录:get ‘表名’,‘列名’
查看表:scan ‘表名’
查看某列:scan ‘表名’,{COLUMN=>‘列族名:列名’}
查看表中记录总数:count ‘表名’
删除记录:delete ‘表名’,‘行名’,‘列族名:列名’
删除表:disable ‘表名’ drop ‘表名’
列出所有表:list