`
zy19982004
  • 浏览: 661764 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:251946
社区版块
存档分类
最新评论

Hadoop学习四十二:HBase 过滤器

 
阅读更多

一.概述

  1. 客户端创建包含过滤器Filter的Scan。
  2. Scan通过RPC被发送给RegionServer,在服务器端执行过滤操作。
  3. Scan的作用域是region,所以一个RegionServer有多个region的话,Scan将被发送到每个region。

 

二.Filter工作流程

 

     你必须知道的是,HBase里的一行数据对应一或者多个KeyValue。再来看看流程。

  1. boolean fiterRowKey(byte[] buffer, int offset, int length):检查rowkey。返回true代表被过滤掉,false进入下个方法。
  2. ReturnCode fiterKeyValue(KeyValue v):检查rowkey下特定的某一个KeyValue。它有五种返回值,常见的ReturnCode.INCLUDE代表结果中包含这个KeyValue,Skip代表不包含,继续下处理一个KeyValue。
  3. void filterRow(List<KeyValue> ignored):ignored是2里面被过滤掉的KeyValue集合。
  4. boolean filterRow():返回true代表过滤掉当前行。
  5. void reset():迭代每一个新的RowKey(步骤1)前调用此方法。
  6. boolean filterAllRemaining():返回true时代表终止整个扫描操作。如用户找到了需要的所有数据,就在这里可以返回true。

三.例子

      说这么多,不如一个实际的例子来的方便。

      用户表rowkey为用户名称,cf:age代表年龄,cf:pw代表密码。现在需要找出用户,有三个限制条件

  1. 看到zzy这个用户直接pass,因为它是个技术狂人酷
  2. 找出密码长度小于4的用户,用户信息不需要包含pw列。
  3. 只找出满足上述条件的两个用户。
    public class PasswordStrengthFilter extends FilterBase {
    	
    	private int len;
    	private int limit;
    	private int rowsAccepted = 0;
    	private boolean filterRow = false;
    
    	public PasswordStrengthFilter() {
    		super();
    	}
    
    	public PasswordStrengthFilter(int len, int limit) {
    		this.len = len;
    		this.limit = limit;
    	}
    
    	@Override
    	public boolean filterRowKey(byte[] buffer, int offset, int length) {
    		String rowkey = Bytes.toString(buffer, offset, length);
    		boolean iszzy = rowkey.equals("zzy");
    		return iszzy;
    	}
    
    	public ReturnCode filterKeyValue(KeyValue v) {
    		if (Bytes.toString(v.getQualifier()).equals("pw")) {
    			if (v.getValueLength() >= len) {
    				this.filterRow = true;
    			}
    			return ReturnCode.SKIP;
    		}
    		return ReturnCode.INCLUDE;
    	}
    
    	@Override
    	public void filterRow(List<KeyValue> ignored) {
    	}
    	
    	public boolean filterRow() {
    		if(!filterRow){
    			rowsAccepted ++ ;
    		}
    		return this.filterRow;
    	}
    	
    	@Override
    	public boolean filterAllRemaining() {
    		return rowsAccepted >= limit;
    	}
    
    	public void reset() {
    		this.filterRow = false;
    	}
    
    	public void write(DataOutput out) throws IOException {
    		out.writeInt(len);
    		out.writeInt(limit);
    	}
    
    	public void readFields(DataInput in) throws IOException {
    		this.len = in.readInt();
    		this.limit = in.readInt();
    	}
    	
    	public static String getShortDes(KeyValue kv){
    		return "KeyValue["+Bytes.toString(kv.getRow()) + "\t" + Bytes.toString(kv.getFamily()) + ":" + Bytes.toString(kv.getQualifier()) + "=" + Bytes.toString(kv.getValue())+"]";
    	}
    }
     

     new PasswordStrengthFilter(4, 2)的测试结果:请各位自己分析下每一行,每一个KeyValue是怎么被fiter处理的。

input:
addData("david", TN, "age", "12");
addData("david", TN, "pw", "p1");
addData("zzy", TN, "age", "13");
addData("zzy", TN, "pw", "p2");
addData("zzz", TN, "age", "18");
addData("zzz", TN, "pw", "p456");
addData("zzzz", TN, "age", "18");
addData("zzzz", TN, "pw", "p4");
addData("zzzzz", TN, "age", "11");
addData("zzzzz", TN, "pw", "p6");

output:
KeyValue[david	cf:age=12]
KeyValue[zzzz	cf:age=18]

      

 

四.总结

  1. 一般返回true代表被过滤掉。
  2. 一个region上的所有数据共享一个Filter,并不是每来一行数据就new一个Filter来处理。所以例子中的rowsAccepted得以生效,变量filterRow的状态需要重置。

 

     附件为测试代码和一个根据rowkey分页的RowPaginationFilter

 

 

 

  • src.rar (2.6 KB)
  • 下载次数: 36
2
0
分享到:
评论
1 楼 107x 2015-05-19  
写得不错,谢谢!

相关推荐

    HBase权威指南_Hadoop权威指南_pdf_

    8. **索引和查询优化**:虽然HBase主要依赖Row Key进行查询,但可以通过Secondary Index或布隆过滤器实现更复杂的查询优化。 9. **备份与恢复**:HBase提供了快照功能,可以定期创建数据快照,用于灾难恢复或数据...

    大数据全套安装包:包括hadoop-3.1.1、hbase-2.2.3、hive-3.1.2、zookeeper-3.5.6

    此外,熟悉YARN(Yet Another Resource Negotiator)资源调度器的配置和使用也是必要的,因为Hadoop 3.x版本默认使用YARN作为任务调度器。 总的来说,这个压缩包提供了一整套大数据处理环境,涵盖了从数据存储到...

    完整版大数据云计算课程 Hadoop数据分析平台系列课程 Hadoop 07 Hbase 共49页.rar

    6. **索引和过滤器**:HBase支持索引和过滤器,以提高查询效率和数据筛选能力。 7. **HBase与Hadoop的集成**:HBase可以与Hadoop的其他组件(如Hive、Pig等)无缝集成,进行复杂的数据分析和处理。 学习这个课程,...

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

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

    hbase-hadoop+database系统入门书籍

    - **高级功能**:HBase还提供了更多的高级功能,如过滤器(Filter)、批量操作(Batch)、观察者(Observer)等。 ### 面向的目标受众 该教程主要面向以下几类人群: - **希望从事大数据分析领域的专业人士**:包括软件...

    hadoop 3.2.4+hbase2.5.8

    Hadoop和HBase是大数据处理领域中的两个重要组件,它们分别负责分布式存储和实时数据访问。在本场景中,我们讨论的是Hadoop 3.2.4与HBase 2.5.8的版本组合。 **Hadoop 3.2.4** 是Apache Hadoop项目的一个稳定版本,...

    hbase1.0.3_part2

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

    hbase-2.2.7-bin.tar.gz

    6. **过滤器机制**:HBase提供了一套强大的过滤器,可以根据条件筛选数据,提高查询效率。 7. **MapReduce集成**:HBase可以与Hadoop的MapReduce框架无缝集成,进行批量数据处理和分析。 8. **REST和Thrift接口**...

    hbase-0.98.6-cdh5.3.6.zip

    8. **过滤器(Filter)**:HBase支持多种过滤器,允许用户在查询时指定条件,提高查询效率。 9. ** Coprocessor机制**:HBase 0.98.6引入了Coprocessor框架,允许用户自定义插件在Region服务器端执行,实现数据的...

    HBase Design Patterns

    6. **过滤器机制**:HBase提供了丰富的过滤器类,如RowFilter、ColumnValueFilter等,用于在数据检索时进行条件筛选,提升查询效率。 7. **数据模型设计**:设计良好的HBase表结构对于实现高效查询至关重要。例如,...

    HBase大数据.zip

    - **扫描器**:用于批量获取数据,可以通过过滤器进一步筛选结果。 - **批量加载**:HBase提供批量导入数据的工具,如HFile或MapReduce,提高数据导入效率。 4. **HBase高可用与容错** - **RegionServer故障恢复...

    hbase-2.0.2-bin.tar

    用户可以通过指定开始和结束键以及过滤器来定制扫描行为。 9. **Cell级别的安全性**: HBase支持细粒度的访问控制,可以为每个单元格(Cell)设置不同的权限。 10. **Compaction**: HBase会定期进行Major ...

    hbase权威指南 配套源码

    在《HBase权威指南》的配套源码中,读者可以找到书中涉及的实例代码,这些代码涵盖了HBase的基本操作,如创建表、插入数据、查询数据、使用过滤器、进行批量操作等,以及更高级的主题,如HBase与Hadoop的交互、性能...

    Hbase学习总结.rar

    2. **扫描器(Scanner)**:用于批量读取数据,可以通过行键范围、时间戳范围或过滤器进行定制化查询。 3. **批量加载(Bulk Load)**:将数据预先加载到HDFS,然后一次性导入HBase,提高效率。 ### 四、HBase优化...

    实验三:熟悉常用的HBase操作

    在本实验中,我们将深入学习如何在大数据环境中使用HBase,这是一个分布式列式数据库,它在Hadoop生态系统中扮演着重要角色。实验的目标是让你理解HBase在Hadoop架构中的地位,以及掌握通过Shell命令和Java API进行...

    hbase数据库

    3. 其他功能:除了基本的CRUD操作,HBase还提供了许多扩展功能,如数据的过滤器、计数器以及协处理器等。 综上所述,HBase在处理大规模、多类型数据存储方面提供了优越的解决方案,它能够处理的数据规模和访问速度...

Global site tag (gtag.js) - Google Analytics