HBase之比较过滤器

最近在学习Hadoop中的HBase,通过本次实验,可以理解比较过滤器,能够掌握并运用。主要包含行比较过滤器和列族比较过滤器实验。在进行实验之前需要导入HBase项目包,然后在这个项目下面创建package和class。

项目准备

  • 进入desktop,打开eclipse。
  • 打开eclipse后,点击Open Perspective:

Eclipse

选中Java,然后点击OK:

Open Perspective

  • 导入Hbase项目,如下图:
    • 在左边的空白处点击右键,选择import:

    import1

    • 双击General,选中Existing Projects into Workspace,然后点击Next:

    import2

    • 点击Browser....:

    import3

    • 选中HBase,然后点击OK:

    import4

    • 点击Finish:

    import5

  • 在HBase项目下面创建相应的Package和Class。 给第一个程序实验创建一个名为Filter的package、名为Rowfilter的class。给第二个程序实验在名为Filter的package下创建名为Familyfilter的class。

完成以上操作后,便可以开始编写运行HBase程序了。

实验内容

比较过滤器CompareFilter

比较过滤器是一种专门的用于比较的过滤器,通过实现比较运算符与比较器,来实现用户的需求。

  • 比较过滤器中的比较运算符如下:

操作

描述

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()操作匹配字符串

1. 行比较过滤器实验RowFilter

该过滤器是基于行值(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”。

2. 列族比较过滤器实验FamilyFilter

该过滤器是对列族进行过滤,即在获取数据过程中,不符合该过滤器条件的列族内的数据,全部被过滤掉。

  • 目的

通过代码实现列比较过滤器的调用,这里是匹配“emp”表中列族为“professional data”的列,并将相关信息打印到控制台。

  • 核心代码

核心代码

以上代码是在创建configuration实例,创建表连接,创建过滤器,设置过滤条件,设置比较器为BinaryComparator。并创建一个scan对象,将scan的结果进行列族过滤。

  • 查看结果

在控制台查看列族过滤的结果,将匹配到“professional data”的所有列的数据进行显示。如下:

结果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏计算机视觉与深度学习基础

Leetcode 37 Sudoku Solver 深搜基础题+位运算

Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cel...

1917
来自专栏一名合格java开发的自我修养

storm 1.0版本滑动窗口的实现及原理

滑动窗口在监控和统计应用的场景比较广泛,比如每隔一段时间(10s)统计最近30s的请求量或者异常次数,根据请求或者异常次数采取相应措施。在storm1.0版本之...

1213
来自专栏生信宝典

Bookdown文档生成教程

bookdown是一款及其方便的编写技术文档或教材的工具,语法简洁,数据处理灵活。支持Rmarkdown或普通markdown通过pandoc软件转换为HTML...

6085
来自专栏程序员的碎碎念

ThinkPHP之数据库操作

数据库的操作是由模型来管理的,模型类的作用大多数情况是操作数据表的,如果按照系统的规范来命名模型类的话,大多数情况下是可以用模型的名字自动对应数据表的。 模型类...

3035
来自专栏数据结构与算法

洛谷P1155 双栈排序(贪心)

现在进来一个\(7\),看上去很难判断\(7\)到底放在哪里,如果放\(A\),后面来个\(9\),再来个\(6\),我们就凉了。

942
来自专栏木木玲

Netty 源码解析 ——— AdaptiveRecvByteBufAllocator

3392
来自专栏LinXunFeng的专栏

打造Moya便捷解析库,提供RxSwift拓展

1323
来自专栏LinXunFeng的专栏

打造Moya便捷解析库,提供RxSwift拓展

1、相信大家在使用Swift开发时,Moya是首选的网络工具,在模型解析这一块,Swift版模型解析的相关第三方库有很多,本人最习惯用的就是SwiftyJSON...

24811
来自专栏蓝天

IDL编译器实现入门

本文不对词法和语法、以及flex和bison进行介绍,如有需要,可以阅读《RPC的实现》。本文试图用直接的方式,以最短的篇幅介绍一个最简单的IDL编译器实现。...

2333
来自专栏数据和云

SQL Server 2016新特性:动态数据屏蔽(DDM)

编辑手记:对于敏感数据的适当屏蔽一直是数据安全中一个重要的部分,在SQL Server 2016上推出了动态数据屏蔽的新特性,使得开发人员或者数据库管理员能够控...

38812

扫码关注云+社区

领取腾讯云代金券