Hbase FuzzyRowFilter如何跳跃键工作

时间:2014-02-03 12:46:33

标签: hbase bigdata hfile

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

我无法理解以下内容

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

2 个答案:

答案 0 :(得分:12)

你理解正确。

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

  1. HBase FuzzyRowFilter: Alternative to Secondary Indexes
  2. Filters in HBase (or intra row scanning part II)
  3. 如果过滤器知道它在最后一个键并且需要跳过:

    1. 过滤器返回SEEK_NEXT_USING_HINT
    2. 区域服务器调用getNextCellHint,返回建议的Cell
    3. Region Server执行与查找scan中第一个键完全相同的常规操作 - 检查可用的HFile,检查相关密钥是否存在
      1. Region Server读取每个文件的“trailer”部分以获取metadatablocks的偏移量
      2. Region Server读取Meta和FileInfo元数据块类型,以避免在没有密钥存在的情况下(Bloom过滤器)从文件中读取二进制数据,如果文件太旧(Max SequenceId)或文件是太新(时间范围)包含我们正在寻找的东西。详细了解HFile format here
      3. 如果密钥位于HFile内部,则Region Server使用DataBlock索引段来计算数据块位置的偏移量并使用该密钥
      4. 如果带有密钥的数据块发生在Region Server块缓存中,则跳过下一步
      5. 从HFile读取数据块
      6. 区域服务器最终逐个扫描密钥,直到达到目标密钥
    4. 找到的密钥和可能的整行(取决于过滤器)将传递给过滤器代码
    5. 整个循环重复

答案 1 :(得分:0)

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

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

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