Hbase 之 scan

我们先看一下scan类描述中的功能:

用setCaching(int) 设置缓存

通过指定start 设置扫描范围

通过addFamily(byte[]) 设置加载的fm

通过addColumn(byte[],byte[]) 设置获取的列

获取时间范围之内的所有列,setTimeRange(long, long)

.................

可以禁用cacheBlock ,setCacheBlocks(boolean)

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

下面以一个get为例:

 public Scan(Get get) {
    this.startRow = get.getRow();
    this.stopRow = get.getRow();
    this.filter = get.getFilter();
    this.cacheBlocks = get.getCacheBlocks();
    this.maxVersions = get.getMaxVersions();
    this.tr = get.getTimeRange();
    this.familyMap = get.getFamilyMap();
  }

把get 封装到scan 中, 将scan 传给 RegionScanner , RegionScanner 通过获取 stores 然后下放到StoreScanner。

Get过程中涉及到的类: Get 、scan 、RegionScan 、StoreScan、scanInfo (属于store级别的)、ScanQueryMatcher 用于查询匹配。


获取所有的StoreFile,循环每个StoreFile,针对每个StoreFile获取一个StoreFile.Reader  reader 主要有两个HFileReaderV1 或 HFileReaderV2,通过reader获取HFileScanner ,将 reader 和 HFileScanner封装到StoreFileScanner 中。

通过上面步骤获取到所有StoreFileScanner 和 MemStoreScanner,然后每一个scanner进行判断是不是需要,为什么还要问是不是需要内、因为某些情况下(时间范围查询、bloomFilter),



storeFileScanner

  public boolean shouldUseScanner(Scan scan, SortedSet<byte[]> columns, long oldestUnexpiredTS) {
    return reader.passesTimerangeFilter(scan, oldestUnexpiredTS)
        && reader.passesKeyRangeFilter(scan) && reader.passesBloomFilter(scan, columns);
  }



-----------------本来想保存结果点成发表了、、、、 ,没写完、后续补充。。。。。。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值