HBase 简介
HBase(Hadoop database)是一个分布式、可扩展、面向列的 NoSQL 数据库,本质上是一个 Key-Value 系统,底层存储基于 HDFS,原生支持 MapReduce 计算框架,具有高吞吐、低延时的读写特点。
HBase 主要特性
HBase包含很多重要的特性,如下:
强一致性读写:HBase并不是最终一致性,而是强一致性的系统,这使得HBase非常适合做高速的聚合操作。
自动sharding:HBase的表在水平方向上以region为单位分布式存储在各个节点上,当region达到一定大小时,就会自动split重新分布数据。
自动故障转移:这是HBase高可用的体现,当某一个节点故障下线时,节点上的region也会下线并会自动转移到状态良好的节点上线。
面向列的存储:HBase是面向列的存储系统,相同特征(列族相同)的数据会被尽量放到一起,这有利于提高数据读取的效率。
无缝结合Hadoop:HBase被定义为Hadoop database,就是基于HDFS做的数据存储,同时原生的支持MapReduce计算引擎。
非常友好的API操作:HBase提供了简单易用的Java API,并且提供了Thrift与REST的API供非Java环境使用。
Block Cache与Bloom Filter:查询优化方面HBase支持Block Cache与Bloom Filter,使得HBase能够对海量数据做高效查询。
什么时候使用 HBase
HBase作为一款NoSQL数据库,并不能解决所有问题。关于我们在实际生产过程中满足哪些条件的时候可以选择HBase作为底层存储,这里给出几点建议:
1、数据量规模非常庞大
一般而言,单表数据量如果只有百万级或者更少,不是非常建议使用HBase而应该考虑关系型数据库是否能够满足需求;单表数据量超过千万或者十亿百亿的时候,并且伴有较高并发,可以考虑使用HBase。这主要是充分利用分布式存储系统的优势,如果数据量比较小,单个节点就能有效存储的话则其他节点的资源就会存在浪费。
2、要求是实时的点查询
HBase是一个Key-Value数据库,默认对Rowkey即行键做了索引优化,所以即使数据量非常庞大,根据行键的查询效率依然会很高,这使得HBase非常适合根据行键做单条记录的查询。值得说明的是,允许根据行键的一部分做范围查询,这里涉及到Rowkey的设计问题,不再赘言。
3、能够容忍NoSQL短板
前面提及了NoSQL并不能解决所有问题,HBase也是一样,如果业务场景是需要事务支持、复杂的关联查询等,不建议使用HBase。HBase有它适合的业务场景,我们不能苛求它能够帮我们解决所有问题。
4、数据分析需求并不多
虽然说HBase是一个面向列的数据库,但它有别于真正的列式存储系统比如Parquet、Kudu等,再加上自身存储架构的设计,使得HBase并不擅长做数据分析,或者说数据分析是HBase的弱项,所以如果主要的业务需求就是为了做数据分析,比如做报表,那么不建议直接使用HBase。
如果能够满足上述的几点,硬件条件也满足的情况下,强烈建议考虑使用HBase作为底层存储解决你的问题。
HBase 使用场景
由于HBase丰富的特性,加上自身的海量数据存储能力与超大规模并发访问能力,使得HBase应用非常广泛。目前已经在金融、交通、医疗、车联网、IoT等众多领域有了最佳实践,涉及到订单/账单存储、用户画像、时空/时序数据、对象存储、Cube分析等各个使用场景。
HBase的数据模型是什么样的?
HBase 是一种列式的分布式数据库,是由当年的 Google 公布的 BigTable 的论文而生。 HBase 底层依旧依赖 HDFS 来作为其物理存储。
与传统关系数据库的区别
区别主要是下面几点:
Hbase
hbase只支持只支持单个 Row 级别的ACID。
索引只支持 Row-key。
采用了类似于 Hadoop 的分布式集群,硬件成本低廉。
由于是联机处理所以处理速度能达到百万查询/每秒。
数据能达到PB级别。
结构
在 HBase 中首有 Column Family 的概念,简称为 CF。CF 一般用于将相关的列(Column)组合起来。在物理上 HBase 其实是按 CF 存储的,只是按照 Row-key 将相关 CF 中的列关联起来。
Hbase 逻辑排布与物理上排布的关联
HBase 的相关模块
- Master
HBase Master 用于协调多个 Region Server,侦测各个 Region Server 之间的状态,并平衡 Region Server 之间的负载。HBase Master 还有一个职责就是负责分配 Region 给 Region Server。HBase 允许多个 Master 节点共存。
- Region Server
对于一个 Region Server 而言,其包括了多个 Region。Region Server 的作用只是管理表格,以及实现读写操作。
- Zookeeper
对于 HBase 而言,Zookeeper 的作用是至关重要的。首先 Zookeeper 是作为 HBase Master 的 HA 解决方案。也就是说,是 Zookeeper 保证了至少有一个 HBase Master 处于运行状态。
HBase 的运行原理
HBase 的集群是通过 Zookeeper 来进行各个服务间的协调,HBase Master 与 Region Server 之间的关系是依赖 Zookeeper 来维护。当一个 应用需要访问 HBase 集群时,应用需要先和 Zookeeper 来通信,然后在本地保存一份服务列表,然后才会找到对应的 Region Server。每一个 Region Server 管理着很多个 Region。对于 HBase 来说,Region 是 HBase 是最基本的存储区域。数据存储在 Region 中。每一个 Region 只存储一个 Column Family 的数据,并且是该 CF 中的一段)。Region 所能存储的数据大小是有上限的,当达到该上限时,Region 会进行分裂,数据也会分裂到多个 Region 中,通过这种并行方式写入提系统的性能,提高数据的容量。每个 Region 藏在着多个 Store 对象。每个 Store 都包含一个 MemStore,及一个或多个 HFile。MemStore 是数据在内存中的对象,一般都是有序的。当数据要保存到 Region 的时候,要先写入 MemStore。当 MemStore 中的数据达到最大值时,Store 会创建 StoreFile,而 StoreFile 就是对 HFile 一层封装。即 MemStore 中的数据最终写入到 HFile 中,即保存到存储设备中。
-----------------------------------
本人现处广州从事互联网工作多年,资深技术人员、管理人员。愿结识有互联网业务的技术人员或企业人员。