HBase的应用场景及架构原理

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 笔记

一、HBase在实际业务场景中的应用


HBase是一个构建在HDFS上的分布式列存储系统;HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储

HBase能做什么?


海量数据存储

准实时查询

举例说明HBase在实际业务场景中的应用


交通

金融

电商

移动


二、HBase的特点


容量大:HBase单表可以有百亿行,百万列,数据矩阵横向和纵向两个纬度所支持的数据量级别都非常具有弹性

稀疏性:为空的列并不占用存储空间,表可以设计的非常稀疏

多版本:HBase每一列的数据存储有多个Version

面向列:HBase是面向列的存储和权限控制,并支持独立检索。列式存储,其数据在表中是按照某列存储的,这样在查询只需要少数几个字段的时候,能大大减少读取的数据量。

扩展性:底层依赖于HDFS

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

高性能:底层的LSM数据结构和RowKey有序排列等架构上的独特设计,使得HBase具有非常的写入性能。region切分、主键索引和缓存机制使得HBase在海量数据下具备一定的随机读取性能,该性能针对Rowkey的查询能够达到毫秒级。


三、HBase数据模型并举例说明


(1)逻辑存储模型

1.pngimage.pngimage.pngimage.png

RowKey:Hbase使用Rowkey来唯一的区分某一行的数据。

Column Family(列族):Hbase通过列族划分数据的存储,列族下面可以包含任意多的列,实现灵活的数据存取。Hbase的列族不是越多越好,官方推荐的是列族最好小于或者等于3。我们使用的场景一般是1个列族。

Time Stamp(时间戳):TimeStamp对Hbase来说至关重要,因为它是实现Hbase多版本的关键。在Hbase中使用不同的timestame来标识相同rowkey行对应的不通版本的数据。

Cell:HBase 中通过 rowkey 和 columns 确定的为一个存储单元称为 cell。每个 cell 都保存着同一份 数据的多个版本。版本通过时间戳来索引。


(2)物理存储模型

Hbase的Table中的所有行都按照row key的字典序排列。Table 在行的方向上分割为多个Region。Region按大小分割的,每个表开始只有一个region,随 着数据增多,region不断增大,当增大到一个阀值的时候, region就会等分会两个新的region,之后会有越来越多的 region。7.png5.png

Region是HBase中分布式存储和负载均衡的最小单元。 不同Region分布到不同RegionServer上。

6.png

Region虽然是分布式存储的最小单元,但并不是存储 的最小单元。Region由一个或者多个Store组成,每个store保存一个 columns family。每个Strore又由一个memStore和0至多个StoreFile组成。memStore存储在内存中,StoreFile存储在HDFS上。

8.png


四、HBase基本架构

10.png

包括了HMaster、HRegionSever、HRegion、HLog、Store、MemStore、StoreFile、HFile等。HBase底层依赖HDFS,通过DFS Cilent进行HDFS操作。HMaster负责把HRegion分配给HRegionServer,每一个HRegionServer可以包含多个HRegion,多个HRegion共享HLog,HLog用来做灾难恢复。每一个HRegion由一个或多个Store组成,一个Store对应表的一个列族,每个Store中包含与其对应的MemStore以及一个或多个StoreFile(是实际数据存储文件HFile的轻量级封装),MemStore是在内存中的,保存了修改的数据,MemStore中的数据写到文件中就是StoreFile。


(1)HMaster

HMaster的主要功能有:


把HRegion分配到某一个RegionServer。

有RegionServer宕机了,HMaster可以把这台机器上的Region迁移到active的RegionServer上。

对HRegionServer进行负载均衡。

通过HDFS的dfs client接口回收垃圾文件(无效日志等)

注:HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。


(2)HRegionServer

HRegionServer的主要功能有:


维护HMaster分配给它的HRegion,处理对这些HRegion的IO请求,也就是说客户端直接和HRegionServer打交道。(从图中也能看出来)

负责切分正在运行过程中变得过大的HRegion


(3)基本架构

HBase构建在HDFS之上,其组件包括 Client、zookeeper、HDFS、Hmaster以及HRegionServer。Client包含访问HBase的接口,并维护cache来加快对HBase的访问。Zookeeper用来保证任何时候,集群中只有一个master,存贮所有Region的寻址入口以及实时监控Region server的上线和下线信息。并实时通知给Master存储HBase的schema和table元数据。HMaster负责为Region server分配region和Region server的负载均衡。如果发现失效的Region server并重新分配其上的region。同时,管理用户对table的增删改查操作。Region Server 负责维护region,处理对这些region的IO请求并且切分在运行过程中变得过大的region。

