HBase的概念

Hadoop中的分布式文件系统HDFS虽然解决了大数据的存储和计算的问题,但是只能执行批量处理,并且只以顺序方式访问数据。但是HDFS不支持随机读写,不支持随机删除和修改,这意味着即使是最简单的搜索工作,也必须搜索整个数据集。但是在很多场景下,我们又有这些随机读写的需求。针对这一应用场景,社区推出了基础Hadoop的NoSQL数据库HBase。

Hbase是建立在Hadoop文件系统之上的分布式的、面向列的非关系型数据库,它可以对HDFS存储的数据进行随机、实时读取访问。所以很多企业以Hbase为底层存储数据,来满足高并发、大数据量、实时读取的业务处理。

HBase的概念

HBase(Hadoop Database)是一个基于Hadoop面向列的非关系型分布式数据库(NoSQL),设计概念来源于谷歌的BigTable模型,面向实时读写、随机访问大规模数据集的场景,是一个高可靠性、高性能、高伸缩的分布式存储系统,在大数据相关领域应用广泛。

HBase系统支持对所存储的数据进行透明切分,从而使得系统的存储以及计算具有良好的水平扩展性。HBase最初发布于2008年,是用于Hadoop生态系统的数据库。

HBase是用Java语言来实现的。HBase提供了对Java API、RESTful HTTP API和Thrift的访问支持。

知乎从2017年起开始逐渐采用HBase系统存储各类在线业务数据,并在HBase服务之上构建各类应用模型以及数据计算任务。

HBase服务主要用于离线算法、推荐、反作弊,还有基础数据仓库数据的存储计算,通过MapReduce和Spark来进行访问。

企业可以使用HBase建立一套在线存储NoSQL服务,作为对传统在线存储(MySQL和Redis)的一个补充。

HBase是一个数据模型,是谷歌的bigtable设计的开源实现,可以对HDFS中存储的数据进行随机、实时读取访问。它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务,主要用来存储非结构化和半结构化的松散数据。

HBase的特点:

  • 1、大:一个表可以有上十亿行,上百万列
  • 2、面向列:面向列(族)的存储和权限控制,列(簇)独立检索。
  • 3、稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
  • 4、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列。

HBase数据库与关系数据库的比较

HBase与传统的关系数据库的区别主要体现在以下几个方面。

1)数据类型

关系数据库采用关系模型,具有丰富的数据类型和存储方式。HBase则采用了更加简单的数据模型,它把数据存储为未经解释的字符串,用户可以把不同格式的结构化数据和非结构化数据都序列化成字符串保存到HBase中,用户需要自己编写程序把字符串解析成不同的数据类型。

2)数据操作

关系数据库中包含了丰富的操作,如插入、删除、更新、查询等,其中会涉及复杂的多表连接,通常是借助于多个表之间的主外键关联来实现的。HBase操作则不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空等,因为HBase在设计上就避免了复杂的表与表之间的关系,通常只采用单表的主键查询,所以它无法实现像关系数据库中那样的表与表之间的连接操作。

3)存储模式

关系数据库是基于行模式存储的,元组或行会被连续地存储在磁盘页中。在读取数据时,需要顺序扫描每个元组,然后从中筛选出所需要的属性。如果每个元组只有少量属性的值对于查询是有用的,那么基于行模式期盼主就会浪费许多磁盘空间是的内存带宽。HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分享的,它的优点是:可以降低I/O开销,支持大量并发用户查询,因为仅需要处理可以回答这些查询的列,而不需要处理与查询无关的大量数据行;同一个列族中的数据会被一起进行压缩,由于同一列族内的数据相似度较高,因此可以获得较高的数据压缩比。

4)数据索引

关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能,与关系数据库不同的是,HBase只有一个索引-行键,通过巧奔妙逃的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来。由于HBase位于Hadoop框架之上,因此可以使用Hadoop MapReduce来快速、高效地生成索引表。

5)数据维护

在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留。

6)可伸缩性

关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。相反,HBase就是为了实现灵活的水平扩展而开发的,因此能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩。

但是,相对于关系数据库来说,HBase也有自身的局限性,如HBase不支持事务,因此无法实现跨行的原子性。


《Flink原理深入与编程实战》