HBase过滤器简介


HBase过滤器简介

 

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

 

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

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

 

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

 

 

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

 HBase过滤器简介_第1张图片

 

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所需要的第二类类型就是比较器,提供多种方法比较不同键值。比较器都继承自WritableByteArrayComparableWritableByteArrayComparable实现了WritableComparable

 

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

HBase过滤器简介_第2张图片

 

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

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

     截取字符串子串和正则式的处理也需要花费额外的时间。
        过滤器本来的目的是为了筛掉无用的信息,所有基于CompareFilter的过滤处理过程是返回匹配的值。

 


比较器具体实现看这篇文章:http://blog.csdn.net/baolibin528/article/details/46045823

 

 

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

 HBase过滤器简介_第3张图片

 

 

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

 HBase过滤器简介_第4张图片


HBase过滤器简介_第5张图片



 

 

 

你可能感兴趣的:(Bigdatda-HBase)