hbase 介绍

Apache HBase是一种开源、分布式、版本控制的非关系型数据库,模仿Google的Bigtable:Chang等人的结构化数据分布式存储系统。正如Bigtable利用了Google文件系统提供的分布式数据存储一样,Apache HBase在Hadoop和HDFS之上提供了类似Bigtable的功能。hbase 是apache中的一个开源项目是大数据生态中的一个比较重要的项目。

官网: https://hbase.apache.org/

主要的特点是可以直接数据的海量存储,支持数十亿行×数百万列。

Hbase 可以理解为hadoop database ,因为 hbase 的数据存储是依赖于hadoop中的hdfs 的。数据都是存储在hdfs中的。

hbase 结构

逻辑结构

对于一般的关系型数据库表格,基本的信息是列 和行,对于每个行都有一个唯一标识id 信息。并且每个数据行都有共同的列。

而Hbase 的数据结构看做一个表格的话有一些不同。

  • 首先对于每个行 都有一个row key 属性。 通过row key 能够找到对应的数据行。数据存储的时候根据row key 有序排序。

  • 不同的行中的列可以不同,不同的行可以设置不同的列。

  • 在列上有一个列族的概念 (column family) 可以对特定类别的列进行归类,因为hbase 支持的列是特别多的,可以通过列族进行更好的管理。

查询特点

  • 支持大数据量存储

  • 不支持复杂查询,只能根据行id查询单行数据和根据行id 查询范围数据

数据模型

  • Name Space

命名空间,类似于关系型数据库的 database 概念。
命名空间下有多个表,可以自己创建 namesapce.
同时hbase自带2个默认的namespace ,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default 是用户默认使用的namespace。

  • Table
    类似于关系型数据库的表概念。HBase 在定义表的时候不用定义列,只需要定义列族,列可以动态的进行添加。

  • Row
    HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是根据row key 排序的,并且查询也是只能根据row key进行查询的。

  • Column

hbase 中的列包括 Column Family(列族) 和 Column Qualifier(列限定符)

  • Time Stamp

用于标识数据的不同版本(version),每条数据写入时,系统会自动为其加上该字段,
其值为写入 HBase 的时间。因为hbase的存储是基于hdfs,而hdfs是不支持修改的,只能对数据执行追加操作,当要对某个行的数据修改时,那么追加一个相同的rowkey的数据,数据戳比较新的数据就是最终的数据。

  • Cell

表格的信息,通过 rowkey,column Family: column Qualifier,timestamp 能够确定一个唯一的数据单元,cell中的数据是通过字节码的形式存储的。