HBase

关注
义项:分布式列式数据库
HBase

HBase 是一个开源的分布式、面向列的 NoSQL 数据库,构建在 Hadoop 分布式文件系统(HDFS)之上,为 Hadoop 生态提供类似 Google Bigtable 的能力[1]。它的设计目标是承载数十亿行、数百万列的巨型表,并在此基础上支持海量数据的随机、实时读写[2]。与关系型数据库不同,HBase 不提供 SQL 与多行事务,而是以行键和列族组织数据,并通过增加普通商用服务器横向扩展[3]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

HBase 是一个开源的、分布式的、带版本控制的列式存储系统,其数据模型参照 Google 发表的 Bigtable 论文,被设计用来在 Apache Hadoop 与 HDFS 之上提供与 Bigtable 类似的能力[4]。HBase 的官方定位是「Hadoop 数据库」,当需要对大数据进行随机的、实时的读写访问时使用,项目的目标是在普通商用硬件集群上承载行数达数十亿、列数达数百万的超大表[2]。

在数据组织上,HBase 属于宽列存储,数据存放在表中,行内的数据按列族分组,列与数据类型可以不必预先定义即可使用,属于无模式数据库[3]。由于空值不会被存储,它可以高效承载稀疏数据集,这在大数据场景中相当常见[5]。HBase 使用 Java 编写,以 Apache 许可证 2.0 版发布[1]。

原理

从抽象模型看,HBase 可以视为一个稀疏、分布式、读写一致的多维有序映射,即从键到值的映射;一个单元格的键由行键、列族、列限定符和时间戳共同构成,数据按行键的字典序排列,每个值可以用时间戳区分多个版本[6]。列族在创建表时就要指定,列族之下可以有数量不受强限制的列,这些列可以动态添加[7]。

在物理存储上,HBase 参考了日志结构合并树(LSM 树)的思路:写入先落到预写日志(Write-Ahead Log)以保证节点故障后可恢复,随后更新内存中的存储,内存写满后再把键值对刷写成磁盘上的 HFile,后台进程会合并这些小文件[6]。一张大表按行键被切分成多个 Region,分布到不同的 RegionServer 上,每个 RegionServer 可以服务来自不同表的 Region,但一个 Region 只能由一个 RegionServer 提供服务[6]。

集群层面采用主从结构:HMaster 负责为 RegionServer 分配 Region、维护负载均衡与元数据、在节点失效时迁移 Region;RegionServer 直接承接客户端读写请求,与底层 HDFS 交互,并执行 Region 的拆分与存储文件的合并。HBase 依靠 ZooKeeper 完成主节点高可用、RegionServer 状态监控和元数据入口等工作,数据最终以 HDFS 文件的形式存放。在 CAP 定理 的分类中,HBase 属于 CP 型系统,提供强一致的读写[1]。

发展历程

HBase 源于 Google 在 2006 年 11 月发表的 Bigtable 论文,论文提出了一种基于行键、列键和时间戳索引的分布式存储模型。2007 年 2 月,Mike Cafarella 提交了第一份 HBase 代码,随后 HBase 成为 Hadoop 的子项目并在当年 10 月发布第一个可用版本。

HBase 最初由 Powerset 公司为自然语言搜索场景处理海量数据而创建[1]。2008 年 1 月 Hadoop 成为 Apache 顶级项目,HBase 随之成为 Hadoop 的子项目;2010 年 5 月,HBase 自身也成为 Apache 软件基金会的顶级项目。

进入 2010 年代后,HBase 被多家互联网企业用于大规模在线服务,例如 Facebook 曾将其消息系统建立在 HBase 之上,但该系统在 2018 年迁移到了 MyRocks[1]。微软在 2014 年 6 月于 Azure HDInsight 中提供 HBase 预览服务,同年 8 月 21 日正式推出[8]。

应用

HBase 的典型用例源自 Web 搜索,即构建词语到网页的索引;在此之外,它也被用作键值存储来管理消息系统,并可搜索和管理从网页中提取的表格[3]。在传感器与时序数据方面,HBase 用于接收各类来源逐步采集的数据,支撑社交分析、时序分析、交互式仪表板以及审计日志系统,彭博交易终端和 OpenTSDB 都属于具体例子[3]。

在实时查询方向上,Apache Phoenix 作为 HBase 的 SQL 查询引擎,以 JDBC 驱动方式提供对 HBase 表的 SQL 查询与管理能力;同时 HBase 也可以作为平台供其他应用在其上运行,或与 Hive、Pig、Apache Spark、Apache Flume 等组件集成[3]。HBase 表既可以作为 Hadoop 中 MapReduce 作业的输入与输出,也可以通过 Java API、REST、Avro 或 Thrift 网关访问[1]。

在物联网和网站分析场景中,HBase 可以存储来自各类设备、传感器与社交网络的实时数据,用于处理网站日志和点击流数据,再交由上层框架进行批处理与分析[8]。

局限

HBase 不是关系型数据库,不支持 SQL 等结构化查询语言,也不支持 Join 等复杂操作,其应用主要以 Java 编写,风格接近 MapReduce 程序[5]。它只提供行级的事务语义保证,不是多行事务数据库[9]。

HBase 并不适合小数据量场景,也不是面向单调递增行键做过优化的系统[9]。它不适合高效存储大记录,一般以小于 100 KB 的记录表现较好,在中等对象(MOB)支持下可放宽到 10 MB[9]。行键设计是 HBase 模式设计中最关键的部分,其模式与关系型数据库中的模式差异明显[9]。

此外,HBase 缺少一些关系型数据库的优化功能,例如二级索引和高级查询语法,因此无法取代现有的关系型数据库管理系统[8]。它对主节点的丢失较为敏感,由于 HDFS 中 NameNode 可用性带来的企业应用顾虑,HBase 对 HMaster 失效同样敏感[5]。

参见

  • HDFS —— HBase 依赖的底层分布式文件系统,表数据最终以其文件形式存放。

  • Hadoop —— HBase 所属的开源大数据项目,HBase 曾是其子项目。

  • Bigtable —— HBase 数据模型所参照的 Google 分布式存储系统。

  • ZooKeeper —— 为 HBase 提供主节点高可用与元数据入口的协调服务。

  • MapReduce —— 可与 HBase 表对接的批处理计算框架。

  • NoSQL —— HBase 所属的非关系型数据库类别。

参考资料

  1. epfl.ch 上的网页 [引用日期2026-10-14]
  2. doap_Hbase [引用日期2026-10-14]
  3. Azure HDInsight 中的 Apache HBase 是什么? [引用日期2026-10-14]
  4. README.md [引用日期2026-10-14]
  5. 什么是 HBase?| IBM [引用日期2026-10-14]
  6. HBase的介绍 - 跳到主要內容 跳過到 Ask Learn 聊天體驗 [引用日期2026-10-14]
  7. 你应该知道的 HBase 基础,都在这儿了 [引用日期2026-10-14]
  8. Azure HDInsight 中的 HBase 正式營運 [引用日期2026-10-14]
  9. +link:http://static [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T22:16:50Z

历史版本

本条目引用的词条
Java ZooKeeper CAP 定理 HDFS Hadoop Bigtable MapReduce NoSQL