最近在学习Hadoop中的HBase,通过本次实验,可以理解比较过滤器,能够掌握并运用。主要包含行比较过滤器和列族比较过滤器实验。在进行实验之前需要导入HBase项目包,然后在这个项目下面创建package和class。
Eclipse
选中Java,然后点击OK:
Open Perspective
import1
import2
import3
import4
import5
完成以上操作后,便可以开始编写运行HBase程序了。
比较过滤器是一种专门的用于比较的过滤器,通过实现比较运算符与比较器,来实现用户的需求。
操作 | 描述 |
---|---|
LESS | 匹配小于设定值的值 |
LESS_OR_EQUAL | 匹配小于或等于设定值的值 |
EQUAL | 匹配等于设定值的值 |
NOT_EQUAL | 匹配与设定值不相同的值 |
GREATER_OR_EQUAL | 匹配大于或等于设定值的值 |
GREATER | 匹配大于设定值的值 |
NOT_OP | 排除一切值 |
比较器 | 描述 |
---|---|
BinaryComparator | 按字节索引顺序比较指定字节数组,采用Bytes.compareTo(byte[]) |
BinaryPrefixComparator | 跟上面相同,使用Bytes.compareTo()进行匹配,但是是从左端开始前缀匹配行过滤器RowFilter |
NullComparator | 判断给定的是否为空不做匹配,只判断当前值是不是null |
BitComparator | 通过BitwiseOp类提供的按位与(AND),或(OR),异或(XOR)操作执行位级比较 |
RegexStringComparator | 根据一个正则表达式,在实例化这个比较器的时候去匹配表中数据 |
SubstringComparator | 把阈值和表中数据当做String实例,同时通过contains()操作匹配字符串 |
该过滤器是基于行值(row)来过滤数据,不符合条件的row的行将要被过滤掉。行键和行值需要进行区分:
行值(row):在一行数据中,其row值是一行中的唯一标示。 行键(Key):在HBase底层存储中,数据都是以KeyValue对象的形式存在,而在KeyValue对象中,Key包含了一个单元格的row、columnfamily、column、timestamp、type 几个重要的信息,type有四种类型,分别是Put、Delete、 DeleteColumn和DeleteFamily。而Value中只有单元格真实的数据。也就是说Key是不包含value,但包含row的。
通过代码实现行比较过滤器的调用,这里是匹配“emp”表中行键大于等于“2”、并且扫描范围为列族personal data下面的列city的行,并将相关信息打印到控制台。
核心代码
以上代码是在创建configuration实例,创建表连接,创建过滤器,设置过滤条件,设置比较器为BinaryComparator。并创建一个scan对象,设置scan的范围,将scan的结果进行Row过滤。
在控制台查看行过滤的结果,将匹配到的“emp”表格中行键大于等于2的、并且扫描范围为列族personal data下面的列city的行的数据进行显示。如下:
结果
其中,row为“2”,columnfamily为“personal data”,column为“city”,timestamp为“1498442651530”,type为“Put”,vlen即数据长度为7字节,seqid为“0”;row为“3”,columnfamily为“personal data”,column为“city”,timestamp为“1498442651555”,type为“Put”,vlen即数据长度为5字节,seqid为“0”。
该过滤器是对列族进行过滤,即在获取数据过程中,不符合该过滤器条件的列族内的数据,全部被过滤掉。
通过代码实现列比较过滤器的调用,这里是匹配“emp”表中列族为“professional data”的列,并将相关信息打印到控制台。
核心代码
以上代码是在创建configuration实例,创建表连接,创建过滤器,设置过滤条件,设置比较器为BinaryComparator。并创建一个scan对象,将scan的结果进行列族过滤。
在控制台查看列族过滤的结果,将匹配到“professional data”的所有列的数据进行显示。如下:
结果