Hbase FuzzyRowFilter键跳跃的工作原理
我知道模糊行过滤器有两个参数,第一个是行键,第二个是模糊逻辑。 我从相应的java类FuzzyRowFilter中了解到, 过滤器计算当前行,并尝试计算下一个更高的行键,该行键将与模糊逻辑匹配,并跳过不匹配的键 我无法理解下面的事情 如何扫描某些行键?是否使用Get来获取和比较当前行键。Hbase FuzzyRowFilter键跳跃的工作原理,hbase,bigdata,hfile,Hbase,Bigdata,Hfile,我知道模糊行过滤器有两个参数,第一个是行键,第二个是模糊逻辑。 我从相应的java类FuzzyRowFilter中了解到, 过滤器计算当前行,并尝试计算下一个更高的行键,该行键将与模糊逻辑匹配,并跳过不匹配的键 我无法理解下面的事情 如何扫描某些行键?是否使用Get来获取和比较当前行键。 如何知道下一个匹配行键存在的位置?如果不进行完整扫描(如果跳转)了解hbase键的第一件事是按字典排序的顺序保存,该数据由hbase主机存储在元文件中。因此,当应用模糊行过滤器时,它可以直接跳过所有与行键不匹配
如何知道下一个匹配行键存在的位置?如果不进行完整扫描(如果跳转)了解hbase键的第一件事是按字典排序的顺序保存,该数据由hbase主机存储在元文件中。因此,当应用模糊行过滤器时,它可以直接跳过所有与行键不匹配的值 现在它所要做的就是选择行键,然后扫描键的不确定部分 例如,如果您的行键范围是
123456689-123456889
然后您的模糊行过滤器将是
123456???
-这里发生的是模糊行过滤器跳转到以123456
开头的行,模糊行过滤器的范围如下123456000-123456999您正确理解了所有内容
对于那些从web search来到这里的人,这里有两个链接,解释了一般情况下如何利用行跳过,特别是在FuzzyRowFilter中如何实现
如果筛选器知道它位于最后一个键,需要跳过:
过滤返回
区域服务器调用,返回建议的
Region Server执行的查找密钥的例程与在扫描中查找第一个密钥的例程完全相同-它检查可用的HFiles,检查有问题的密钥是否存在
区域服务器读取每个文件的“拖车”部分,以获取元数据块的偏移量
如果密钥不存在(Bloom Filter)、文件太旧(Max SequenceId)或文件太新(时间范围)无法包含我们要查找的内容,Region Server将读取Meta和FileInfo元数据块类型,以避免从hfile读取二进制数据。了解更多关于
如果密钥位于HFile内,Region Server将使用数据块索引段来计算到有密钥的数据块位置的偏移量
如果带有密钥的数据块已经在区域服务器块缓存中,则跳过下一步
从HFile读取数据块
区域服务器最终会逐个扫描密钥,直到命中目标密钥
找到的键和可能的整行(取决于过滤器)被传递给过滤器代码
整个循环重复