hbase的介绍和数据结构

HBase是什么?

首先来看HBASE的官方定义:“Apache Hbase is the Hadoop database,a distributed,scalable,big data store, Hbase is a type of ‘NoSQL’ database",这句话翻译过来的意思就是:Apache HBASE是基于Hadoop的”nosql“数据库,而且它还是分布式的、可拓展的大数据存储。从而我们也知道了,HBASE能存储海量数据的原因,在于HBASE是在Hadoop和与之关联的HDFS上搭建起来的,而HDFS是分布式文件系统。
总的来说,HBASE是利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBASE中的海量数据,利用zookeeper作为其分布式协同服务,主要用来存储非结构化和半结构化松散数据的列式nosql数据库。
这里对Hadoop、hive和HBASE做一个简单的归纳总结:

名称 内容
hadoop 分布式文件系统(HDFS)+分布式计算框架(MapReduce)+调度系统(Yarn)搭建起来的分布式大数据处理框架
hive 基于Hadoop的数据仓库,适用于一些高延迟性的应用(离线开发),可以将结构化的数据文件映射为一张数据库表,并提供复杂的SQL查询功能。hive可以认为是MapReduce的一个包装,把写好的HQL转换为MapReduce程序,本身不存储和计算数据,它完全依赖于HDFS和MapReduce,hive中的表是纯逻辑表。hive需要用到HDFS存储文件,需要用到MapReduce计算框架。
hbase 一个基于Hadoop的nosql数据库。HBASE是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。HBASE可以认为是HDFS的一个包装,它的本质是数据存储,是一个nosql数据库;HBASE部署于HDFS之上,并且克服了HDFS在随机读写方面的缺点,提高查询效率。

HBASE和MySQL的对比

1、数据存储的方式:
MySQL面向行存储数据,整个行的数据是一个整体,存储在一起;
HBASE面向列存储数据,整个列的数据是一个整体,存储在一起,有利于压缩和统计;
2、数据之间的关系:
MySQL存储关系型数据、结构化数据;
HBASE存储非关系型数据,存储半结构化和非结构化数据;
3、事务处理:
MySQL数据库存在事务,因为着重于计算;
HBASE数据库侧重于海量数据的存储,所以没有事务的概念;
4、存储容量:
HBASE依托于Hadoop,容量非常大,一般都以PB级为单位存储;
MySQL存储数据依赖于所在的硬件设备。

HBASE的数据结构和存储方式

刚刚也说到HBASE是列式存储的,鉴于我们平时接触到的数据都是行式存储,所以这里我首先从行式存储说起,然后将行式存储的数据转变为列式存储,来讲解HBASE的存储形式。
图1:行式存储的数据
hbase的介绍和数据结构
从图1可以看到,这是我们熟悉的数据表,第一行的数据是字段名,第二行和第三行是记录。
将这个行式存储的表转换成列式存储,会是什么样的呢?
图二:列式存储的数据
hbase的介绍和数据结构

图二展示的就是将图一的数据变成列式存储的样子。
其实,在HBASE里,也是有表、行和列的概念。表的概念,其实和MySQL的定义差不多。但是,在HBASE里,行和列的概念是有所区别的。
如图二所示,每一行有一个Rowkey(行键)用于唯一地标识和定位行,各行数据按Rowkey的字典序排序。其中,info1和info2是两个列族,每一个列族下又有多个列限定符。(info1列族:name、major、email;info2列族:country,city)

HBase的数据结构


  1. 对应于关系型数据库中的一张张表,HBASE以“表”为单位组织数据,表由多行组成。

  2. 行由一个Rowkey(行键)和多个列族组成,一个行有一个rowkey,用来唯一标识。
  3. 列族
    在hbase中,是先有列族(Column Family)后有列的。列族可以理解为列的属性类别。每一行由若干列族组成,每个列族下可包含多个列。列族是列共性的一些体现。
    注意:物理上,同一列族的数据是存储在一起的。
  4. 列限定符
    列由列族和列限定符唯一指定,如上面的name、major、email即是由 Info1列族的列限定符。
  5. 单元格
    单元格由Rowkey、列族、列限定符唯一定位,单元格之中存放一个值(value)和一个版本号。
  6. 时间戳
    单元格内不同版本的值按时间倒序排列,最新的数据排在最前面。

HBase表的特点

1、表大:一个表可以有数亿行,上百万列。
2、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态增加,同一个表中的不同行的可以有截然不同的列。
3、面向列:HBase是面向列的的存储和权限控制,列族独立索引。
4、稀疏:空(null)列并不占用空间,表可以设计的非常稀疏。
5、数据类型单一:HBase中的数据都是字符串,没有类型。
6、数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳。