目录
Hbase过滤器
HBase的基本API,包括增、删、改、查等
查询一般使用Get或者Scan进行查询
Hbase不仅提供了这些简单的查询,而且提供了更加高级的过滤器(Filter)来查询
过滤器的两类参数
过滤器可以根据列簇、列、版本等更多的条件来对数据进行过滤
hbase本身提供三维有序(行键,列,版本有序)
这些过滤器可以高效的完成查询过滤的任务,带有过滤器条件的RPC查询请求会把过滤器分发到各个RegionSever(这是一个服务端过滤器),这样也可以降低网络传输的压力。
使用过滤器至少需要两类参数:
一类是抽象的操作符,另一类是比较器。
操作符:
LESS:小于
LESS_OR_EQUAL:小于等于
EQUAL:等于
NOT_EQUAL:不等于
GREATER_OR_EQUAL:大于等于
GREATER:大于
NO_OP:不比较
常见的六大比较过滤器:
BinaryComparator:
按字节索引顺序比较指定字节数组,采用Bytes.compareTo(byte[])
BinaryPrefixComparator:
同BinaryComparator,只是比较左端前缀的数据是否相同
NullComparator
判断给定的是否为空
BitComparator
按位比较
RegexStringComparator
提供一个正则的比较器,仅支持EQUAL,非EQUAL
SubstringComparator
判断提供的字串是否出现在中
专用过滤器:
单列值过滤器:SingleColumnValueFilter
SingleColumnValueFilter会返回满足条件的cell所在行的所有cell的值(即会返回一行数据)
列值排除过滤器:SingleColumnValueExcludeFilter
与SingleColumnValueFilter相反,会排除掉指定的列,其他的列全部返回
rowkey前缀过滤器:PrefixFilter
分页过滤器PageFilter
布隆过滤器原理:
布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
Bloom Filter在时间空间这两个因素之外又引入了另一个因素:错误率。
在使用Bloom Filter判断一个元素是否属于某个集合时,会有一定的错误率。也就是说,有可能把不属于这个集合的元素误认为属于这个集合(False Positive),但不会把属于这个集合的元素误认为不属于这个集合(False Negative)。在增加了错误率这个因素之后,Bloom Filter通过允许少量的错误来节省大量的存储空间。
用法理解:
我们已经知道rowKey存放在HFile中,那么为了从一系列的HFile中查询某个rowkey,我们就可以通过 Bloom Filter 快速判断 rowkey 是否在这个HFile中,从而过滤掉大部分的HFile,减少需要扫描的Block。