Hbase 学习(二)各种filter
2023-09-14 09:00:24 时间
今天的主题是Filter,hbase客户端查询的时候,自定义查询filter。
直接上例子吧,不多说别的了,第一个例子是RowFilter的。
HBase Filter 过滤器之 Comparator 原理及源码学习 HBase所有的比较器实现类都继承于父类ByteArrayComparable,而ByteArrayComparable又实现了Comparable接口;不同功能的比较器差别在于对父类compareTo()方法的重写逻辑不同。 下面分别对HBase Filter默认实现的七大比较器一一进行介绍。 1. BinaryComparator 介绍:二进制比较器,用于按字典顺序比较指定字节数组。 先看一个小例子: public class BinaryComparatorDemo { public static void main(String[] args) {
HBase Filter 过滤器之RowFilter详解 前言:本文详细介绍了HBase RowFilter过滤器Java&Shell API的使用,并贴出了相关示例代码以供参考。RowFilter 基于行键进行过滤,在工作中涉及到需要通过HBase Rowkey进行数据过滤时可以考虑使用它。比较器细节及原理请参照之前的更文:HBase Filter 过滤器之比较器 Comparator 原理及源码学习 一。Java Api public class RowFilterDemo { private static boolean isok = false; private static String tableName
1元包年,阿里云HBase Serverless开启大数据学习与测试的新时代 阿里云HBase Serverless 版是基于HBase,使用Serverless架构构建的一套新型的HBase 服务。 阿里云HBase Serverless版真正把HBase变成了一个服务,用户无需提前规划资源,选择CPU,内存资源数量,购买集群。在应对业务高峰,业务空间增长时,也无需进行扩容
HBase全网最佳学习资料汇总 HBase这几年在国内使用的越来越广泛,在一定规模的企业中几乎是必备存储引擎,互联网企业阿里巴巴、京东、小米都有数千台的HBase集群,中国电信的话单、中国人寿的保单都是存储在HBase中。注意大公司有数十个数百个HBase集群,此点跟Hadoop集群很不相同。
hive_学习_02_hive整合hbase(失败) 一、前言 本文承接上一篇:hive_学习_01_hive环境搭建(单机) ,主要是记录 hive 整合hbase的流程 二、环境准备 1.环境准备 操作系统 : linux CentOS 6.
hbase_学习_01_HBase环境搭建(单机) 一、前言 本文承接上一篇:hadoop_学习_02_Hadoop环境搭建(单机) ,主要是搭建HBase的单机环境 二、环境准备 hbase 的下载来源有: 官方版本:http://archive.apache.org/dist/hbase/ CDH版本:http://archive.cloudera.com/cdh5 企业应用一般选择CDH版本,因为比较稳定。
第十二届 BigData NoSQL Meetup — 基于hbase的New sql落地实践 立即下载
Scan scan = new Scan(); scan.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("col-0")); Filter filter1 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("row-22"))); scan.setFilter(filter1); ResultScanner scanner1 = table.getScanner(scan); for (Result res : scanner1) { System.out.println(res); scanner1.close(); Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator(".*-.5")); scan.setFilter(filter2); ResultScanner scanner2 = table.getScanner(scan); for (Result res : scanner2) { System.out.println(res); scanner2.close(); Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("-5")); scan.setFilter(filter3); ResultScanner scanner3 = table.getScanner(scan); for (Result res : scanner3) { System.out.println(res); scanner3.close();第二个例子是QualifierFilter的
Filter filter = new QualifierFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("col-2"))); Scan scan = new Scan(); scan.setFilter(filter); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { System.out.println(result); scanner.close(); Get get = new Get(Bytes.toBytes("row-5")); get.setFilter(filter); Result result = table.get(get);第三个例子是ValueFilter
Filter filter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator(".4")); Scan scan = new Scan(); scan.setFilter(filter); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { for (KeyValue kv : result.raw()) { System.out.println("KV: " + kv + ", Value: " + Bytes.toString(kv.getValue())); scanner.close(); Get get = new Get(Bytes.toBytes("row-5")); get.setFilter(filter); Result result = table.get(get); for (KeyValue kv : result.raw()) { System.out.println("KV: " + kv + ", Value: " + Bytes.toString(kv.getValue())); }第四个例子是PageFilter,分页的filter
Filter filter = new PageFilter(15); int totalRows = 0; byte[] lastRow = null; while (true) { Scan scan = new Scan(); scan.setFilter(filter); if (lastRow != null) { byte[] startRow = Bytes.add(lastRow, POSTFIX); System.out.println("start row: " +Bytes.toStringBinary(startRow)); scan.setStartRow(startRow); ResultScanner scanner = table.getScanner(scan); int localRows = 0; Result result; while ((result = scanner.next()) != null) { System.out.println(localRows++ + ": " + result); totalRows++; lastRow = result.getRow(); scanner.close(); if (localRows == 0) break; System.out.println("total rows: " + totalRows);第五个例子是InclusiveStopFilter,它是什么意思呢,就是扫描到某个rowkey就停止,下面的例子是从row-3开始扫描,一直扫描到row-5结束。
Filter filter = new InclusiveStopFilter(Bytes.toBytes("row-5")); Scan scan = new Scan(); scan.setStartRow(Bytes.toBytes("row-3")); scan.setFilter(filter); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { System.out.println(result); scanner.close();第六个SingleColumnValueFilter,这个是我们最常用的filter,我觉得很好用。
SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("colfam1"), Bytes.toBytes("col-5"), CompareFilter.CompareOp.NOT_EQUAL, new SubstringComparator("val-5")); filter.setFilterIfMissing(true); Scan scan = new Scan(); scan.setFilter(filter); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { for (KeyValue kv : result.raw()) { System.out.println("KV: " + kv + ", Value: " + Bytes.toString(kv.getValue())); scanner.close(); Get get = new Get(Bytes.toBytes("row-6")); get.setFilter(filter); Result result = table.get(get); System.out.println("Result of get: "); for (KeyValue kv : result.raw()) { System.out.println("KV: " + kv + ", Value: " + Bytes.toString(kv.getValue())); }第七个FilterList,它有两个选项,需要全部通过,还是一个通过就行,MUST_PASS_ALL,MUST_PASS_ONE。
public class CustomFilter extends FilterBase { private byte[] value = null; private boolean filterRow = true; public CustomFilter() { super(); public CustomFilter(byte[] value) { this.value = value; @Override public void reset() { this.filterRow = true; @Override public ReturnCode filterKeyValue(KeyValue kv) { if (Bytes.compareTo(value, kv.getValue()) == 0) { filterRow = false; return ReturnCode.INCLUDE; @Override public boolean filterRow() { return filterRow; @Override public void write(DataOutput dataOutput) throws IOException { Bytes.writeByteArray(dataOutput, this.value); @Override public void readFields(DataInput dataInput) throws IOException { this.value = Bytes.readByteArray(dataInput); }这里要讲的是自定义filter,从FilterBase继承。
public class CustomFilter extends FilterBase { private byte[] value = null; private boolean filterRow = true; public CustomFilter() { super(); public CustomFilter(byte[] value) { this.value = value; @Override public void reset() { this.filterRow = true; @Override public ReturnCode filterKeyValue(KeyValue kv) { if (Bytes.compareTo(value, kv.getValue()) == 0) { filterRow = false; return ReturnCode.INCLUDE; @Override public boolean filterRow() { return filterRow; @Override public void write(DataOutput dataOutput) throws IOException { Bytes.writeByteArray(dataOutput, this.value); @Override public void readFields(DataInput dataInput) throws IOException { this.value = Bytes.readByteArray(dataInput); }然后打成jar包,要在hbase-env.sh中指明路径。 export HBASE_CLASSPATH="/hbase/target/hbase-customfilter.jar",然后就可以在客户端中使用它了。
HBase Filter 过滤器之 Comparator 原理及源码学习 HBase所有的比较器实现类都继承于父类ByteArrayComparable,而ByteArrayComparable又实现了Comparable接口;不同功能的比较器差别在于对父类compareTo()方法的重写逻辑不同。 下面分别对HBase Filter默认实现的七大比较器一一进行介绍。 1. BinaryComparator 介绍:二进制比较器,用于按字典顺序比较指定字节数组。 先看一个小例子: public class BinaryComparatorDemo { public static void main(String[] args) {
HBase Filter 过滤器之RowFilter详解 前言:本文详细介绍了HBase RowFilter过滤器Java&Shell API的使用,并贴出了相关示例代码以供参考。RowFilter 基于行键进行过滤,在工作中涉及到需要通过HBase Rowkey进行数据过滤时可以考虑使用它。比较器细节及原理请参照之前的更文:HBase Filter 过滤器之比较器 Comparator 原理及源码学习 一。Java Api public class RowFilterDemo { private static boolean isok = false; private static String tableName
1元包年,阿里云HBase Serverless开启大数据学习与测试的新时代 阿里云HBase Serverless 版是基于HBase,使用Serverless架构构建的一套新型的HBase 服务。 阿里云HBase Serverless版真正把HBase变成了一个服务,用户无需提前规划资源,选择CPU,内存资源数量,购买集群。在应对业务高峰,业务空间增长时,也无需进行扩容
HBase全网最佳学习资料汇总 HBase这几年在国内使用的越来越广泛,在一定规模的企业中几乎是必备存储引擎,互联网企业阿里巴巴、京东、小米都有数千台的HBase集群,中国电信的话单、中国人寿的保单都是存储在HBase中。注意大公司有数十个数百个HBase集群,此点跟Hadoop集群很不相同。
hive_学习_02_hive整合hbase(失败) 一、前言 本文承接上一篇:hive_学习_01_hive环境搭建(单机) ,主要是记录 hive 整合hbase的流程 二、环境准备 1.环境准备 操作系统 : linux CentOS 6.
hbase_学习_01_HBase环境搭建(单机) 一、前言 本文承接上一篇:hadoop_学习_02_Hadoop环境搭建(单机) ,主要是搭建HBase的单机环境 二、环境准备 hbase 的下载来源有: 官方版本:http://archive.apache.org/dist/hbase/ CDH版本:http://archive.cloudera.com/cdh5 企业应用一般选择CDH版本,因为比较稳定。
第十二届 BigData NoSQL Meetup — 基于hbase的New sql落地实践 立即下载
相关文章
- HBase性能调优
- hbase学习 rowKey的设计-4
- hbase 单机+伪分布环境搭建学习-1
- 【原创】大叔问题定位分享(13)HBase Region频繁下线
- Hbase 学习(五) 调优
- Hbase 学习(十一)使用hive往hbase当中导入数据
- hbase 学习(十三)集群间备份原理
- HBase timestamp(version)
- HBase 2.X版本的元数据修复及一种数据迁移方式
- 【收藏】HBase集成Phoenix实现类SQL操作hbase
- hbase 过滤器属性及其兼容性
- [转]缓慢但胜在稳健,HBase大势已成
- BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略
- hbase学习(一)hbase简介
- Hbase启动hbase shell运行命令报Class path contains multiple SLF4J bindings.错误
- HBase应用快速学习
- HBase学习(十四)LINUX下用Eclipse构建HBase开发环境
- hbase-default.xml 默认文件
- HBase(5):HBase进阶