3.7 KiB
Hbase简介
一、Hadoop的局限二、HBase简介
三、HBase Table
四、Phoenix
一、Hadoop的局限
HBase是一个构建在Hadoop文件系统之上的面向列的数据库管理系统。既然有了Hadoop为什么还需要HBase ? 这里首先介绍一下Hadoop的限制。

Hadoop擅长存储任意的、半结构甚至非结构化的数据,主要通过HDFS来存储,使用MapReduce来处理。但是Hadoop只能执行批处理,并且只能以顺序方式访问数据。这意味着即使是最简单的工作,也必须搜索整个数据集。面对日益复杂的业务需求,需要一个新的解决方案来实现对海量数据的随机访问。实现数据的随机访问是传统的RDBMS所擅长的,但其却不能存储海量的数据。在这种情况下,必须有一种新的方案来解决海量数据存储和随机访问并存的问题,HBase就是其中之一。
注:HBase,Cassandra,couchDB,Dynamo和MongoDB都能存储海量数据并支持随机访问。
二、HBase简介
HBase是一个构建在Hadoop文件系统之上的面向列的数据库管理系统。
HBase是一种类似于Google’s big table的数据模型,它是Hadoop生态系统的一部分,它将数据存储在HDFS上,客户端可以通过HBase实现对HDFS上数据的随机访问。它具有以下特性:
- 线性和模块化的可扩展性;
- 提供一致的读写操作;
- 支持数据分片;
- 支持RegionServers之间的自动故障转移;
- 易于使用的Java 客户端 API;
- 支持BlockCache和布隆过滤器;
- 过滤器支持谓词下推。
三、HBase Table
HBase是一个面向列的数据库管理系统,这里更为确切的而说,HBase是一个面向列族的数据库管理系统。表 schema 仅定义列族,表具有多个列族,每个列族可以包含任意数量的列,列由多个单元格(cell )组成,单元格可以存储多个版本的数据,多个版本数据以时间戳进行区分。
下图为Hbase中一张表的:
- RowKey为行的唯一标识,所有行按照RowKey的字典序进行排序;
- 该表具有两个列族,分别是personal和office;
- 其中列族personal拥有name、city、phone三个列,office拥有tel、addres两个列。

图片引用自博客:HBase 是列式存储数据库吗(https://www.iteblog.com/archives/2498.html)
四、Phoenix
Phoenix是HBase的开源SQL中间层。使得您可以使用标准JDBC API而不是常规HBase客户端API来操作HBase上的数据。
简单来说,如果你要直接使用HBase,你就只能通过它的Java API来进行调用,虽然官网介绍它的API是简单易用的,但相比于使用一行SQL就能实现数据的查询过滤,原生的API还是过于复杂,Phoenix 的理念是we put sql SQL back in NOSQL
,即你可以使用标准的SQL就能完成对HBase中数据的操作。
Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排并行执行以生成标准的JDBC结果集,同时Phoenix还拥有二级索引等Hbase不具备的特性,这使得Phoenix具有接近原生HBase API的性能表现。