简介

定义

HBase 是一个开源的、分布式的、版本化的非关系型数据库,它利用 Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)提供分布式数据存储。

发展史

HBase 作为 Apache 基金会的 Hadoop 项目的一部分,使用 Java 语言实现,将 HDFS 作为底层文件存储系统,在此基础上运行 MapReduce 进行分布式的批量处理数据,为 Hadoop 提供海量数据管理的服务。

Apache HBase 最初是 Powerset 公司为了处理自然语言搜索产生的海量数据而开展的项目,由查德•沃特斯(Chad Walters)和吉姆•凯勒曼(Jim Kelleman)发起,经过两年发展成为 Apache 基金会的顶级项目。

HBase 是对 Google 的 Bigtable 的开源实现。

2006 年 11 月,Google 公司发表了论文 Bigtable: A Distributed Storage System for Structured Data,但是源码没有对外开放。

2007 年 2 月,项目发起人根据 Bigtable 的技术论文提出了作为 Hadoop 模块的 HBase 原型,该原型介绍了 HBase 的基本概念,以及数据库表、行键和底层数据存储结构的设计等。
由于 HBase 依赖 HDFS,它的版本发布都与 Hadoop 同步。

2007 年 10 月,第一个可用的 HBase 版本随同 Hadoop 0.15.0 版本发布,此版本只实现了最基本的模块和功能,因为处于初始开发阶段, HBase 功能还不够完善。

2008 年 1 月,Hadoop 升级为 Apache 的顶级项目,HBase 也作为 Hadoop 的子项目存在。其后 HBase 的发展非常活跃,两年间追随 Hadoop 的主版本发布了多个版本。

但在 2010 年 6 月发布 0.89.x 版本后不再与 Hadoop 发布关联,因为 Hadoop 的版本相对比较成熟,更新步伐减慢,而 HBase 处于活跃期,版本发布更加频繁。

同时,在 2010 年 HBase 成为 Apache 的顶级项目,此时的 HBase 已经基本实现了 Bigtable 论文中提出的功能。

2015 年 2 月发布了足够成熟的 HBase 1.0.0 版本。

特征

  • 海量存储
  • 列式存储
  • 极易扩展
  • 高可靠性
  • 高并发
  • 稀疏

数据模型

HBase的逻辑模型源自Google的BigTable模型。可以理解为一个稀疏的,长期存储的,多维度的和排序的映射表。

namespace:在HBase中,namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。HBase有两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default 表是用户默认使用的命名空间。

region: 类似于关系型数据库的表概念。不同的是,HBase 定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往 HBase 写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景

Row: 在 HBase 表里,每一行代表一个数据对象,每一行都以行键(Row Key)来进行唯一标识,行键可以是任意字符串。在 HBase 内部,行键是不可分割的字节数组,并且行键是按照字典排序由低到高存储在表中的。在 HBase 中可以针对行键建立索引,提高检索数据的速度。

Colunm Family: HBase 中的列族是一些列的集合,列族中所有列成员有着相同的前缀,列族的名字必须是可显示的字符串。列族支持动态扩展,用户可以很轻松地添加一个列族或列,无须预定义列的数量以及类型。所有列均以字符串形式存储,用户在使用时需要自行进行数据类型转换。

Column Qualifier: 列族中的数据通过列标识来进行定位,列标识也没有特定的数据类型,以二进制字节来存储。通常以 Column Family:Colunm Qualifier 来确定列族中的某列。

Cell: 每一个行键、列族、列标识共同确定一个单元格,单元格的内容没有特定的数据类型,以二进制字节来存储。每个单元格保存着同一份数据的多个版本,不同时间版本的数据按照时间先后顺序排序,最新的数据排在最前面。单元格可以用 <RowKey,Column Family: Column Qualifier,Timestamp> 元组来进行访问。

Timestamp: 在默认情况下,每一个单元格插入数据时都会用时间戳来进行版本标识。读取单元格数据时,如果时间戳没有被指定,则默认返回最新的数据;写入新的单元格数据时,如果没有设置时间戳,默认使用当前时间。每一个列族的单元数据的版本数量都被 HBase 单独维护,默认情况下 HBase 保留 3 个版本数据。

逻辑结构

逻辑上,HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。

Hadoop提供的HBase Shell命令改变表结构 hbase基于hadoop distributed_分布式

物理存储结构

HBase 的底层物理存储结构(K-V)来看,HBase 更像是一个 multi-dimensional map。

Hadoop提供的HBase Shell命令改变表结构 hbase基于hadoop distributed_hbase_02