HBase 的基本架构 详解
HBase 是一个分布式的、面向列的数据库,构建在 HDFS(Hadoop Distributed File System)之上,提供高效的随机读写操作。为了全面理解 HBase 的基础架构,需要从逻辑架构、物理存储、组件之间的交互、数据管理和底层设计出发,结合源码进行深入剖析。
1. HBase 的基本架构概览
HBase 的整体架构可以分为以下几个关键部分:
- HMaster:负责管理 HBase 集群中的元数据、表的创建、分区的拆分和合并、Region 的分配和迁移等任务。
- RegionServer:负责管理存储在其中的区域(Region),处理数据的读写请求。
- Zookeeper:HBase 用 Zookeeper 进行分布式协调,帮助管理元数据、故障恢复和分布式锁。
- HDFS:HBase 的底层存储依赖于 HDFS,数据最终保存在 HDFS 的文件系统中。
- 客户端:用户通过 HBase 客户端进行数据的读写,客户端与 Zookeeper 和 RegionServer 交互,定位数据并执行操作。
HBase 通过这些组件的协同工作,提供了可伸缩的分布式存储系统。接下来,我们从每个组件的角度深入分析其架构设计和源码实现。
2. HBase 的逻辑架构
HBase 采用面向列的存储模型,表的基本单元是“列族(Column Family)”。在 HBase 中,每个表由若干行组成,每一行有一个唯一的 RowKey
作为标识,每行又包含多个列。与传统关系型数据库不同,HBase 的列族是动态的,用户可以为不同的行存储不同的列。
HBase 的逻辑架构包括以下几个重要概念:
- 表(Table):行和列的集合,行由
RowKey
唯一标识。 - 列族(Column Family):列被组织为族,每个列族中的数据被存储在一起。
- Region:HBase 将表中的行分割为多个区域(Region),每个区域负责存储某个
RowKey
范围内的行。 - Store:每个列族对应一个
Store
,用于管理该列族的数据。 - MemStore 和 HFile:每个
Store
由内存中的MemStore
和磁盘上的HFile
组成。数据先写入MemStore
,然后定期将MemStore
中的数据刷到磁盘形成HFile
。
HBase 的表分片(Sharding)
HBase 通过 Region
来对表进行分片,每个 Region
负责一部分 RowKey
范围的行。当表中的数据增长到一定程度时,Region
会被拆分为两个新的 Region
。每个 Region
被分配到一个 RegionServer
上进行管理。
3. HBase 的物理架构
HBase 的物理架构依赖于 HDFS。HBase 中的数据被分布式存储在 HDFS 上,但由 RegionServer
进行管理。RegionServer
是 HBase 的核心组件,负责处理数据的读写操作,管理 Region
和维护数据的一致性。
HBase 的物理架构主要包括以下部分:
- HMaster:集群管理节点,负责全局管理,如
Region
分配、分裂、合并和RegionServer
监控等。 - RegionServer:负责管理
Region
,处理客户端的读写请求,将数据写入HFile
和WAL
中。 - HDFS:底层存储,所有的数据最终都以
HFile
的形式存储在 HDFS 中。 - Zookeeper:负责分布式协调,如监控
RegionServer
的状态、分布式锁等。
HMaster 的角色和职责
HMaster 是 HBase 集群的主节点,负责管理 RegionServer
和 Region
的元数据、表的分裂与合并、Region
的分配、RegionServer
的负载均衡等任务。
在 HBase 源代码中,HMaster 的核心逻辑实现主要位于 HMaster.java
文件中。
public class HMaster extends HasThread implements MasterServices, Server {// HMaster的启动逻辑@Overridepublic void run() {// 启动 HMasterinitialize();// 处理 RegionServer 和表管理的元数据...}
}
HMaster 的职责包括:
- 管理元数据表:HMaster 负责管理
hbase:meta
表,该表保存了所有Region
的元数据信息,如Region
的RowKey
范围、RegionServer
地址等。 - 监控 RegionServer:通过 Zookeeper 监控
RegionServer
的状态,当RegionServer
失效时,HMaster 会将其上托管的Region
重新分配到其他可用的RegionServer
上。 - Region 分裂和合并:HMaster 负责决定何时分裂或合并
Region
,以保持集群的负载均衡。
RegionServer 的角色和职责
RegionServer
是 HBase 集群中的工作节点,负责处理客户端的请求,管理表数据并提供对 HDFS 的读写操作。
- MemStore 和 StoreFile:每个
Region
的列族数据存储在MemStore
中,定期会将MemStore
的内容刷到 HDFS 上,形成StoreFile
(即HFile
)。 - WAL(Write-Ahead Log):
RegionServer
使用WAL
来保证数据的持久性。在每次写操作前,先将数据写入 WAL 中,以便在服务器故障时可以进行恢复。
在 HBase 源码中,RegionServer
的逻辑主要位于 HRegionServer.java
文件中:
public class HRegionServer extends HasThread implements RegionServerServices, RpcServerInterface {@Overridepublic void run() {// RegionServer的启动逻辑initialize();// 处理读写请求while (running) {// 处理客户端的写请求,写入MemStore和WALhandleWriteRequests();// 处理客户端的读请求,从MemStore或StoreFile中读取数据handleReadRequests();}}
}
RegionServer 的职责包括:
- 管理 Region:每个
RegionServer
管理多个Region
,并为客户端提供数据的读写服务。 - 处理客户端请求:RegionServer 通过 RPC 接口处理客户端的读写请求。写入操作会先写入
WAL
,然后更新MemStore
,读操作则从MemStore
或StoreFile
中读取数据。 - Compaction(合并):定期将
MemStore
刷盘形成的多个StoreFile
进行合并,减少文件碎片,提高读写效率。
Zookeeper 的角色和职责
Zookeeper 作为分布式协调服务,在 HBase 集群中起到以下作用:
- 维护元数据:Zookeeper 保存
HMaster
和RegionServer
的运行状态,并帮助HMaster
进行元数据管理。 - 故障恢复:当
RegionServer
宕机时,Zookeeper 通过监控机制发现这一变化,通知HMaster
进行故障处理。 - 分布式锁:HBase 使用 Zookeeper 实现分布式锁机制,避免集群中多个节点同时执行冲突的操作。
HBase 使用 Zookeeper 来实现集群协调,确保多个 HMaster 和 RegionServer 可以安全、高效地工作。
4. HBase 的数据写入过程
理解 HBase 的写入路径是了解其底层架构的重要部分。HBase 的写入过程是由多个步骤组成的,涵盖了 WAL、MemStore 和 StoreFile 的写入。
- 写入 WAL(Write-Ahead Log):当客户端发送写请求时,RegionServer 首先将数据记录到 WAL 中,以保证数据不会因服务器宕机而丢失。WAL 是一种顺序写入的日志文件,用于故障恢复。
- 写入 MemStore:接着,数据被写入
MemStore
,MemStore
是位于内存中的数据结构,用于缓存数据。每个列族都有自己的MemStore
。 - Flush 到 HFile:当
MemStore
中的数据达到一定大小时,RegionServer 会将MemStore
中的数据刷盘,生成一个HFile
文件,并存储到 HDFS 中。 - 数据合并(Compaction):由于多次刷盘会生成多个 HFile 文件,HBase 会定期将小的 HFile 文件进行合并,减少文件碎片,提高读取性能。
5. HBase 的数据读取过程
HBase 的读操作首先通过 Zookeeper 定位数据所在的 RegionServer,接着 RegionServer 处理读请求:
- 查找 MemStore:首先在
MemStore
中查找数据。 - 查找 BlockCache:若
MemStore
中没有找到数据,RegionServer 会检查缓存中的BlockCache
。 - 查找 HFile:如果缓存中也没有,RegionServer 会读取 HDFS 上的
HFile
,并将结果返回客户端。
6. HBase 的一致性与容错机制
HBase 通过 WAL、MemStore 和 HDFS 的协调,实现了数据的强一致性。WAL 提供了持久化保障,MemStore 提供快速写入,HFile 提供了数据的持久存储。而 HBase 依赖于 HDFS 和 Zookeeper 来实现故障恢复与容错机制。
- 数据恢复:如果 RegionServer 宕机,HMaster 会通过 Zookeeper 检测并重新分配该 RegionServer 上的 Region,利用 WAL 进行数据恢复。
7. 结论
HBase 通过设计一套基于列族的存储模型,结合 HDFS 的分布式存储与 Zookeeper 的协调,构建了一个高效的、可伸缩的分布式 NoSQL 数据库。它的架构层次清晰,核心包括 HMaster、RegionServer、Zookeeper、WAL、MemStore 和 HFile。
相关文章:
HBase 的基本架构 详解
HBase 是一个分布式的、面向列的数据库,构建在 HDFS(Hadoop Distributed File System)之上,提供高效的随机读写操作。为了全面理解 HBase 的基础架构,需要从逻辑架构、物理存储、组件之间的交互、数据管理和底层设计出…...

crypt.h:No such file or directory报错处理
crypt.h:No such file or directory 报错处理 前言:本文初编辑于2024年9月27日 CSDN主页:https://blog.csdn.net/rvdgdsva 博客园主页:https://www.cnblogs.com/hassle 博客园本文链接: 大!萌࿰…...
网络消费维权的9个常见法律问题
一、忘记付尾款,定金能否退还? 不能。消费者在网络提交订单后,合同即成立。合同成立后,消费者的义务为按时付款。若消费者在支付定金后未能支付尾款,即未能履行付款义务,会导致合同无法履行,构…...

detectron2是怎么建立模型的?以SparseInst代码为例
看SparseInst论文发现论文里有些地方没讲清楚;遂找SparseInst源码来看模型结构 我选择从推理代码来找模型结构: 经探索,在SparseInst代码里,推理需要执行代码 python demo.py --config-file configs/sparse_inst_r50_base.yaml …...

kafka监控平台Kafdrop:使用记录
背景 AI的发展真是太方便了,让它给我推荐一款轻量级,没有学习曲线的kafka监控平台,它就给我推荐这一款。用了一下果然没有一点学习曲线。 目前已经满足了我的需求,可视化界面,topic、消息、消费者group信息以及消费情…...
的使用和内联函数
今天我们来了解一下C中的&和内联函数 引用标识符& C觉得C语言部分的指针有些麻烦,容易混乱,所以C创造了一个标识符&,表示是谁的别名。跟指针对比一下:int* a1&b1;int &a2b2;这样看,显然a1存放的…...

征程6 上基于 DEB 工具实现包管理
1.引言 在开发、调测过程中,开发人员需要将系统软件、应用软件部署到 Soc 板端,以用于运行调试。传统的部署方式是通过解压复制或者调用部署脚本。这样的部署方式需要有着方式不统一、维护投入大的缺点。 在 linux 系统上,大多采用包管理的…...
【git】一文详解: git rebase到底有啥问题
引子 我反复看到这样的评论:“git rebase 像屎一样”。人们似乎对此有很强烈的感受,我真的很惊讶,因为我没有遇到太多使用 rebase 的问题,而且我一直在使用它。 使用 rebase 的成本有多大?在实际使用中它给你带来了什…...

高性能计算应用优化实践之WRF
WRF(Weather Research Forecast)模式是由美国国家大气研究中心(NCAR)、国家环境预报中心(NCEP)等机构自1997年起联合开发的新一代高分辨率中尺度天气研究预报模式,重点解决分辨率为1~…...
nsight-compute使用教程
一 安装 有的时候在linux上安装上了nsight-compute,可以生成报告,但是却因为缺少qt组件而无法打开,我选择的方法是在linux上生成报告,在window上的nsight compute的图形界面打开,需要注意的是,nsight compute图形界面的版本一定要更高,不然无法打开 二 使用 2.1 生成…...

【深度学习】03-神经网络01-4 神经网络的pytorch搭建和参数计算
# 计算模型参数,查看模型结构,我们要查看有多少参数,需要先安装包 pip install torchsummary import torch import torch.nn as nn from torchsummary import summary # 导入 summary 函数,用于计算模型参数和查看模型结构# 创建神经网络模型类 class Mo…...

我与Linux的爱恋:命令行参数|环境变量
🔥个人主页:guoguoqiang. 🔥专栏:Linux的学习 文章目录 一.命令行参数二.环境变量1.环境变量的基本概念2.查看环境变量的方法3.环境变量相关命令4.环境变量的组织方式以及获取环境变量的三种方法 环境变量具有全局属性 一…...
django drf 统一Response格式
场景 需要将响应体按照格式规范返回给前端。 例如: 响应体中包含以下字段: {"result": true,"data": {},"code": 200,"message": "ok","request_id": "20cadfe4-51cd-42f6-af81-0…...
SM2协同签名算法中随机数K的随机性对算法安全的影响
前面介绍过若持有私钥d的用户两次SM2签名过程中随机数k相同,在对手获得两次签名结果Sig1和Sig2的情况下,可破解私钥d。 具体见SM2签名算法中随机数K的随机性对算法安全的影响_sm2关闭随机数-CSDN博客 另关于SM2协同签名过程,具体见SM2协同签…...

解决setMouseTracking(true)后还是无法触发mouseMoveEvent的问题
如图,在给整体界面设置鼠标追踪且给ui界面的子控件也设置了鼠标追踪后,运行后的界面仍然有些地方移动鼠标无法触发 mouseMoveEvent函数,这就令人头痛。。。 我的解决方法是:重载event函数: 完美解决。。。...

基于深度学习的花卉智能分类识别系统
温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 传统的花卉分类方法通常依赖于专家的知识和经验,这种方法不仅耗时耗力,而且容易受到主观因素的影响。本系统利用 TensorFlow、Keras 等深度学习框架构建卷积神经网络&#…...
Springboot集成MongoDb快速入门
1. 什么是MongoDB 1.1. 基本概念 MongoDB是一个基于分布式文件存储 [1] 的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数…...

DERT目标检测—End-to-End Object Detection with Transformers
DERT:使用Transformer的端到端目标检测 论文题目:End-to-End Object Detection with Transformers 官方代码:https://github.com/facebookresearch/detr 论文题目中包括的一个创新点End to End(端到端的方法)简单的理解就是没有使…...
软件后端开发速度慢的科技公司老板有没有思考如何破局
最近接到两个科技公司咨询,说是他们公司后端开发速度太慢,前端程序员老等着,后端程序员拖了项目进度。 这种问题不只他们公司,在软件外包公司中,有一部分项目甲方客户要得急,以至于要求软件开发要快&#…...

开放原子超级链内核XuperCore可搭建区块链
区块链是一种分布式数据库技术,它以块的形式存储数据,并使用密码学方法保证数据的安全性和完整性。 每个块包含一定数量的交易信息,并通过加密链接到前一个块,形成一个不断增长的链条。 这种设计使得数据在网络中无法被篡改,因为任何尝试修改一个块的数据都会破坏整个链的…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...