vlambda博客
学习文章列表

谈一下你对 HBase 的认识?

大家好,我是大D。今天给大家分享一篇HBase的入门文章。

HBase 是一个面向列式存储的分布式数据库,其设计思想来源于 Google 的 BigTable 论文。HBase 底层存储基于 HDFS 实现,集群的管理基于 ZooKeeper 实现。HBase 良好的分布式架构设计为海量数据的快速存储、随机访问提供了可能,基于数据副本机制和分区机制可以轻松实现在线扩容、缩容和数据容灾,是大数据领域中 Key-Value 数据结构存储最常用的数据库方案。

特点

易扩展

Hbase 的扩展性主要体现在两个方面,一个是基于运算能力(RegionServer) 的扩展,通过增加 RegionSever 节点的数量,提升 Hbase 上层的处理能力;另一个是基于存储能力的扩展(HDFS),通过增加 DataNode 节点数量对存储层的进行扩容,提升 HBase 的数据存储能力。(拓展:

海量存储

HBase 作为一个开源的分布式 Key-Value 数据库,其主要作用是面向 PB 级别数据的实时入库和快速随机访问。这主要源于上述易扩展的特点,使得 HBase 通过扩展来存储海量的数据。

列式存储

Hbase 是根据列族来存储数据的。列族下面可以有非常多的列。列式存储的最大好处就是,其数据在表中是按照某列存储的,这样在查询只需要少数几个字段时,能大大减少读取的数据量。(拓展:

高可靠性

WAL 机制保证了数据写入时不会因集群异常而导致写入数据丢失,Replication 机制保证了在集群出现严重的问题时,数据不会发生丢失或损坏。而且 Hbase 底层使用 HDFS,HDFS 本身也有备份。

稀疏性

在 HBase 的列族中,可以指定任意多的列,为空的列不占用存储空间,表可以设计得非常稀疏。

模块组成

HBase 可以将数据存储在本地文件系统,也可以存储在 HDFS 文件系统。在生产环境中,HBase 一般运行在 HDFS 上,以 HDFS 作为基础的存储设施。HBase 通过 HBase Client 提供的 Java API 来访问 HBase 数据库,以完成数据的写入和读取。HBase 集群主由HMaster、Region Server 和 ZooKeeper 组成。

HMaster

  • 负责管理 RegionServer,实现其负载均衡;
  • 管理和分配 Region,比如在 Region split时分配新的 Region,在 RegionServer 退出时迁移其内的 Region 到其他 RegionServer上;
  • 管理namespace和table的元数据(实际存储在HDFS上);
  • 权限控制(ACL)。

RegionServer

  • 存放和管理本地 Region;
  • 读写HDFS,管理Table中的数据;
  • Client 从 HMaster 中获取元数据,找到 RowKey 所在的 RegionServer 进行读写数据。

ZooKeeper

  • 存放整个 HBase集群的元数据以及集群的状态信息;
  • 实现HMaster主从节点的failover。