`
yousky027
  • 浏览: 4623 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于HBase过滤器[转]

 
阅读更多
过滤数据
到现在为止你了解到HBase拥有灵活的逻辑模式和简单的物理模型,它们允许应用系统的计算工作更接近硬盘和网络,并在这个层次进行优化。设计有效的模式是使用HBase的一个方面,你已经掌握了一堆概念用来做到这点。你可以设计行键以使访问的数据在硬盘上也存放在一起,所以读写操作时可以节省硬盘寻道时间。在读取数据时,你经常需要基于某种标准进行操作,你可以进一步优化数据访问。过滤器就是在这种情况下使用的一种强大的功能。
我们还没有谈到使用过滤器的真实使用场景;一般来说调整表设计就可以优化访问模式。但是有时你已经把表设计调整得尽可能好了,为不同访问模式优化得尽可能好了。当你仍然需要减少返回客户端的数据时,这就是考虑使用过滤器的时候了。有时侯过滤器也被称为下推判断器(push-down predicates),支持你把数据过滤标准从客户端下推到服务器(如图4.16)。这些过滤逻辑在读操作时使用,对返回客户端的数据有影响。这样通过减少网络传输的数据来节省网络IO。但是数据仍然需要从硬盘读进RegionServer,过滤器在RegionServer里发挥作用。因为你有可能在HBase表里存储大量数据,网络IO的节省是有重要意义的,并且先读出全部数据送到客户端再过滤出有用的数据,这种做法开销很大。
图 4.16 在客户端完成数据过滤:从RegionServer把数据读取到客户端,在客户端使用过滤器逻辑处理数据;或者在服务器端完成数据过滤:把过滤逻辑下推到RegionServer,因此减少了在网络上传输到客户端的数据量。实质上过滤器节省了网络IO的开销,有时甚至是硬盘IO的开销。
HBase提供了一个API,你可以用来实现定制过滤器。多个过滤器也可以捆绑在一起使用。可以在读过程最开始的地方,基于行健进行过滤处理。此后,也可以基于HFile读出的KeyValues进行过滤处理。过滤器必须实现HBase Jar包中的Filter接口,或者继承扩展一个实现了该接口的抽象类。我们推荐继承扩展FilterBase抽象类,这样你不需要写样板代码。继承扩展其他诸如CompareFilter类也是一个选择,同样可以正常工作。当读取一行时该接口有下面的方法在多个地方可以调用(顺序如图4.17)。它们总是按照下面描述的顺序来执行:
1 这个方法第一个被调用,基于行健执行过滤:
boolean filterRowKey(byte[] buffer, int offset, int length)
基于这里的逻辑,如果行被过滤掉了(不出现在发送结果集合里)返回true,否则如果发送给客户端则返回false。
2 如果该行没有在上一步被过滤掉,接着调用这个方法处理当前行的每个KeyValue对象:
ReturnCode filterKeyValue(KeyValue v)
这个方法返回一个ReturnCode,这是在Filter接口中定义的一个枚举(enum)类型。返回的ReturnCode判断某个KeyValue对象发生了什么。
3 在第2步过滤KeyValues对象后,接着是这个方法:
void filterRow(List kvs)
这个方法被传入成功通过过滤的KeyValue对象列表。倘若这个方法访问到这个列表,此时你可以在列表里的元素上执行任何转换或运算。
4 如果你选择过滤掉某些行,此时这个方法再一次提供了这么做的机会:
boolean filterRow()
过滤掉考虑中的行,则返回true。
5 你可以在过滤器里构建逻辑来提早停止一次扫描。你可以把该逻辑放进这个方法:
boolean filterAllRemaining()
当你扫描很多行,在行健、列标识符或单元值里查找指定东西时,一旦找到目标,你就不再关心剩下的行了。此时这个方法用起来很方便。这是过滤流程中最后调用的方法。
图 4.17 过滤流程的各个步骤。扫描器对象扫描范围里的每行都会执行这个流程。
另一个有用的方法是reset()。它会重置过滤器,在被应用到整行后由服务器调用。
注意 这个API很强大,但是我们不觉得它是在应用系统里大量使用的。许多情况下,如果模式设计改变了,使用过滤器的需求也会改变。
分享到:
评论

相关推荐

    Hadoop学习四十二:HBase 过滤器

    HBase过滤器允许我们在读取数据时对结果进行筛选,减少不必要的I/O操作,从而提高效率。它们是通过实现`Filter`接口来定义的,并在扫描器(Scanner)执行时应用。HBase提供了多种内置过滤器,如...

    Hbase过滤器详解.md

    Hbase过滤器详解,基础篇

    hbase过滤器简单教程

    过滤器可以根据列族、列、版本等更多的条件来对数据进行过滤,基于 HBase 本身提供的三维有序(行键,列,版本有序),这些过滤器可以高效地完成查询过滤的任务,带有过滤器条件的 RPC 查询请求会把过滤器分发到各个...

    HBase 过滤器操作-大数据实验二

    内容概要:本文档介绍了在大数据处理与存储实验中如何利用HBase的不同过滤器实现数据的精确检索,涵盖了从简单的行键过滤到复杂的值过滤以及多种复合型过滤器的应用。文档详细解释了各类过滤器的功能及其应用场景,...

    java操作Hbase之Hbase专用过滤器PageFilter的使用源代码

    HBase提供了多种过滤器机制,其中PageFilter是一种非常实用的工具,它可以帮助我们在查询时限制返回的结果数量,从而优化性能和内存使用。下面我们将深入探讨PageFilter的使用方法,并通过源代码示例来解释其工作...

    java操作Hbase之比较过滤器RowFilter的使用源码

    本文将深入探讨HBase的比较过滤器RowFilter的使用源码,帮助你理解如何在实际项目中应用这一关键功能。 RowFilter是HBase提供的过滤器之一,它允许我们根据行键(row key)来过滤表中的数据。在Java API中,我们...

    Hbase布隆过滤器详解

    布隆过滤器是一种高效的空间节约型数据结构,用于判断一个元素是否可能存在于一个大型集合中。它由布隆于1970年提出,主要利用了位数组和多个哈希函数来实现。基本思想是通过将元素经过多个独立的哈希函数映射到一个...

    HBASE使用注意事项

    通过对HBase的使用注意事项进行深入分析,我们了解到在表设计阶段应当重视RowKey的设计及其对数据分布的影响,同时还需要考虑压缩算法、过滤器的选择以及版本控制等因素。此外,对于Java API的使用也需要注意资源...

    Hbase数据库界面管理器

    3. 查询过滤:支持多种过滤器查询是HBase数据库界面管理器的一大亮点。用户可以使用行键、列族、列限定符和时间戳等条件组合,构建复杂的查询语句,快速定位所需数据。 4. 导入导出:工具提供数据导入和导出功能,...

    hbase 表设计

    HBase还提供了过滤器来优化查询,例如单列值过滤器、列前缀过滤器、分页过滤器等,这些过滤器可以在服务器端执行,从而减少了不必要的数据传输。 压缩是HBase表设计时的另一个重要考虑因素。通过压缩可以减少存储...

    hbase1.0.3_part2

    4. **HBase的过滤器机制**:过滤器是HBase查询性能优化的关键。通过使用行过滤器、列过滤器、时间戳过滤器等,可以在服务器端提前过滤掉不需要的数据,减少网络传输和客户端处理的压力。 5. **HBase的MapReduce支持...

    HBase视频教程下载|基于微博数据应用的HBase实战开发

    课时8:过滤器实战之专用过滤器与FilterList 课时9:过滤器实战之自定义过滤器 课时10:Observer协处理器实战之Master级别原理剖析 课时11:Observer协处理器实战之Region级别原理剖析 课时12:Observer协处理器...

    hbase分页查询实现.pdf

    Filter是HBase中的一种过滤器,用于过滤查询结果。在本文中,作者使用了FirstKeyOnlyFilter和SingleColumnValueFilter来实现分页查询。 知识点7:ResultScanner的使用 ResultScanner是HBase中的一种结果扫描器,...

    (转)HBase技术介绍

    同时,HBase支持过滤器,可以进一步优化查询效率。HBase还支持Secondary Index,虽然不如传统关系型数据库那样完善,但可以通过 Coprocessors 或者索引服务如 phoenix 来实现。 在实际应用中,HBase常用于日志分析...

    Hbase shell及常用命令

    HBase过滤器可以根据条件过滤数据。例如,使用RowFilter过滤器来过滤Student表中的数据: scan 'Student', FILTER => "RowFilter(=, 'binary:0001')" HBase行键过滤器 ------------------ HBase行键过滤器用于...

    HBase官方文档中文版-HBase手册中文版

    2. 扫描器(Scanner):用于批量读取数据,支持设定条件过滤。 3. 表的分区与负载均衡:通过调整Region大小和分布,实现集群负载均衡。 五、HBase性能优化 1. 行键设计:优化行键设计,避免热点问题,确保数据均匀...

    使用Hbase协作器(Coprocessor)同步数据到ElasticSearch(hbase 版本 1.2.0-cdh5.8.0, es 2.4.0 版本)

    4. **处理数据**:根据业务需求,可能需要对HBase中的数据进行转换或过滤,以适应Elasticsearch的索引结构。例如,处理HBase的行键和列族,转换为Elasticsearch的文档ID和字段。 5. **错误处理和重试策略**:由于...

    hbase-2.4.17-bin 安装包

    3. 查询数据:`get '表名', '行键'`获取整行数据,或`scan '表名'`进行全表扫描,可以指定过滤器等条件。 4. 删除数据:`delete '表名', '行键', '列族:列限定符', [时间戳]`删除特定单元格,可选时间戳指定版本。 ...

Global site tag (gtag.js) - Google Analytics