11.png

HBase 依赖ZooKeeper,默认情况下,HBase 管理ZooKeeper 实例。比如, 启动或者停止ZooKeeper。Master与RegionServers 启动时会向ZooKeeper注册。因此,Zookeeper的引入使得 Master不再是单点故障。

12.png

Client每次写数据库之前,都会首先血Hlog日志。记录写操作。如果不做日志记录,一旦发生故障,操作将不可恢复。HMaster一旦故障,Zookeeper将重新选择一个新的Master 。无Master过程中,数据读取仍照常进行。但是,无master过程中,region切分、负载均衡等无法进行。RegionServer出现故障的处理原理是定时向Zookeeper汇报心跳,如果一旦时 间内未出现心跳HMaster将该RegionServer上的Region重新分配到其他RegionServer上。失效服务器上“预写”日志由主服务器进行分割并派送给新的 RegionServer 。Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例。

13.png

寻找RegionServer定位的顺序是ZooKeeper --ROOT-(单Region) -.META. -用户表 。如上图所示。-ROOT- 表包含.META.表所在的region列表,该表只会有一 个Region。 Zookeeper中记录了-ROOT-表的location。 .META. 表包含所有的用户空间region列表,以及 RegionServer的服务器地址。


五、HBase读写流程


(1)写流程

14.png

client首先会去读zookeeper上的meta-region-server表信息,获取hbase:meta 表位于哪个Region Server;

访问对应的Region Server,获取hbase:meta 表,此meta表信息记录了HBase所有表region信息

根据读请求的namespace:table/rowkey,查询 出目标数据位于哪个Region Server 中的哪个Region 中

并将该table 的region 信息以及meta 表 的位置信息缓存在客户端的meta cache,方便下次访问。

与目标Region Server 进行通讯

将数据顺序写入(追加)到WAL

将数据写入对应的MemStore,数据会在MemStore 进行排序

向客户端发送ack

等达到MemStore 的刷写时机后,将数据刷写到HFile


(2)读流程

15.png

client首先会去读zookeeper上的meta-region-server表信息,获取hbase:meta 表位于哪个Region Server;

访问对应的Region Server,获取hbase:meta 表,此meta表信息记录了HBase所有表region信息

根据读请求的namespace:table/rowkey,查询 出目标数据位于哪个Region Server 中的哪个Region 中

并将该table 的region 信息以及meta 表 的位置信息缓存在客户端的meta cache,方便下次访问。

与目标Region Server 进行通讯

分别在Block Cache(读缓存),MemStore 和Store File(HFile)中查询目标数据,并将查到的 所有数据进行合并。此处所有数据是指同一条数据的不同版本(time stamp)或者不同的类型 (Put/Delete)。

将从文件中查询到的数据块(Block,HFile 数据存储单元,默认大小为64KB)缓存到Block Cache。

将合并后的最终结果返回给客户端。


六、Flush


16.png

MemStore的刷写时机


当某个memstroe 的大小达到了hbase.hregion.memstore.flush.size(默认值128M),其所 在region的所有memstore 都会刷写。当memstore 的大小达到了hbase.hregion.memstore.flush.size(默认值128M)hbase.hregion.memstore.block.multiplier(默认值4)时,会阻止继续往该memstore 写数 据。


当region server中memstore的总大小达到hbase.regionserver.global.memstore.size(默认值0.4)hbase.regionserver.global.memstore.size.lower.limit(默认值0.95),region 会按照其所有memstore 的大小顺序(由大到小)依次进行刷写。直到region server中所 有memstore 的总大小减小到上述值以下。当region server 中memstore 的总大小达到hbase.regionserver.global.memstore.size(默认值0.4)时,会阻止继续往 所有的memstore 写数据。


到达自动刷写的时间,也会触发memstore flush。自动刷新的时间间隔由以下参数决定 hbase.regionserver.optionalcacheflushinterval(默认1 小时)。


当WAL 文件的数量超过hbase.regionserver.max.logs,region 会按照时间顺序依次进行刷 写,直到WAL 文件数量减小到hbase.regionserver.max.log 以下(该属性名已经废弃,现无需手 动设置,最大值为32)。


