HBase读写数据流程,布隆过滤器

本文详细介绍了HBase的写数据流程,包括预写日志(wallog)、内存写入(memstore)及后续的storefile合并与split过程;阐述了读数据流程,重点解释了如何利用布隆过滤器提高storefile查询效率。

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

一 写数据流程概述

  1. 客户端要访问zk,因为zk上存储着root表的位置信息,进而可以一层层的找到需要访问的Hregionserver(通过root表找到meta表,进而确定是哪个Hregionserver)
  2. 客户端要预写日志(wal log),防止宕机,日志其实存储位置是在hdfs集群上的
    注意:日志在hdfs上会定期合并的。
  3. 客户端要写入到内存(memstore),当达到128M的,会进行刷写磁盘(storefile),storefile的存储位置也是在hdfs集群上的
  4. storefile的数量达到一定大小的时候会进行合并
  5. storefile达到10G时会进行split,split就是数据的分流
    注意:第4步的原因,当storefile不合并的情况下,容易造成数量过多,影响查找效率
    第5步的原因,当一个storfile过大的时候,在一个storefile内部查询,也会影响效率,10个G是效率比较高的一种方式。
    上面文字的图画表示

二 读数据流程

  1. 客户端首先要访问zk,zk上存储着root表的信息, 最终找到hregionserver。
    注意:root表和meta表是存放在hregionserver上的,这点和hbase的普通表不太一样
  2. 开始读取hregionsever,首先读取memstore,因为memstore其中存储的是热数据(即最新的数据),如果没有找到想要数据,则再去读取storefile。
    那么问题来了,那么多storefile,如何确定去读取哪一个storefile?
    解决方案就是布隆过滤器(详解请看第三部分)。

三 布隆过滤器

在这里插入图片描述
举例说明:
例如要查找一个URL,我们可以将存放URL的storefile文件的rowkey转成一个二进制数组存储起来,只存储1,不存0,把0位空着,这样我们可以使用这个数组去存储多个storefile文件。
我们当去查找一个URL的时候,不必要去全部扫描所有的storefile文件,仅仅去匹配那个数组就行,当然就算所有的1全部匹配上,也有可能出错,但整体减少的工作量,还是很可观的,误差率咋百分之一左右。
这就是一种空间换时间的做法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值