Hbase FuzzyRowFilter如何跳跃键工作

Vik*_*del 10 hbase bigdata hfile

我知道模糊行滤波器首先将两个参数作为行键,第二个作为模糊逻辑.我从相应的java类FuzzyRowFilter中理解的是,过滤器评估当前行并尝试计算与模糊逻辑匹配的下一个更高的行键,并跳转非匹配键.

我无法理解以下事情

扫描如何跳转某些行键?它是否使用Get获取并比较当前行键.扫描如何知道下一个匹配的行键存在的位置?没有进行全扫描(如果它跳转)

Igo*_*kov 12

你正确理解了一切.

对于那些来自网络搜索的人来说,这里有两个链接,解释了如何一般地利用行跳过以及如何在FuzzyRowFilter中完成它

  1. HBase FuzzyRowFilter:二级索引的替代方案
  2. HBase中的过滤器(或行内扫描第II部分)

如果过滤器知道它在最后一个键并且需要跳过:

  1. 过滤返回 SEEK_NEXT_USING_HINT
  2. Region Server调用getNextCellHint,返回建议的内容Cell
  3. Region Server执行完全相同的查找密钥的例程,就像它对第一个密钥所做的那样scan- 它检查可用的HFiles,检查相关的密钥是否存在
    1. Region Server读取每个文件的"trailer"部分以获取元数据块的偏移量
    2. 区域服务器读取Meta和FileInfo元数据块类型,以避免在不存在密钥的情况下从文件中读取二进制数据(布隆过滤器),文件是否太旧(Max SequenceId)或文件是否太新(时间范围)包含我们正在寻找的东西.在此处查看有关HFile格式的更多信息
    3. 如果密钥位于HFile内,则Region Server使用DataBlock索引段来计算数据块位置的偏移量,并且具有相关密钥
    4. 如果带有密钥的数据块发生在Region Server块缓存中,则跳过下一步
    5. 从HFile读取数据块
    6. 区域服务器最终逐个扫描密钥,直到它到达目标密钥
  4. 找到的键和可能的整行(取决于过滤器)将传递给过滤器代码
  5. 整个循环重复