七、StoreFile Compaction


由于memstore 每次刷写都会生成一个新的HFile,且同一个字段的不同版本(timestamp)和不同类 型(Put/Delete)有可能会分布在不同的HFile 中,因此查询时需要遍历所有的HFile。


为了减少HFile 的个数,以及清理掉过期和删除的数据,会进行StoreFile Compaction。Compaction 分为两种分别是Minor Compaction 和Major Compaction。


Minor Compaction会将临近的若干个较小的HFile 合并成一个较大的HFile,但不会清理过期和删 除的数据。

Major Compaction 会将一个Store 下的所有的HFile 合并成一个大HFile,并且会清理掉过期和删 除的数据。


17.png


八、Region Split


默认情况下,每个Table 起初只有一个Region,随着数据的不断写入,Region 会自动进行拆分。刚拆 分时,两个子Region 都位于当前的Region Server,但处于负载均衡的考虑,HMaster 有可能会将某个 Region 转移给其他的Region Server。


Region Split 时机:


当1 个region 中的某个Store 下所有StoreFile 的总大小超过hbase.hregion.max.filesize, 该Region 就会进行拆分(0.94 版本之前)。

当1 个region 中的某个Store 下所有StoreFile 的总大小超过Min(R^2 *“hbase.hregion.memstore.flush.size”,hbase.hregion.max.filesize"),该Region 就 会进行拆分,其中R 为当前Region Server 中属于该Table 的个数(0.94 版本之后)。

18.png


相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
2月前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
151 3
|
3月前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
134 3
|
1月前
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
355 90
|
10天前
|
存储 SQL 缓存
MySQL原理简介—2.InnoDB架构原理和执行流程
本文介绍了MySQL中更新语句的执行流程及其背后的机制,主要包括: 1. **更新语句的执行流程**:从SQL解析到执行器调用InnoDB存储引擎接口。 2. **Buffer Pool缓冲池**:缓存磁盘数据,减少磁盘I/O。 3. **Undo日志**:记录更新前的数据,支持事务回滚。 4. **Redo日志**:确保事务持久性,防止宕机导致的数据丢失。 5. **Binlog日志**:记录逻辑操作,用于数据恢复和主从复制。 6. **事务提交机制**:包括redo日志和binlog日志的刷盘策略,确保数据一致性。 7. **后台IO线程**:将内存中的脏数据异步刷入磁盘。
|
28天前
|
存储 缓存 监控
ClickHouse 架构原理及核心特性详解
ClickHouse 是由 Yandex 开发的开源列式数据库,专为 OLAP 场景设计,支持高效的大数据分析。其核心特性包括列式存储、字段压缩、丰富的数据类型、向量化执行和分布式查询。ClickHouse 通过多种表引擎(如 MergeTree、ReplacingMergeTree、SummingMergeTree)优化了数据写入和查询性能,适用于电商数据分析、日志分析等场景。然而,它在事务处理、单条数据更新删除及内存占用方面存在不足。
283 21
|
28天前
|
存储 消息中间件 druid
Druid 架构原理及核心特性详解
Druid 是一个分布式、支持实时多维OLAP分析的列式存储数据处理系统,适用于高速实时数据读取和灵活的多维数据分析。它通过Segment、Datasource等元数据概念管理数据,并依赖Zookeeper、Hadoop和Kafka等组件实现高可用性和扩展性。Druid采用列式存储、并行计算和预计算等技术优化查询性能,支持离线和实时数据分析。尽管其存储成本较高且查询语言功能有限,但在大数据实时分析领域表现出色。
101 19
|
28天前
|
存储 SQL NoSQL
Doris 架构原理及核心特性详解
Doris 是百度内部孵化的OLAP项目,现已开源并广泛应用。它采用MPP架构、向量化执行引擎和列存储技术,提供高性能、易用性和实时数据处理能力。系统由FE(管理节点)和BE(计算与存储节点)组成,支持水平扩展和高可用性。Doris 适用于海量数据分析,尤其在电商、游戏等行业表现出色,但资源消耗较大,复杂查询优化有局限性,生态集成度有待提高。
85 15
|
25天前
|
Java 网络安全 开发工具
Git进阶笔记系列(01)Git核心架构原理 | 常用命令实战集合
通过本文,读者可以深入了解Git的核心概念和实际操作技巧,提升版本管理能力。
|
1月前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
209 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现