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

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视频教程下载|基于微博数据应用的HBase实战开发

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

    Hadoop权威指南 第二版(中文版)

     本书从Hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍Hadoop这一高性能处理海量数据集的理想工具。全书共16章,3个附录,涉及的主题包括:Haddoop简介;MapReduce简介;Hadoop分布式文件系统;Hadoop...

    Hbase+Spring boot实战分布式文件存储

    3-1 HBase写流程 3-2 HBase读流程 3-3 HBase模块协作 3-4 HBase实战:Shell命令实战 3-5 HBase实 战:Java Api实现HBase连接类 3-6 HBase实战:Java Api实现HBase操作类 3-7 HBase实战:用过滤器筛选数据 3-8 HBase...

    非关系性分布式数据库:HBase

    HBase是一个分布式的、面向列的开源数据库,该技术来源于FayChang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。...论文提到的压缩算法、内存操作和布隆过滤器。Base是ApacheH

    Hadoop+Hive+Spark+Kafka+Zookeeper+Flume+Sqoop+Azkaban+Scala

    前 言 大数据学习路线 大数据技术栈思维导图 大数据常用软件安装指南 一、Hadoop 分布式文件存储系统:HDFS 分布式计算框架:MapReduce 集群资源管理器:YARN ...过滤器详解 可显示字数有限,详细内容请看资源。

    Hadoop实战中文版

    5.2.1 Reduce侧的联结 5.2.2 基于DistributedCache的复制联结 5.2.3 半联结:map侧过滤后在reduce侧联结 5.3 创建一个Bloom filter 5.3.1 Bloom filter做了什么 5.3.2 实现一个Bloom filter 5.3.3 Hadoop 0.20...

    Hadoop权威指南(中文版)2015上传.rar

    第1章 初识Hadoop 数据!数据! 数据存储与分析 与其他系统相比 关系型数据库管理系统 网格计算 志愿计算 1.3.4 Hadoop 发展简史 Apache Hadoop和Hadoop生态圈 第2章 关于MapReduce 一个气象数据集 数据的格式 使用...

    Hadoop实战中文版.PDF

    1568.11 多用户作业的调度 1578.11.1 多个JobTracker 1588.11.2 公平调度器 1588.12 小结 160第三部分 Hadoop也疯狂第9章 在云上运行Hadoop 1629.1 Amazon Web Services简介 1629.2 安装AWS 1639.2.1...

    Hadoop实战(第2版)

     《Hadoop硬实战》包含: ·Hadoop和MapReduce的基本概念 ·85个实战和测试技术 ·真实的场景,实用的解决方案 ·如何整合MapReduce和R前言 致谢关于本书 第1 部分 背景和基本原理1 跳跃中的Hadoop1.1 什么...

    Hadoop实战(陆嘉恒)译

    Hadoop技术本身比较复杂,而且还涉及Pig、ZooKeeper、Hive、HBase等一系列技术,学习门槛比较高,对于初学者和基础不太扎实的读者而言,有一本适合系统学习的Hadoop图书显得十分重要。本书即是专门为这两类读者量身...

    大数据HBase之入门进阶

    本次课程适合HBase入门的学员,课程首先介绍了什么是HBase ,HBase安装以及Sell入门,其次通过介绍独立zk、JavaAPI、区域操作、HBase常用功能、过滤器等一系列功能操作进行详细解析,帮助学员更好的理解,最后以HA...

    Hadoop实战

    第一部分 Hadoop——一种分布式编程框架第1章 Hadoop简介 21.1 为什么写《Hadoop 实战》 31.2 什么是Hadoop 31.3 了解分布式系统和Hadoop 41.4 比较SQL数据库和Hadoop 51.5 理解MapReduce 61.5.1 动手扩展一个简单...

    五分钟学大数据-HBase 知识体系吐血总结1

    2. 过滤器查询 21 3. 根据 rowkey 删除数据29 4. 删除表操作 29 1. 系统架构 29 2. HBase 的表数据模型31 3. 物理存储

    2017最新大数据架构师精英课程

    本资源为大数据基础到中高级教学资源,适合稍微有点大数据或者java基础的人群学习,资源过大,上传乃是下载链接,不多说,上目录: 1_java基础2 l3 a2 a$ t7 J2 b+ `- p 2_java引入ide-eclipse 3_java基础知识-循环...

    HadoopLearning:完整的大数据基础学习教程,包含最基础的centos,maven。大数据主要包含hdfs,mr,yarn,hbase,kafka,scala,sparkcore,sparkstreaming,sparksql。

    原理剖析,删除数据,消费数据,Shell访问和Java API访问SparkCore技术原理,b编程模型,检查点,广播和累加器sparkSQL简介,运行原理,程序开发,数据源,分布式引擎,数据类型,性能优化,实战训练SparkStreaming...

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    技术点11 使用HBase 作为MapReduce 的数据接收器 2.4 本章小结 3 数据序列化――处理文本文件及其他格式的文件 3.1 了解MapReduce 中的输入和输出 3.1.1 数据输入 3.1.2 数据输出 3.2 处理常见的序列...

    KMV的MATLAB的代码-brickhouse:砖房

    UDF包装围绕Hadoop布隆过滤器实现。 健全性-在生产环境中实施健全性检查和管理Hive的工具。 hbase-用于将Hive与HBase集成的替代方法的实验性UDF。 要求: Brickhouse要求Hive 0.9.0或更高版本; 需要Maven 2.0和Java...

    KMV的MATLAB的代码-Hive:蜂巢

    UDF包装围绕Hadoop布隆过滤器实现。 健全性-在生产环境中实施健全性检查和管理Hive的工具。 hbase-用于将Hive与HBase集成的替代方法的实验性UDF。 要求: Brickhouse要求Hive 0.9.0或更高版本; 需要Maven 2.0和Java...

    百度云盘 pdf《大数据架构和算法实现之路:电商系统的技术实战》百度云盘-带标签目录

    10.7.3 协同过滤………………….. 319 10.7.4 结果的查询………………·· 320 10.8 案例实践 ……………. ... ....… 321 10.8.1 基于内容特征的推荐…... 321 10.8.2 基于行为特征的推荐…….. 341 第四篇获取...

Global site tag (gtag.js) - Google Analytics