HBase写入数据的过程

写入数据的详细过程?

怎么确认写入操作成功呢?
只要在WAL(write ahead log要提前写的文件)和MemCache中同时写入成功了,那么hbase的put(写)操作成功了。
WAL:HBase为了保证写入数据的可靠性,提出了WAL的概念;打个比方:迅雷在下载的时候,会把大文件分解成一个一个的小碎片数据,然后把这些小碎片文件下载完后再组装起来,那么这个大文件就下载完了。
WAL就是这样的原理,先把文件的一块一块的下载下来,就算集群挂了,只要这些小文件都在,就不会有数据丢失, 因为查询操作是从列簇中查找数据。

问:用户如何做到写入之后,立刻查询?
答:数据同时写入到WAL和MemCache中,用户查询的时候从MemCache中获取。
问:那么同时写入会不会增加IO操作?
答:为了保证数据的安全性和查询的快速性,增加的IO开销是必须的。
问:往内存中写,是不是非常容易造成内存溢出(就是内存满了)?
答:内存满了就写到磁盘文件(HFile)中,每次满了就写入一次到HFile中,HFile是HBase写入到hdfs的基本数据单位,
       每次写到HFile中的文件大小是64k,一个HFile装一个Block,Block里面存放着数据和索引,Block是数据结构,而不
       仅仅是数据文件, 这样就会有大量的HFile写入到hdfs中,那么大量的HFile就会造成以后读写hdfs费时,
       这就需要对HFile进行合并,  文件越多,读写的速度越慢。

对很多小的HFile合并成大的HFile,HFile是不断产生的,合并操作也是在不断的进行着,称作小合并minor compaction。
文件越多,读写的速度越慢,把大量HFile文件合并成一个大的HFile,称作大合并major compaction。

问:经过一次大合并之后,1个列簇与HFile的对应关系是什么?
答:1:1。也就是说一个列簇就形成了一个文件。


这时可以把每个HFile的 大小调大,那么写入到hdfs中的文件就少了,但是

从节点有大量的读写操作,读操作意味着客户端要对hdfs操作, 查询操作意味着从节点要负担很大的查询任务
### 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 合并成一个文件,并删除过期或删除标记的数据。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值