11

我知道模糊行过滤器需要两个参数,第一个是行键,第二个是模糊逻辑。我从相应的 java 类 FuzzyRowFilter 中了解到,过滤器评估当前行并尝试计算将匹配模糊逻辑的下一个较高行键,并跳过不匹配的键。

我无法理解以下内容

扫描如何跳转某些行键?它是否使用 Get 来获取和比较当前行键。scan 如何知道下一个匹配的行键在哪里?不进行全面扫描(如果它跳跃)

4

2 回答 2

14

你正确地理解了一切。

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

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

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

  1. 过滤退货SEEK_NEXT_USING_HINT
  2. Region Server 调用getNextCellHint返回一个建议的Cell
  3. Region Server 执行与查找第一个键时完全相同的例程来查找键scan- 它检查可用的 HFiles 检查是否存在相关键
    1. Region Server 读取每个文件的“预告片”部分以获取元数据块的偏移量
    2. Region Server 读取 Meta 和 FileInfo 元数据块类型以避免从 hfile 读取二进制数据,如果没有机会存在密钥(Bloom Filter),如果文件太旧(Max SequenceId)或文件太新( Timerange) 来包含我们正在寻找的内容。在此处查看有关HFile 格式的更多信息
    3. 如果键在 HFile 中,Region Server 使用 DataBlock 索引段来计算具有问题的键的数据块位置的偏移量
    4. 如果带有 key 的数据块已经在 Region Server 块缓存中,则跳过下一步
    5. 从 HFile 读取数据块
    6. Region Server 最终会一个一个地扫描 key,直到命中目标
  4. 找到的键和可能的整行(取决于过滤器)被传递给过滤器代码
  5. 整个循环重复
于 2014-02-18T10:03:19.377 回答
0

首先要了解的是 hbase 键是按字典顺序保存的,这些数据由 hbase 主控存储在元文件中。因此,当应用模糊行过滤器时,它可以直接跳过所有与行键不匹配的值。

现在它所要做的就是选择行键,然后扫描键的不确定部分。

例如。如果您的行键范围是123456689 - 123456889 那么您的模糊行过滤器将是123456???-这里发生的是模糊行过滤器跳到以开头的行,123456模糊行过滤器的范围如下123456000 - 123456999

于 2014-02-18T09:48:28.587 回答