HBase 是一个构建在 Hadoop 文件系统之上的面向列的数据库管理系统。html
要想明白为何产生 HBase,就须要先了解一下 Hadoop 存在的限制?Hadoop 能够经过 HDFS 来存储结构化、半结构甚至非结构化的数据,它是传统数据库的补充,是海量数据存储的最佳方法,它针对大文件的存储,批量访问和流式访问都作了优化,同时也经过多副本解决了容灾问题。git
可是 Hadoop 的缺陷在于它只能执行批处理,而且只能以顺序方式访问数据,这意味着即便是最简单的工做,也必须搜索整个数据集,没法实现对数据的随机访问。实现数据的随机访问是传统的关系型数据库所擅长的,但它们却不能用于海量数据的存储。在这种状况下,必须有一种新的方案来解决海量数据存储和随机访问的问题,HBase 就是其中之一 (HBase,Cassandra,couchDB,Dynamo 和 MongoDB 都能存储海量数据并支持随机访问)。github
注:数据结构分类:sql
- 结构化数据:即以关系型数据库表形式管理的数据;
- 半结构化数据:非关系模型的,有基本固定结构模式的数据,例如日志文件、XML 文档、JSON 文档、Email 等;
- 非结构化数据:没有固定模式的数据,如 WORD、PDF、PPT、EXL,各类格式的图片、视频等。
HBase 是一个构建在 Hadoop 文件系统之上的面向列的数据库管理系统。数据库
HBase 是一种相似于 Google’s Big Table
的数据模型,它是 Hadoop 生态系统的一部分,它将数据存储在 HDFS 上,客户端能够经过 HBase 实现对 HDFS 上数据的随机访问。它具备如下特性:数组
HBase 是一个面向 列
的数据库管理系统,这里更为确切的而说,HBase 是一个面向 列族
的数据库管理系统。表 schema 仅定义列族,表具备多个列族,每一个列族能够包含任意数量的列,列由多个单元格(cell )组成,单元格能够存储多个版本的数据,多个版本数据以时间戳进行区分。数据结构
下图为 HBase 中一张表的:框架
图片引用自 : HBase 是列式存储数据库吗 https://www.iteblog.com/archives/2498.htmloop
Hbase 的表具备如下特色:性能
容量大:一个表能够有数十亿行,上百万列;
面向列:数据是按照列存储,每一列都单独存放,数据即索引,在查询时能够只访问指定列的数据,有效地下降了系统的 I/O 负担;
稀疏性:空 (null) 列并不占用存储空间,表能够设计的很是稀疏 ;
数据多版本:每一个单元中的数据能够有多个版本,按照时间戳排序,新的数据在最上面;
存储类型:全部数据的底层存储格式都是字节数组 (byte[])。
Phoenix
是 HBase 的开源 SQL 中间层,它容许你使用标准 JDBC 的方式来操做 HBase 上的数据。在 Phoenix
以前,若是你要访问 HBase,只能调用它的 Java API,但相比于使用一行 SQL 就能实现数据查询,HBase 的 API 仍是过于复杂。Phoenix
的理念是 we put sql SQL back in NOSQL
,即你可使用标准的 SQL 就能完成对 HBase 上数据的操做。同时这也意味着你能够经过集成 Spring Data JPA
或 Mybatis
等经常使用的持久层框架来操做 HBase。
其次 Phoenix
的性能表现也很是优异,Phoenix
查询引擎会将 SQL 查询转换为一个或多个 HBase Scan,经过并行执行来生成标准的 JDBC 结果集。它经过直接使用 HBase API 以及协处理器和自定义过滤器,能够为小型数据查询提供毫秒级的性能,为千万行数据的查询提供秒级的性能。同时 Phoenix 还拥有二级索引等 HBase 不具有的特性,由于以上的优势,因此 Phoenix
成为了 HBase 最优秀的 SQL 中间层。
更多大数据系列文章能够参见 GitHub 开源项目: 大数据入门指南