【Hadoop】HBase:构建于HDFS之上的分布式列式NoSQL数据库

本专栏文章持续更新 ,新增内容使用蓝色表示。

在大数据时代,传统关系型数据库面临海量数据存储和高并发访问的挑战。HBase作为Apache Hadoop生态系统中的重要组成部分,提供了一个分布式可扩展列式存储解决方案。

一、HBase

HBase 是一个开源的、分布式的、面向列的 NoSQL数据库,设计灵感来自 Google 的 Bigtable。

注意:"NoSQL"意味着"Not Only SQL",它既支持类 SQL 查询 ,也提供了原生的 API 操作(如put、get、fetch 等)。

与传统关系型数据库不同,HBase 采用列式存储方式,将同一表中相同列的数据物理存储在一起,这种设计为特定类型的查询带来了显著的性能优势。

1.1 HBase与HDFS的关系

HBase 构建在 HDFS(Hadoop 分布式文件系统)之上,继承了 HDFS 的容错性扩展性,但两者有显著区别:

特性 HDFS HBase
数据模型 面向文件 面向表
访问模式 批处理、顺序读写 随机读写
延迟
更新支持 不支持 支持
索引 行键索引

HDFS 本身只支持顺序读写,没有索引,若直接在其上查找数据需要全表扫描,性能极差。而HBase 正是为了解决这一问题而生的。它在 HDFS 之上构建了一个分布式索引系统,通过有序的Row Key、Region 分区、内存缓存和高效的文件格式,将高效的随机读写能力与 HDFS 的可靠性和扩展性结合了起来。

HDFS 适合离线批处理 场景,而 HBase 适合需要实时随机读写的场景。对 HDFS 中的数据进行事务处理时必须借助 HBase。

1.2 HBase表的特点

1)HBase 表可以容纳数十亿行和上百万列,适合海量数据存储

2)无模式设计,每行都有一个可排序的主键(行键)和任意多的列,列可以根据需要动态增加,同一表中不同行可以有完全不同的列结构。

3)面向列存储,数据按列族存储,每个列族物理上存储在一起,支持独立的检索和权限控制。

4)稀疏存储,为空值( null )的列不占用存储空间,表可以设计得非常稀疏而不浪费存储资源。

4)每个单元格中的数据可以有多版本,默认版本号是插入时的时间戳,支持基于时间的数据检索。

5)HBase 本身不感知复杂的数据类型,所有数据(行键、列族、列限定符、值)在底层均以字节数组( byte\[\] )的形式存储和管理。数据的类型化和解析工作交由客户端应用程序处理。。

1.3 HBase物理存储结构

表中所有行按照行键( row key )的字典序排列,这种排列方式支持高效的范围查询。

表在行方向上分割为多个 Region,每个 Region 包含一段连续的行键范围。Region 是 HBase 中分布式存储和负载均衡的最小单元。

每个表初始只有一个 Region,随着数据增多,Region 不断增大,当达到阈值时会等分为两个新的 Region,分布到不同的 RegionServer 上。

存储层次结构

  • Region 由一个或多个 Store 组成,每个 Store 对应一个列族

  • 每个 Store 包含一个内存中的 memStore 和 0 到多个 HDFS 上的 StoreFile

  • 数据先写入 memStore,达到一定大小后刷写到 StoreFile

二、HBase架构

2.1 Client

提供访问 HBase 的接口,并维护缓存加速对 HBase 的访问。

2.2 ZooKeeper

  • 保证集群中只有一个活跃 Master;

  • 存储所有 Region 的寻址入口;

  • 实时监控 RegionServer 状态并通知 Master;

  • 存储 HBase 的 schema 和表元数据。

ZooKeeper的关键作用

HBase 默认管理 ZooKeeper 实例,Master 和 RegionServers 启动时向 ZooKeeper 注册。ZooKeeper 的引入使 Master 不再是单点故障,提高了系统的可靠性。

【Hadoop】ZooKeeper:分布式系统的协调核心与一致性保障-CSDN博客

