HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的开源分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

  1. HBase是Apache提供的开源的非关系型数据库。
  2. HBase的底层存储是基于Hadoop,是一个分布式,可扩展,大数据库数据库
  3. HBase能够实时读写大量的数据。单张表就可以做到10亿*百万列数据量的级别。
  4. Hbase是一个NOSQL(not only sql)的数据库。
  5. HBase是由Doug带领团队开发的。仿照了Google的<Bigtable:A Distributed Storage System for Structured Data>.也因为HBase是仿照BigTable实现的,所以Hbase的原理和BigTable一样,只是BigTable是C语言实现的,Hbase是用Java实现的。
  6. HBase在存储的时候是采用了列存储的思想。

Hbase的特点

容量巨大

HBase 的单表可以有百亿行、百万列,可以在横向和纵向两个维度插入数据,具有很大的弹性。

当关系型数据库的单个表的记录在亿级时,查询和写入的性能都会呈现指数级下降,这种庞大的数据量对传统数据库来说是一种灾难,而 HBase 在限定某个列的情况下对于单表存储百亿甚至更多的数据都没有性能问题。

HBase 采用 LSM 树作为内部数据存储结构,这种结构会周期性地将较小文件合并成大文件,以减少对磁盘的访问。
LSM的原理:将对数据的修改增量保存在内存中,达到指定大小限制之后批量把数据flush到磁盘中,磁盘中树定期可以做merge操作,合并成一棵大树,以优化读性能。不过读取的时候稍微麻烦一些,读取时看这些数据在内存中,如果未能命中内存,则需要访问较多的磁盘文件。极端的说,基于LSM树实现的hbase写性能比mysql高了一个数量级,读性能却低了一个数量级。

列存储

与很多面向行存储的关系型数据库不同,HBase 是面向列的存储和权限控制的,它里面的每个列是单独存储的,且支持基于列的独立检索。通过下图的例子来看行存储与列存储的区别。
HBase特点

从上图可以看到,行存储里的一张表的数据都放在一起,但在列存储里是按照列分开保存的。在这种情况下,进行数据的插入和更新,行存储会相对容易。而进行行存储时,查询操作需要读取所有的数据,列存储则只需要读取相关列,可以大幅降低系统 I/O 吞吐量。

稀疏性

通常在传统的关系性数据库中,每一列的数据类型是事先定义好的,会占用固定的内存空间,在此情况下,属性值为空(NULL)的列也需要占用存储空间。

而在 HBase 中的数据都是以字符串形式存储的,为空的列并不占用存储空间,因此 HBase 的列存储解决了数据稀疏性的问题,在很大程度上节省了存储开销。所以 HBase 通常可以设计成稀疏矩阵,同时这种方式比较接近实际的应用场景。

扩展性强

HBase 工作在 HDFS 之上,理所当然地支持分布式表,也继承了 HDFS 的可扩展性。HBase 的扩展是横向的,横向扩展是指在扩展时不需要提升服务器本身的性能,只需添加服务器到现有集群即可。

HBase 表根据 Region 大小进行分区,分别存在集群中不同的节点上,当添加新的节点时,集群就重新调整,在新的节点启动 HBase 服务器,动态地实现扩展。这里需要指出,HBase 的扩展是热扩展,即在不停止现有服务的前提下,可以随时添加或者减少节点。

高可靠性

HBase 运行在 HDFS 上,HDFS 的多副本存储可以让它在岀现故障时自动恢复,同时 HBase 内部也提供 WAL 和 Replication 机制。

WAL(Write-Ahead-Log)预写日志是在 HBase 服务器处理数据插入和删除的过程中用来记录操作内容的日志,保证了数据写入时不会因集群异常而导致写入数据的丢失;而 Replication 机制是基于日志操作来做数据同步的。

当集群中单个节点出现故障时,协调服务组件 ZooKeeper 通知集群的主节点,将故障节点的 HLog 中的日志信息分发到各从节点进行数据恢复。

Hbase与hadoop的关系

HBase 与 HDFS 有非常紧密的关系,它使用 HDFS 作为底层存储系统。

HBase 是在 Hadoop 这种分布式框架中提供持久化的数据存储与管理的工具。在使用 HBase 的分布式集群模式时,前提是必须有 Hadoop 系统。

Hadoop 系统为 HBase 提供给了分布式文件存储系统,同时也使得 MapReduce 组件能够直接访问 HBase 进行分布式计算。

HBase特点
总结:

  1. 分布式架构:HBASE是通过集群来存储数据,数据最终要落地到HDFS上
  2. 是一种NoSQL的非关系型数据库,不符合关系型数据库的范式
  3. 面向列存储,底层基于key-value结构
  4. 适合存储半结构化、非结构化的数据
  5. 适合存储稀疏的数据,空的数据不占用空间
  6. 提供实时的增删改查的能力,但是不提供严格的事务机制,只能在行级别提供事务

相关文章:

  • 2021-11-30
  • 2021-12-01
  • 2021-11-19
  • 2021-11-19
  • 2021-06-15
  • 2021-11-20
  • 2021-11-20
  • 2021-11-21
猜你喜欢
  • 2021-11-30
  • 2021-11-30
  • 2021-04-29
  • 2023-02-25
  • 2023-02-25
  • 2021-06-04
  • 2021-07-14
相关资源
相似解决方案