Hbase在操作数据中的基本的API,包括增删查。增删都是相对简单的操作,与传统的RDBMS相比,这里的查询操作略显苍白,只能根据特定的主键查询(Get)或者根据主键的一个范围来查询(Scan)。Hbase提供了更加高级的过滤器来查询,当然还有另外一些高级的模块,我们将在这一篇里看到。
一、过滤器(Filter)
基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter。Filter可以根据簇、列、版本等更多的条件来对数据进行过滤,基于Hbase本身提供的三维有序(主键有序、列有序、版本有序),这些Filter可以高效的完成查询过滤的任务。带有Filter条件的RPC查询请求会把Filter分发到各个RegionServer,是一个服务器端(Server-side)的过滤器,这样也可以降低网络传输的压力。
要完成一个过滤的操作,至少需要两个参数。一个是抽象的操作符,Hbase提供了枚举类型的变量来表示这些抽象的操作符:LESS/LESS_OR_EQUAL/EQUAL/NOT_EUQAL等;另外一个就是具体的比较器(Comparator),代表具体的比较逻辑,如果可以提高字节级的比较、字符串级的比较等。有了这两个参数,我们就可以清晰的定义筛选的条件,过滤数据。
CompareFilter(CompareOp compareOp, WritableByteArrayComparable valueComparator)
CompareFilter是高层的抽象类,下面我们将看到它的实现类和实现类代表的各种过滤条件。这里实现类实际上代表的是参数中的过滤器过滤的内容,可以使主键、簇名、列值等,这就是由CompareFilter决定了。
行过滤器(RowFilter)
行过滤器的比较对象是行主键
Scan scan = new Scan();
Filter filter1 = new RowFilter(CompareFIlter.CompareOp.LESS_OR_EUQAL, new BinaryComparator(Bytes.toBytes("hello")));
scan.setFilter(filter1);
scan.close();
例中的Filter会将所有的小于等于“Hello”的主键过滤出来。
簇过滤器(FamilyFilter)
簇过滤器过滤的是簇的名字。
列过滤器(QualifierFilter)
列过滤器过滤的是列的名字。
值过滤器(ValueFilter)
值过滤器过滤的是扫描对象的值。
单值过滤器(SingleColumnValueFilter)
单值过滤器是以特定列的值为过滤内容,与值过滤器不同的是,这里是特定的列,而值过滤器比较的是行内的所有列。所有在使用单值过滤器的时候要指定比较的列的坐标。
SingleColumnValueFilter(byte[] family, byte[] qualifier, CompareOp compareOp, WritableByteArrayComparable comparator)
对于找不到该列的行,可以有特殊的处理
void setFilterIfMissing(boolean filterIfMissing)
默认缺省行将被包含进过滤的结果集中。
前缀过滤器(PrefixFilter)
前缀过滤器将会过滤掉不匹配的记录,过滤的对象是主键的值。
PrefixFilter(byte[] prefix)
页过滤器(PageFilter)
页过滤器可以根据主键有序返回固定数量的记录,这需要客户端在遍历的时候记住页开始的地方,配合scan的startkey一起使用。
PageFilter(int size)
键过滤器(KeyOnlyFilter)
键过滤器可以简单的设置过滤的结果集中只包含键而忽略值,这里有一个选项可以把结果集的值保存为值的长度。
FirstKeyOnlyFilter
在键过滤器的基础上,根据列有序,只包含第一个满足的键。
ColumnPrefixFilter
这里过滤的对象是列的值。
TimestampsFilter
TimestampsFilter(List<Long> times)
这里参数是一个集合,只有包含在集合中的版本才会包含在结果集中。
包装类过滤器,此类过滤器要通过包装其他的过滤器才有意义,是其他过滤器的一种加强。
SkipFilter
SkipFilter(Filter filter)
过滤器集合(FilterList)
Hbase的过滤器设计遵照于设计模式中的组合模式,以上的所有过滤器都可以叠加起来共同作用于一次查询。
相关推荐
- `bloomFilter`和`scope`: 分别是布隆过滤器类型和列的复制范围。 5. **HBase Shell常用命令**: HBase Shell提供了与HBase交互的命令行工具,包括创建表、删除表、插入数据、查询数据等操作。例如: - `create...
3. **查询数据**: 使用Get操作根据行键获取数据,或Scan操作进行范围查询,还可以通过过滤器进一步筛选结果。 4. **更新与删除数据**: 更新数据通常是插入新版本,删除数据则可以通过Delete操作指定行键、列族、列...
6. **实时查询和性能优化**:HBase支持的过滤器、扫描器,以及如何通过索引和布隆过滤器提升查询性能。 7. **监控和故障恢复**:使用HBase的监控工具监控系统状态,以及如何处理Region Server故障。 8. **实战应用**...
总结,这份资料集为学习和使用HBase提供了一条清晰的路径,从基础安装到源码解析,再到实战演练,覆盖了HBase学习的全过程。通过深入学习,你可以更好地驾驭这个强大的大数据存储系统,应对日益增长的数据处理需求。
通过阅读“HBase java api学习笔记.docx”,你将进一步了解这些概念和API的使用细节,结合“HBaseClientDemo”进行实践,将有助于加深对HBase客户端操作的理解。在大数据处理和分析项目中,熟练掌握HBase Java API...
这需要掌握数据挖掘、机器学习算法如协同过滤或基于内容的推荐。 5. **安全性与隐私保护**:云笔记的私有笔记管理可能采用了权限控制和加密技术,确保用户数据的安全和私密性。例如,使用OAuth2.0进行身份验证,或...
2. **扫描器(Scanner)**:用于高效地批量读取数据,可以根据条件进行数据过滤。 3. **Compaction**:HBase定期进行合并操作(Minor Compaction和Major Compaction),减少文件碎片并优化空间利用率。 4. **...
在大数据处理中,Flume 作为数据收集器扮演着关键角色,它能够从各种数据源高效地抽取数据,然后将这些数据传输到存储系统或者分析工具中,如Hadoop HDFS或Kafka。本笔记将深入探讨Flume的核心概念、配置和实际应用...
本笔记整理主要涵盖了2022年3月16日的学习内容,旨在深入理解和掌握Spark的核心概念和功能。 Spark的核心理念是内存计算,它通过将数据存储在内存中,从而减少了磁盘I/O,提高了数据处理速度。这一特性使得Spark比...