HBase – Filter – 过滤器的介绍以及使用 http://blog.csdn.net/u012185296/article/details/47338549

一个自定义 HBase Filter -“通过RowKeys来高性能获取数据” http://www.cnblogs.com/wgp13x/p/4196466.html

1 过滤器
HBase 的基本 API,包括增、删、改、查等。
增、删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询(Scan)。
HBase 不仅提供了这些简单的查询,而且提供了更加高级的过滤器(Filter)来查询。
1.1 过滤器的两类参数
过滤器可以根据列族、列、版本等更多的条件来对数据进行过滤,基于 HBase 本身提供的三维有序(行键,列,版本有序),这些过滤器可以高效地完成查询过滤的任务,带有过滤器条件的 RPC 查询请求会把过滤器分发到各个 RegionServer(这是一个服务端过滤器),这样也可以降低网络传输的压力。
使用过滤器至少需要两类参数:
1.1.1 一类是抽象的操作符
HBase 提供了枚举类型的变量来表示这些抽象的操作符:
LESS
LESS_OR_EQUAL
EQUAL
NOT_EQUAL
GREATER_OR_EQUAL
GREATER
NO_OP
1.1.2 另一类是比较器
代表具体的逻辑,例如字节级的比较,字符串级的比较等。
1.2 比较器
比较器作为过滤器的核心组成之一,用于处理具体的比较逻辑,例如字节级的比较,字符串级的比较等。
1.2.1 RegexStringComparator
支持正则表达式的值比较
1.2.2 SubStringComparator
用于监测一个子串是否存在于值中,并且不区分大小写。
1.2.3 BinaryPrefixComparator
前缀二进制比较器。与二进制比较器不同的是,只比较前缀是否相同。
1.2.4 BinaryComparator
二进制比较器,用于按字典顺序比较 Byte 数据值。
1.3 列值过滤器
1.3.1 SingleColumnValueFilter
SingleColumnValueFilter 用于测试值的情况(相等,不等,范围 、、、)
 
下面一个检测列族 family 下的列 qualifier 的列值和字符串 “my-value” 相等的部分示例代码 :
1.3.2 SingleColumnValueExcludeFilter
跟 SingleColumnValueFilter 功能一样,只是不查询出该列的值。
下面的代码就不会查询出 family 列族下 qualifier 列的值(列都不会查出来)
1.4 键值元数据过滤器
HBase 采用 “键值对” 保存内部数据,键值元数据过滤器评估一行的 “键” 是否保存在(如 ColumnFamily:Column qualifiers)。
1.4.1 FamilyFilter
用于过滤列族(通常在 Scan 过程中通过设定某些列族来实现该功能,而不是直接使用该过滤器)。
1.4.2 QualifierFilter
用于列名(Qualifier)过滤。
1.4.3 PrefixFilter 和ColumnPrefixFilter   根据Row或Column的前缀取数据
用于列名(Qualifier)前缀过滤,即包含某个前缀的所有列名。
1.4.4 MultipleColumnPrefixFilter
1.4.5 ColumnRangeFilter
该过滤器可以进行高效的列名内部扫描。(为何是高效呢???因为列名是已经按字典排序好的)HBase-0.9.2 版本引入该功能。
1.4.6 DependentColumnFilter
该过滤器尝试找到该列所在的每一行,并返回该行具有相同时间戳的全部键值对。
1.5 行键过滤器
1.5.1 RowFilter
行键过滤器,一般来讲,执行 Scan 使用 startRow/stopRow 方式比较好,而 RowFilter 过滤器也可以完成对某一行的过滤。
1.5.2 RandomRowFilter
该过滤器是随机选择一行的过滤器。参数 chance 是一个浮点值,介于 0.1 和 1.0 之间。
1.6 功能过滤器
1.6.1 PageFilter
用于按行分页。
1.6.2 FirstKeyOnlyFilter
该过滤器只查询每个行键的第一个键值对,在统计计数的时候提高效率。(HBase-Coprocessor 做 RowCount 的时候可以提高效率)。
1.6.3 KeyOnlyFilter
1.6.4 InclusiveStopFilter
常规的 Scan 包含 start-row 但不包含 stop-row,如果使用该过滤器便可以包含 stop-row。
1.6.5 ColumnPaginationFilter
按列分页过滤器,针对列数量很多的情况使用。
2 自定义过滤器
做法 : 继承 FilterBase,然后打成 jar 放到 $HBASE_HOEM/lib 目录下去(注意:需要重启 HBase 集群)
写自定义过滤器的时候需要熟悉过滤器的执行流程,不解释 、、、