您的位置:首页 > 其它

HBase过滤器简介

2015-05-27 15:17 155 查看
HBase过滤器简介


HBase过滤器(filter)提供非常强大的特性帮助用户提高其处理表中数据的效率。



HBase中两种主要的数据读取函数是get()和scan(),他们都支持直接访问数据和通过指定起止行键访问数据的功能。

Get和Scan两个类都支持过滤器,理由是因为这类对象提供的API不能对行健、列名和列值进行过滤,但是通过过滤器可以直接这个目的。



过滤器最基本的接口是Filter,所有的过滤器都在服务器端生效,叫做谓词下推(predicate push down)。这样可以保证所有过滤掉的数据不会被传送到客户端。





下图描述了过滤器怎样在客户端配置,怎样在网络传输中被序列化,怎样在服务器中执行。






1、客户端创建Scan过滤器;

2、发送过滤器数据的序列化Scan;

3、RegionServer使用过滤器对Scan进行序列化。





总结:过滤器在客户端创建,通过RPC传送到服务器端,然后在服务器端进行过滤操作。



1、过滤器层次结构:

在过滤器层次结构中的最底层的是Filter接口和FilterBase抽象类,它们实现了过滤器的空壳和骨架。

其中有一组特殊的过滤器,它们继承自CompareFilter,需要用户同时提供至少两个特定的参数。





2、比较运算符:

继承自CompareFilter的过滤器比基类FilterBase多了一个comoare()方法,需要传入参数定义比较操作的过程。

HBase过滤器的比较操作符:



LESS <

LESS_OR_EQUAL <=

EQUAL =

NOT_EQUAL <>

GREATER_OR_EQUAL >=

GREATER >

NO_OP no operation



当过滤器被应用时,比较运算符可以决定什么被包含,什么被排除。这样可以帮助用户筛选数据的一段子集或一些特定的数据。





3、比较器:

CompareFilter所需要的第二类类型就是比较器,提供多种方法比较不同键值。比较器都继承自WritableByteArrayComparable,WritableByteArrayComparable实现了Writable和Comparable。



HBase对基于CompareFilter的过滤器提供的比较器





后3种比较器只能和EQUAL和NOT_EQUAL运算符搭配使用。

基于字符串的比较器,如RegexStringComparator和SubstringComparator,比基于字节的比较器更慢,更消耗资源。因为每次比较时它们都需要将给定的值转化为String.

截取字符串子串和正则式的处理也需要花费额外的时间。

过滤器本来的目的是为了筛掉无用的信息,所有基于CompareFilter的过滤处理过程是返回匹配的值。



比较器具体实现看这篇文章:/article/1520985.html





过滤器处理一行数据的逻辑流程:








过滤器属性和它们之间的兼容性:




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: