点击上方蓝字  关注我们

HBase学习之路 (六)过滤器

过滤器(Filter)

  基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter。Filter可以根据簇、列、版本等更多的条件来对数据进行过滤,基于Hbase本身提供的三维有序(主键有序、列有序、版本有序),这些Filter可以高效的完成查询过滤的任务。带有Filter条件的RPC查询请求会把Filter分发到各个RegionServer,是一个服务器端(Server-side)的过滤器,这样也可以降低网络传输的压力。

  要完成一个过滤的操作,至少需要两个参数。一个是抽象的操作符,Hbase提供了枚举类型的变量来表示这些抽象的操作符:LESS/LESS_OR_EQUAL/EQUAL/NOT_EUQAL等;另外一个就是具体的比较器(Comparator),代表具体的比较逻辑,如果可以提高字节级的比较、字符串级的比较等。有了这两个参数,我们就可以清晰的定义筛选的条件,过滤数据。

抽象操作符(比较运算符)

LESS <

LESS_OR_EQUAL <=

EQUAL =

NOT_EQUAL <>

GREATER_OR_EQUAL >=

GREATER >

NO_OP 排除所有

比较器(指定比较机制)

BinaryComparator 按字节索引顺序比较指定字节数组,采用 Bytes.compareTo(byte[])

BinaryPrefixComparator 跟前面相同,只是比较左端的数据是否相同

NullComparator 判断给定的是否为空

BitComparator 按位比较

RegexStringComparator 提供一个正则的比较器,仅支持 EQUAL 和非 EQUAL

SubstringComparator 判断提供的子串是否出现在 value 中

HBase过滤器的分类

比较过滤器

1、行键过滤器 RowFilter

Filter rowFilter = new RowFilter(CompareOp.GREATER, new BinaryComparator("95007".getBytes()));
scan.setFilter(rowFilter);

复制代码

 1 public class HbaseFilterTest { 2  3     private static final String ZK_CONNECT_KEY = "hbase.zookeeper.quorum"; 4     private static final String ZK_CONNECT_VALUE = "hadoop1:2181,hadoop2:2181,hadoop3:2181"; 5  6     private static Connection conn = null; 7     private static Admin admin = null; 8      9     public static void main(String[] args) throws Exception {10         11         Configuration conf = HBaseConfiguration.create();12         conf.set(ZK_CONNECT_KEY, ZK_CONNECT_VALUE);13         conn = ConnectionFactory.createConnection(conf);14         admin = conn.getAdmin();15         Table table = conn.getTable(TableName.valueOf("student"));16         17         Scan scan = new Scan();18         19         Filter rowFilter = new RowFilter(CompareOp.GREATER, new BinaryComparator("95007".getBytes()));20         scan.setFilter(rowFilter);21         ResultScanner resultScanner = table.getScanner(scan);22         for(Result result : resultScanner) {23             List cells = result.listCells();24             for(Cell cell : cells) {25                 System.out.println(cell);26             }27         }28         29         30     }

复制代码

运行结果部分截图

2、列簇过滤器 FamilyFilter

Filter familyFilter = new FamilyFilter(CompareOp.EQUAL, new BinaryComparator("info".getBytes()));
scan.setFilter(familyFilter);

 View Code

3、列过滤器 QualifierFilter

Filter qualifierFilter = new QualifierFilter(CompareOp.EQUAL, new BinaryComparator("name".getBytes()));
scan.setFilter(qualifierFilter);

 View Code

4、值过滤器 ValueFilter

Filter valueFilter = new ValueFilter(CompareOp.EQUAL, new SubstringComparator("男"));
scan.setFilter(valueFilter);

 View Code

5、时间戳过滤器 TimestampsFilter

List list = new ArrayList<>();
list.add(1522469029503l);
TimestampsFilter timestampsFilter = new TimestampsFilter(list);
scan.setFilter(timestampsFilter);

 View Code

专用过滤器

1、单列值过滤器 SingleColumnValueFilter ----会返回满足条件的整行

SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(                "info".getBytes(), //列簇                "name".getBytes(), //列CompareOp.EQUAL, new SubstringComparator("刘晨"));//如果不设置为 true,则那些不包含指定 column 的行也会返回singleColumnValueFilter.setFilterIfMissing(true);
scan.setFilter(singleColumnValueFilter);

 View Code

2、单列值排除器 SingleColumnValueExcludeFilter

SingleColumnValueExcludeFilter singleColumnValueExcludeFilter = new SingleColumnValueExcludeFilter(                "info".getBytes(), "name".getBytes(), CompareOp.EQUAL, new SubstringComparator("刘晨"));
singleColumnValueExcludeFilter.setFilterIfMissing(true);scan.setFilter(singleColumnValueExcludeFilter);

 View Code

3、前缀过滤器 PrefixFilter----针对行键

PrefixFilter prefixFilter = new PrefixFilter("9501".getBytes());scan.setFilter(prefixFilter);

 View Code

4、列前缀过滤器 ColumnPrefixFilter

ColumnPrefixFilter columnPrefixFilter = new ColumnPrefixFilter("name".getBytes());scan.setFilter(columnPrefixFilter);

复制代码

 1 public class HbaseFilterTest2 { 2  3     private static final String ZK_CONNECT_KEY = "hbase.zookeeper.quorum"; 4     private static final String ZK_CONNECT_VALUE = "hadoop1:2181,hadoop2:2181,hadoop3:2181"; 5  6     private static Connection conn = null; 7     private static Admin admin = null; 8      9     public static void main(String[] args) throws Exception {10         11         Configuration conf = HBaseConfiguration.create();12         conf.set(ZK_CONNECT_KEY, ZK_CONNECT_VALUE);13         conn = ConnectionFactory.createConnection(conf);14         admin = conn.getAdmin();15         Table table = conn.getTable(TableName.valueOf("student"));16         17         Scan scan = new Scan();18         19         ColumnPrefixFilter columnPrefixFilter = new ColumnPrefixFilter("name".getBytes());20         21         scan.setFilter(columnPrefixFilter);22         ResultScanner resultScanner = table.getScanner(scan);23         for(Result result : resultScanner) {24             List cells = result.listCells();25             for(Cell cell : cells) {26                 System.out.println(Bytes.toString(cell.getRow()) + "\t" + Bytes.toString(cell.getFamily()) + "\t" + Bytes.toString(cell.getQualifier())27                 + "\t" + Bytes.toString(cell.getValue()) + "\t" + cell.getTimestamp());28             }29         }30         31         32     }33     34     35 }

复制代码

5、分页过滤器 PageFilter

hbase scan超时设置_HBase学习之路 (六)过滤器相关推荐

  1. hbase scan超时设置_hbase scan超时问题

    下面是异常信息: 2018-11-08 16:55:52,361 INFO [main] org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl ...

  2. hbase scan超时设置_如何在优化生产环境的hbase

    hbase 是hadoop生态圈的一员,在数据服务应用中具有举足轻重的地位,我们当然有必要掌握,hbase日常的大部分应用在数据查询服务中,因此查询的时候必然涉及到scan操作,因此在建表的时候就要对 ...

  3. hbase scan超时设置_深入浅出HBase系列(二)

    今天来讲讲HBase读的过程: 1.HBase读过程详解 2.1影响HBase读取命令的参数 HBase读包含两种命令:get ,基于确切的RowKey去获取一行数据,通常被称之为随机点查:scan, ...

  4. hbase 修改表名_HBase学习——2.HBase原理

    1.系统架构 1.1 图解 从HBase的架构图上可以看出,HBase中的组件包括Client.Zookeeper.HMaster.HRegionServer.HRegion.Store.MemSto ...

  5. netty socket超时设置_Netty 学习和进阶策略

    背景 Netty 框架的特点 Netty 的一个特点就是入门相对比较容易,但是真正掌握并精通是非常困难的,原因有如下几个: 涉及的知识面比较广:Netty 作为一个高性能的 NIO 通信框架,涉及到的 ...

  6. ios7学习之路六(隐藏状态栏 )

    方法一(代码设置): 现在ios7已经更改为透明,并且不占用屏幕高度.其中隐藏及显示的方法如下: 在uiviewcontroller的子类下,调用: if ([self respondsToSelec ...

  7. android学习之路(六)---- 图片加载库的优化、封装

    封装Image-Loader 一.背景         universal-image-loader是一项伟大的开源项目,作者在其中运用到的软件工程解决办法让人印象深刻,在本篇文章的开篇,首先向uni ...

  8. 【HBase学习之四】HBase Client超时机制优化

    生产服务遇到过一个故障,大体来说就是hbase集群故障,在没有设置hbase客户端超时的情况下,导致大量线程阻塞,从而影响了tomcat对其他服务请求的正常响应(504网关超时,超时率30%),需要规 ...

  9. 数据分析与爬虫实战视频——学习笔记(一)(python基础、urllib、超时设置、自动模拟HTTP请求、异常处理、浏览器伪装、代理服务器、新闻爬虫、淘宝登陆和图片爬取)

    未经允许,请勿转载. 连载未完成状态 网址: [数据挖掘]2019年最新python3 数据分析与爬虫实战_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili ...

最新文章

  1. Srping Boot日志输出(转)
  2. netty web 容器_Netty 实战:如何编写一个麻小俱全的 web 框架
  3. svchost.exe启动服务原理
  4. php-ast 开源,PHP AST学习 - osc_ryjlu6z2的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. 试了试Docker桌面应用自带的K8s集群,一个字“简单”
  6. 江苏大学计算机学院宋美如,姜震-江苏大学计算机科学与通信工程学院
  7. batchplot放到哪个文件夹_Batchplot使用技巧,转换CAD图纸格式并实现批量打印
  8. 抖音短视频内容理解和推荐算法
  9. 【POJ2559】Largest Rectangle in a Histogram(单调栈)
  10. android wifi 信道,WiFi不稳定经常断?手机WiFi信道小工具【图】_Android资讯_太平洋电脑网...
  11. Enco free2 固件降级详解
  12. 解决nginx 503 Service Temporarily Unavailable 方法
  13. 高考2021加3科目成绩查询,官方解读:2021新高考实施方案正式公布,首选科目按原始分计入总成绩!...
  14. python保存视频中的每一帧
  15. 关于网络渗透的过程以及感想记录
  16. Smoke Loader、AZORult木马通过虚假海啸警报传播到了日本
  17. python代码中 from . import ××× 是什么意思?
  18. pycharm创建django项目及开发初准备
  19. 数学建模笔记 day-03
  20. VS2005编译器选项

热门文章

  1. ubuntu16.04安装lua环境
  2. 数据操作string
  3. 多任务实现-协程(python 版)
  4. 使用idea本地运行mapreduce程序,控制台log4j日志没有打印出来,可以这样解决
  5. 【CCF】201709-1打酱油
  6. SQL Server2008创建约束图解 唯一性约束
  7. ReportViewer教程(11)-给报表特定的内容设置颜色
  8. [NLP]基于IMDB影评情感分析之BERT实战-测试集上92.24%
  9. php 文件上传mime 类型,PHP JAVA C上传文件如何准确判断文件类型-mime知识普及
  10. php实现中英文网站插件,php官网英文自动跳中文