HBase架构模型

HBase数据模型

在 HBase 表中,一条数据拥有一个全局唯一的主键(RowKey)和任意数量的(Column Qualifier),每个列的数据存储支持多个版本(Version),一列或多列组成一个列族(Column Family),同一个列族中列的数据在物理上都存储在同一个 HFile 中。这样基于列存储的数据结构有利于数据缓存和查询。

所以,在 HBase 中定位一条数据需要通过:RowKey → Column Family → Column Qualifier → Version。

image-20230314192814193

namesapce:理解为数据库

table:表

rowkey:行键,RowKey 的概念与关系型数据库中的主键相似,是一行数据的唯一标识,RowKey 以字节数组保存。存储数据时,数据会按照 RowKey 的字典序排序存储

Column Family:列族,HBase 基于列划分数据的物理存储,同一个列族中列的数据在物理上都存储在同一个 HFile中。一个列族可以包含任意多列,一般同一类的列会放在一个列族中,每个列族都有一组存储属性:

Column Qualifier:列

Timestamp:时间戳,使用不同的 Timestamp 来标识相同 RowKey 对应的不同版本的数据

cell:单元格

HBase架构模型

HBase 可以将数据存储在本地文件系统,也可以存储在 HDFS 文件系统。在生产环境中,HBase 一般运行在 HDFS上,以 HDFS 作为基础的存储设施。HBase 通过 HBase Client 提供的 Java API 来访问 HBase 数据库,以完成数据的写入和读取。HBase 集群主要由 HMasterRegionServerZooKeeper 组成。

image-20230314200532212
ZooKeeper

主要工作职责如下:

选举 HMaster:保证任何时候,集群中只有一个 Master。实现 HMaster 主从节点的 Failover;

监控 HRegionServer:实时监控 HRegionServer 的状态,将 HRegionServer 的上下线信息实时报告给 HMaster;

维护元数据和集群配置:存放整个 HBase 集群的元数据以及集群的状态信息,包括:

存储所有 HRegion 的寻址入口,存储所有的的元数据信息;

存储 Hbase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family。

Client

HBase Client 为用户提供了访问 HBase 的接口,可以通过元数据表(客户端负责发送请求到数据库)来定位到目标数据的 HRegionServer。

HMaster

HMaster 是 HBase 集群的主节点,负责整个集群的管理工作,HMaster 可以实现高可用(Active 和Standby),通过ZooKeeper 来维护主备节点的切换。HMaster 主要工作职责如下:

管理分配:管理和分配 Region,负责启动的时候分配 HRegion 到具体的 HRegionServer,又或者在分割 Region 时关于新 Region 的分配。管理用户对 Table 结构的 DDL(创建,删除,修改)操作:

表的元数据信息存储在 ZooKeeper

表的数据存储在 RegionServer 上(实际存储在 HDFS 上)

负载均衡:一方面负责将用户的数据均衡地分布在各个 HRegionServer 上,防止 HRegionServer 数据倾斜过载。另一方面负责将用户的请求均衡地分布在各个 HRegionServer 上,防止 HRegionServer 请求过热;

维护数据:发现失效的 HRegion,并将失效的 HRegion 分配到正常的 HRegionServer 上。当某个 HRegionServer 下线

时迁移其内部的 HRegion 到其他 HRegionServer 上。

权限控制

HRegionServer

HRegionServer 直接对接用户的读写请求,是真正干活的节点,属于 HBase 具体数据的管理者。主要工作职责如下:

维护 HMaster 分配给它的 Region,处理对这些 Region 的 IO 请求;

负责与底层的 HDFS 交互,存储数据到 HDFS;

实时和zookeeper 保持心跳,汇报当前节点的信息;

当接收到 HMaster 的命令创建表时,会分配一个 HRegion 对应一张表;

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

当客户端发送 DML 和 DQL 操作时,HRegionServer 负责和客户端建立连接;

当 HRegionServer 意外关闭的时候,当前节点的 HRegion 会被其他 HRegionServer 管理。

