1.HBase简介
- HBase是一个基于Hadoop的分布式、面向列的开源数据库,对大数据实现了随机定位和实时读写。
- HBase是基于Google的Bigtable技术实现的,Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop的HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase利用Hadoop的MapReduce来处理HBase中的海量数据;Google Bigtable利用Chubby进行协同服务,HBase利用Zookeeper进行协同服务。
- HBase具有以下特点。
读取数据实时性强:可以实现对大数据的随机访问和实时读写。
存储空间大:可以存储十亿行、百万列、上千个版本的数据。
具有可伸缩性:可以通过增删节点实现数据的伸缩性存储。
可靠性强:HBase的RegionServer之间可以实现自动故障转移。
面向列:面向列(族)的存储和权限控制,列(族)独立检索。
数据类型单一:HBase中的数据都是字符串,没有类型。
2.HBase的数据模型
HBase是一个面向列的数据库,数据模型主要有命名空间(Namespace)、表(Table)、行键(Rowkey)、列族(Column Family)、列(Column)、时间戳(Timestamp)、单元格(Cell)。
2.1 Namespace
Namespace可以对表进行逻辑分组,类似于关系数据库系统中的数据库。
2.2 表
表由Rowkey和列族组成,按Rowkey的字典顺序进行排序。
2.3 Rowkey
Rowkey是每一行数据的唯一标识。Rowkey可以使用任意字符串表示,Rowkey的最大长度为64KB,实际应用中Rowkey长度一般为10~1000 Byte。在HBase 内部,Rowkey保存为字节数组。
2.4 列族
列族是列的集合,在创建表时必须要声明列族。一个列族的所有列使用相同的前缀(列族名称)。HBase所谓的列式存储就是指数据按列族进行存储,这种设计可以方便地进行数据分析。
2.5 列
列以键值对的形式进行存储。列的值是字节数组,没有类型和长度限定。列的格式通常为column family:qualifier。例如,name:tom列和name:jack列都是列族name的成员,:后的内容通常称为Qualifier(限定符),Qualifier可以是任意的字节数组,相同列族中的Qualify的名称是唯一的,列的数量可以达到百万级别。
2.6 Cell
Cell是指由行键、列族、版本唯一确定的单元。Cell中的数据全部以字节码形式存储。
2.7 时间戳和版本
每个Cell通常保存着同一份数据的多个版本(Version),多个版本之间用时间戳来区分。时间戳的类型是64位的整型。
时间戳可以被自动赋值和显式赋值。自动赋值是指在数据写入时,HBas