Hbase读写过程

本文详细介绍了Hbase的读写过程,包括客户端如何通过Zookeeper找到Meta表获取数据,以及写请求的步骤,如数据先写入HLog再进入Memstore,最后到Storefile。同时,阐述了Region的管理,包括Region的分配、Region Server的上线与下线,以及HMaster的角色和影响。此外,文章还提及了HBase的三个重要机制:flush、compact和split机制。

1、读请求过程:
meta表是hbase系统自带的一个表。里面存储了hbase用户表的元信息。
元信息为meta表内记录一行数据是用户表一个region的start key 到endkey的范围。
meta表存储在regionserver里。 具体存储在哪个regionserver里?zookeeper知道。
过程:
1.客户端到zookeeper询问meta表在哪
2.客户端到meta所在的节点(regionserver)读取meta表的数据
3.客户端找到region 获取region和regionserver的对应关系,直接到regionserver读取region数据
查看meta表信息
hbase(main):011:0> scan ‘hbase:meta’

2、写请求过程:
1.Client先访问zookeeper,找到Meta表,并获取Meta表元数据。确定当前将要写入的数据所对应的HRegion和 HRegionServer服务器。
2.Client向该HRegionServer服务器发起写入数据请求。
3.Client先把数据写入到HLog,以防止数据丢失,然后将数据写入到Memstore。
4.Memstore达到阈值,会把Memstore中的数据flush到Storefile中
5.当Storefile越来越多,达到一定数量时,会触发Compact合并操作,将多个小文件合并成一个大文件。
6.Storefile越来越大,Region也会越来越大,达到阈值后,会触发Split操作,变成两个文件。

== 说明:hbasez 支持数据修改(伪修改),实际上是相同rowkey数据的添加。hbase只显示最后一次的添加==
3、Region管理:
region的分配过程
前提:一个region只能分配给一个region server
1.master记录了当前有哪些可用的region server。以及当前哪些region分配给了哪些region server,哪些region还没有分配。
2.当需要分配的新的region,并且有一个region server上有可用空间时,master就给这个region server发送一个装载请求,把region分配给这个region server。
3.region server得到请求后,就开始对此region提供服务。
region server上线
前提:master使用zookeeper来跟踪region server状态。
1.当某个region server启动时,首先在zookeeper上的/hbase/rs目录下建立代表自己的znode。
2.master订阅了/hbase/rs目录上的变更消息,当/hbase/rs目录下的文件出现新增或删除操作时,master可以得到来自zookeeper的实时通知。因此一旦region server上线,master能马上得到消息
region server下线
前提:master使用zookeeper来跟踪region server状态。
1.当region server下线时,它和zookeeper的会话断开。
2.zookeeper而自动释放代表这台server的文件上的独占锁(znode)
3.zookeeper将变化发送给master
4.master 将挂掉的region server的region分配给其它还活着的regionserver
Hmaster的上线
前提:hbase集群中可以设置多个Hmaster,真正对外提供服务的只有一个
1.从zookeeper上获取唯一 一个代表active master的锁,用来阻止其它master成为真正的master。
2.扫描zookeeper上的/hbase/rs节点,获得当前可用的region server列表。
3.master和每个region server通信,获得当前已分配的region和region server的对应关系。 4.master扫描.META.表,计算得到当前还未分配的region,将他们放入待分配region列表。
Hmaster下线后的影响
master只维护表和region的元数据,不参与表数据IO的过程,所以master下线短时间内对整个hbase集群没有影响。表的数据读写还可以正常进行。
无法创建删除表,无法修改表的schema,无法进行region的负载均衡,无法处理region 上下线,无法进行region的 合并(region的split可以正常进行) 当hmaster下线后,启动Zookeeper的选举机制,选出新的Hmaster,新的Hmaster上线,执行上线流程。
4、HBase三个重要机制
1、flush机制
hbase.regionserver.global.memstore.size: 默认;大小的40%
regionServer的全局memstore的大小**(多个region),超过该大小会触发flush到磁盘的操作,flush时会阻塞客户端读写。
hbase主要用于海量数据的快速读写。读写的总内存是堆内存的80%,读占用堆内存的40%,写占用堆内存的40%,想提高哪个业务场景的效率,就提高相应的百分比。
hbase.hregion.memstore.flush.size: 默认:128M(单个region里memstore的缓存大小)
hbase.regionserver.optionalcacheflushinterval :默认:1h
集群调优:
hbase.regionserver.global.memstore.size.lower.limit: 默认0.95
hbase.hregion.preclose.flush.size:5M
hbase.hstore.compactionThreshold:默认: 3个
2、compact机制
当flush文件的数量达到3个,把小的storeFile文件合并成大的Storefile文件
3、split机制
当Region达到阈值(默认10G),会把过大的Region一分为二

### 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 合并成一个文件,并删除过期或删除标记的数据。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值