当前位置: 首页 > news >正文

【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 的容错性扩展性,但两者有显著区别:

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

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操作。

行链接

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

区别与解决方案

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


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

http://www.dtcms.com/a/393556.html

相关文章:

  • 拉取GitHub源码方式
  • 【国二】【C语言】改错题中考察switch的用法、do while执行条件的用法
  • 23种设计模式之【命令模式模式】-核心原理与 Java 实践
  • APP持续盈利:简单可行实行方案
  • qt 操作pdf文档小工具
  • Web3 开发者周刊 68 | EF 将成立一个新的 AI 团队
  • [OpenGL]相机系统
  • 软件体系结构——负载均衡
  • Unity 游戏引擎中 HDRP(高清渲染管线) 的材质着色器选择列表
  • 系统架构设计师(现代计算机系统架构和软件开发)错题集
  • 七、Linux创建自己的proc文件
  • 理解CSS中的100%和100vh
  • [特殊字符] Chrome浏览器证书导入指南
  • 15-用户登录案例
  • Kurt-Blender零基础教程:第3章:材质篇——第1节:材质基础~原理化BSDF,添加有纹理材质与用蒙版做纹理叠加
  • 南京大学 - 复杂结构数据挖掘(一)
  • 嵌入式系统、手机与电脑:一场技术演化的“三角关系”
  • Go语言常用的第三方开发包教程合集
  • 鸿蒙Next ArkTS卡片进程模型解析:安全高效的UI组件隔离之道
  • ubuntu linux 控制wifi功能 dbus控制
  • `TensorBoard`、`PyTorchViz` 和 `HiddenLayer` 深度学习中三个重要的可视化工具
  • 本地设备ipv6默认网关和路由器ipv6默认网关的区别
  • 云原生docker在线yum安装
  • LeetCode 384 打乱数组 Swift 题解:从洗牌算法到实际应用
  • 计算机网络-因特网
  • HDFS和MapReduce——Hadoop的两大核心技
  • 【华为OD】石头剪刀布游戏
  • LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(1——项目框架)
  • Photoshop - Photoshop 非破坏性编辑
  • C++入门小馆:C++11第三弹(可变参数模板)