hbase 之 bloomfilter

bloomfilter  原理是什么大家可以网上查找详细资料挺多

主要配置参数:

io.storefile.bloom.error.rate  容错率

io.storefile.bloom.max.fold    最大折叠因子 (看下面计算过程解释)


bloomfilter  初始化在构造  StoreFille.Wtite的时候

  generalBloomFilterWriter = BloomFilterFactory.createGeneralBloomAtWrite(
          conf, cacheConf, bloomType,
          (int) Math.min(maxKeys, Integer.MAX_VALUE), writer);


如果大于v1 版本则使用 CompoundBloomFilterWriter  

初始化为

    chunkByteSize = ByteBloomFilter.computeFoldableByteSize(chunkByteSizeHint * 8, maxFold);
    this.errorRate = errorRate;    容错率
    this.hashType = hashType;      hash类型 默认murmur
    this.maxFold = maxFold;        最大折叠因子
    this.cacheOnWrite = cacheOnWrite;  时候cacheonwrite
    this.comparator = comparator;     比较器如果rowcol为KeyComparator 否则 ByteArrayComparator

下面是chunkByteSize的大小计算过程

计算过程:

io.storefile.bloom.block.size  默认 128 * 1024  以下以128表示

1、128*8

2、(128+7)/8 没搞明白为什么其实和上面的值应该是一样的嘛

3、然后接下里的操作我的理解就是   128+2的n次方,这个n 就是factor 即  io.storefile.bloom.max.fold


将封装的CompoundBloomFilterWriter  放到 inlineBlockWriters  集合中, CompoundBloomFilterWriter  是实现inlineBlockWriters  接口的。


-------------------------------------------------------------------------------------------

下面是写入时应用:

put数据的时候 writer.apppend 会调用写bloomFilter, 即 appendGeneralBloomfilter(kv)接下来的都是先讨论Type为Row的情况。

接下来对Row值进行获取、调用CompoundBloomFilterWriter.add 方法,此方法主要工作为:

把值放到chunk中,但是如果chunk (ByteBloomFilter) 为空的话,同时说明是第一个key 即变量firstKeyInChunk 应该是为空的, 接下来将第一个kv 中的 Row 赋值给firstKeyInChunk ,接下来创建一个新的chunk ,新chunk 会创建一个chunkByteSize 大小的bloom (ByteBuffer),






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值