hbase写数据 和 读数据过程

本文围绕HBase展开,介绍了获取region存储位置信息的步骤,包括从zookeeper获取.ROOT.表位置,再获取.META.表位置以确定region存储位置。还阐述了向HBase表插入数据的流程,以及从HBase读取数据的过程,涉及memstore和blockcache缓存机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:获取region存储位置信息

写数据和读数据一般都会获取hbase的region的位置信息。大概步骤为:

1- 从zookeeper中获取.ROOT.表的位置信息,在zookeeper的存储位置为/hbase/root-region-server;

2- 根据.ROOT.表中信息,获取.META.表的位置信息;

3- .META.表中存储的数据为每一个region存储位置;

 

二: 向hbase表中插入数据

hbase中缓存分为两层:memstore和blockcache。

1- 首先写入到WAL文件中,目的是为了数据不丢失;

2- 再把数据插入到memstore缓存中,当memstore达到设置大小阈值时,会进行flush进程;

3- flush过程中,需要获取每一个region存储的位置。

 

三:从hbase中读取数据

 blockcache主要提供给读使用。读请求先到memstore中查数据,查不到就到blockcache中查,再查不到就会到磁盘上读,并把读的结果放入blockcache。

blockcache采用的算法为LRU(最近最少使用算法),因此当blockcache达到上限后,会启动淘汰机制,淘汰掉最老的一批数据。

   一个regionserver上有一个blockcache和N个memstore,它们的大小之和不能大于等于heapsize * 0.8,否则hbase不能启动。默认blockcache为0.2,而memstore为0.4。对于注重读响应时间的系统,应该将blockcache设大些,比如设置blockcache=0.4,memstore=0.39。这会加大缓存命中率。

转载于:https://www.cnblogs.com/parent-absent-son/p/10895365.html

### HBase 数据机制及故障恢复流程 #### 1. HBase 数据机制 HBase入流程主要包括以下几个关键组件步骤: - **MemStore**:当客户端向 HBase 数据时,数据会首先被入到内存中的 MemStore 中[^3]。当 MemStore 达到一定大小时,它会被刷新到磁盘上的 StoreFile 中[^1]。 - **WAL(Write-Ahead Logging)**:为了确保数据的可靠性,在数据入 MemStore 之前,HBase 会先将数据入 Write-Ahead Log (WAL),即 HLog 文件中[^4]。只有当 WAL 入成功后,客户端才会收到入成功的确认信息。这种机制可以保证在系统发生故障时,未持久化的数据可以通过 WAL 进行恢复。 - **Flush 条件**:MemStore 的 Flush 操作会在以下条件之一满足时触发: - MemStore 的大小超过预设阈值。 - RegionServer 配置的时间间隔到达。 - 系统管理员手动触发 Flush 操作[^1]。 ```python # 示例代码展示如何模拟 MemStore Flush 条件 class MemStore: def __init__(self, max_size): self.max_size = max_size self.current_size = 0 def add_data(self, data_size): self.current_size += data_size if self.current_size >= self.max_size: return True # Trigger Flush return False ``` #### 2. HBase 读数据机制 HBase 的读取流程涉及多个存储层,包括 MemStore、StoreFile HFile: - **MemStore**:如果请求的数据存在于 MemStore 中,则直接从内存中返回结果[^3]。 - **StoreFile**:如果数据不在 MemStore 中,则会从磁盘上的 StoreFile 中查找。StoreFile 是对 HFile 的封装,HFile 是 HBase 中 KeyValue 数据的存储格式[^3]。 - **Bloom Filter Block Index**:为了提高读取效率,HBase 使用 Bloom Filter Block Index 来快速定位数据所在的位置[^3]。 #### 3. 故障恢复流程 HBase 的故障恢复主要依赖于 WAL 日志 Zookeeper 的协调功能: - **WAL 日志重放**:当 RegionServer 发生故障并重启时,HBase 会通过重放 WAL 日志来恢复未持久化的数据[^4]。具体来说,HBase 会解析 WAL 日志并将其中的数据重新入 MemStore,然后进行 Flush 操作以生成新的 StoreFile。 - **Zookeeper 协调**:HMaster 通过 Zookeeper 跟踪所有活动的 HRegionServer,并在某个 RegionServer 失效时重新分配其管理的 Region。 #### 4. StoreFile 合并 随着数据的不断入,StoreFile 的数量会逐渐增加,这会导致读取性能下降。因此,HBase 会定期执行小合并(Minor Compaction)大合并(Major Compaction): - **小合并**:将少量的 StoreFile 合并成一个更大的 StoreFile,减少文件数量。 - **大合并**:将所有的 StoreFile 合并成一个文件,并删除过期或删除标记的数据。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值