当某个 HRegionServer 宕机后,ZooKeeper 会通知 HMaster 进行失效备援。下线的 HRegionServer 所负责的 HRegion 暂时停止对外提供服务,HMaster 会将该 HRegionServer 所负责的 HRegion 转移到其他 HRegionServer 上,并且会对下线的

HRegionServer 进行日志重放,将 MemStore 中还未持久化到磁盘中的数据进行恢复。

HRegion

一个 HRegionServer 包含了多个 HRegion。HBase 将表中的数据基于 RowKey 的不同范围划分到不同 HRegion 上,每个HRegion 都负责一定范围的数据存储和访问。

*HRegion包含多个Store,一个Store包含一个MemStore和多个StoreFile*

image-20230314195749575

负载均衡:HRegion 是 HBase 中分布式存储和负载均衡的最小单元,不同的 HRegion 可以分布在不同的 HRegionServer 上。每个表一开始只有一个 HRegion,随着数据不断插入表,HRegion 不断增大,当增大到指定阀值(10G)的时候,HRegion 就会等分成两个 HRegion,切分后其中一个 HRegion 会被转移到其他的 HRegionServer 上,实现负载均衡。

image-20230314195652093
Split

在 HBase 中 Split 是一个很重要的功能,HBase 是通过把数据分配到一定数量的 HRegion 来达到负载均衡的。一个Table 会被分配到一个或多个 HRegion 中,这些 HRegion 会被分配到一个或者多个 HRegionServer 中。在自动 Split 策略中,当一个 HRegion 达到一定的大小就会自动 Split 成两个 Region。Table 在 HRegion 中是按照 RowKey 来排序的,并且一个 RowKey 所对应的行只会存储在一个 HRegion 中,这一点保证了 HBase 的强一致性。

当一个 Table 刚被创建的时候,HBase 默认的分配一个 HRegion 给 Table。也就是说这个时候,所有的读写请求都会访问到同一个 HRegionServer 的同一个 HRegion 中,这个时候就达不到负载均衡的效果了,集群中的其他 HRegionServer 可能处于比较空闲的状态。解决这个问题可以用 pre-splitting 在创建 Table 时提前生成多个 HRegion。

Store

一个 HRegion 由多个 Store 组成,每个 Store 都对应一个 Column Family,Store 包含 1 个 MemStore 和 0 或多个

StoreFile 组成。

MemStore:作为 HBase 的内存数据存储,数据的写操作会先写到 MemStore 中,当 MemStore 中的数据增长到指定阈

值(默认 128M)后,HRegionServer 会启动 FlushCache 进程将 MemStore 中的数据写入 StoreFile 持久化存储,每次写

入后都形成一个单独的 StoreFile。当客户端检索数据时,先在 MemStore 中查找,如果 MemStore 中不存在,则会在

StoreFile 中继续查找。

StoreFile:MemStore 中的数据写到文件后就是 StoreFile,StoreFile 底层是以 HFile 格式保存的。HBase 以 StoreFile 的大小来判断是否需要切分 HRegion。当一个 HRegion 中所有 StoreFile 的大小和数量都增长到超过指定阈值时,HMaster会把当前 HRegion 分割为两个,切分后其中一个 HRegion 会被转移到其他的 HRegionServer 上,实现负载均衡。

HFile:HFile 和 StoreFile 是同一个文件,只不过站在 HDFS 的角度称这个文件为 HFile,站在 HBase 的角度就称这个文件为 StoreFile。是 HBase 在 HDFS 中存储数据的格式,它包含多层的索引,这样在 HBase 检索数据的时候就不用完全的加载整个文件。

image-20230314200334156
HLog

一个 HRegionServer 只有一个 HLog 文件。负责记录数据的操作日志,当 HBase 出现故障时可以进行日志重放、故障恢复。

HDFS

HDFS 为 HBase 提供底层数据存储服务,同时为 HBase 提供高可用支持。HBase 将 HLog 存储在 HDFS 上,当服务器发生异常宕机时,可以重放 HLog 来恢复数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值