2.3 Master

  • 为 RegionServer 分配 Region;

  • 负责 RegionServer 的负载均衡;

  • 处理失效的 RegionServer 并重新分配其上的 Region;

  • 管理用户对表的增删改查操作。

2.4 RegionServer

  • 维护 Region,处理对这些 Region 的 IO 请求;

  • 负责切分过大的 Region。

三、HBase的容错机制

3.1 Master容错

ZooKeeper 会重新选择新的 Master。无 Master 过程中,数据读取仍照常进行,但 Region 切分、负载均衡等管理操作无法进行。

3.2 RegionServer容错

RegionServer 定时向 ZooKeeper 汇报心跳,若一段时间内未出现心跳,Master 会将该RegionServer 上的 Region 重新分配到其他 RegionServer 上。

3.3 ZooKeeper容错

通常配置3或5个 ZooKeeper 实例组成集群,确保服务的高可用性。

四、HBase在Hadoop生态系统中的位置

MapReduce 直接顺序读取 HDFS,全表扫描效率低,且编写 MapReduce 程序较为复杂。

【Hadoop】Yarn:Hadoop 生态的资源操作系统_大数据平台 yarn-CSDN博客

Hive 提供类 SQL 语句( HQL )操作,将 HQL 转换为 MapReduce 程序执行,但仍为顺序读取,适合批处理场景。

【Haddop】Hive的离线分析与Sqoop的数据集成-CSDN博客

HBase 将数据存储在表中,支持随机读取,效率较高,适合实时查询场景。

三者关系:MapReduce 直接访问 HDFS,Hive 间接访问 HDFS,而 HBase 提供了完全不同的随机访问数据模型。

4.1 HBase适用场景

需对数据进行随机读操作或随机写操作

大数据上高并发操作(如每秒对 PB 级数据进行上千次操作)

读写访问均为简单操作

需要高度可扩展性和容错性的应用

【补充】传统关系型数据库的行迁移与行链接

行迁移

当一行记录被更新导致变长,且当前数据页没有足够空间时发生。数据库将整行数据移动到新数据页,在原始位置留下指向新位置的指针。读取时需要至少两次I/O操作。

行链接

当一行数据初始插入时就非常大,一个数据页无法存下整行数据时发生。数据库将数据分割成多个片段存储在不同数据页中,并通过链表连接。

区别与解决方案

行链接发生在插入时,而行迁移发生在更新时。现代计算机通过段重组在系统空闲时回收碎片化空间并消除行迁移。


如有问题或建议,欢迎在评论区中留言~

相关推荐
qq_337763201934 分钟前
仿博易大师内外盘国际期货软件源码全套开发:期货交易系统架构设计与核心技术解析
大数据·区块链
盛世宏博智慧档案1 小时前
POE温湿度传感器常见故障排查与优化解决原理
大数据
国科安芯1 小时前
ASL706S:让 MCU 不再“失忆跑飞“的守护芯片
分布式·单片机·嵌入式硬件·安全·fpga开发·架构
数据安全技术观察1 小时前
数据动态脱敏:让脱敏策略跟着数据目录走
大数据·网络·数据库
易番番ERP2 小时前
以销定采模式下,ERP如何帮助贸易企业管住订单真实利润
大数据·低代码·微服务·云原生·成本核算·易番番erp·以销定采
阿无,2 小时前
RabbitMQ面试题
分布式·rabbitmq
2501_944676163 小时前
揭秘!WORDTIP公司靠不靠谱?小白必看
大数据·人工智能·python
微三云 - 廖会灵 (私域系统开发)3 小时前
智慧社区项目方案:消费返物业费(美家时代模式)系统设计浅析
大数据
智购科技自动售卖机厂家4 小时前
2026自动售货机OTA升级系统设计:从全量升级到差分升级的带宽优化工程实践~YH
大数据·人工智能·numpy·pyqt·fastapi
盛世宏博智慧档案5 小时前
全国100个分布式机房环境温湿度智能监测系统建设方案
分布式·机房·温湿度