HBase概念学习(四)Java API之扫描和过滤器

HBase主要的CRUD操作就不多介绍了,无非就是Put,Get。Delete三个类的运用。

本文相当于是阅读HBase权威指南的总结。

一、扫描(Scan)

如今看一下扫描技术,这样的技术类似于关系型数据库的游标(cursor),并利用到了HBase底层顺序存储的特性。

使用扫描的一般步骤是:

1、创建Scan实例
2、为Scan实例添加扫描的限制条件
3、调用HTable的getScanner()方法获取ResultScanner对象,假设通过HTablePool的方式,则是调用HTablePool的getScanner方法。(注意。HTable类实现了HTableInterface接口,这个接口用于与单个HBase表通信。

)
4、迭代ResultScanner对象中的Result对象訪问扫描结果行。

以下分别解说每个步骤:

(1)创建Scan实例:

构造方法例如以下:

能够创建定义了起始行健和结束行健的Scan对象,返回的包括定义的起始行。可是不包括结束行。

能够创建定义了过滤器的Scan对象,过滤器的内容稍后介绍。

也能够创建空白的Scan对象。

(2)创建好Scan对象之后,还能够添加很多其它的扫描限制条件:

比方能够限制返回数据的列族,也能够限制返回数据的列:

还能够限制返回结果的时间戳,时间范围,甚至限定仅仅返回每一列的一些特定版本号:

除此之外还能够设置过滤器,起始行,结束行等:

注意:上述全部Scan类的方法返回的都是Scan对象,使用的是Builder模式。能够再一行代码中同一时候设置多个限制条件。

(3)以下就能够获取ResultScanner对象:

(4)返回ResultScannner对象之后就能够開始迭代了:

能够直接转换为迭代器迭代,也能够直接用foreach语法迭代:

ResultScanner scanner=table.getScanner(scan);//运行扫描查找
Iterator<Result> res=scanner.iterator( );//返回查询遍历器 

或者
for(Result res: scanner)
{
    訪问Result获取行数据
}

注意:扫描操作不会通过一次RPC操作返回全部匹配的行。而是会以行为单位进行返回。

由于一次PRC操作就返回全部匹配数据的话数据量太大。会占用大量的系统资源并花费大量的时间。

1、缓存

依据上面的介绍,迭代ResultScanner的时候每一次显示或者隐式的next()方法的调用都会产生一次单独RPC请求,显然当单元格数据量较小是性能不好。

能够让一次RPC请求获取很多其它的数据。这就是扫描器缓存(Scanner caching)的作用。默认是关闭的。

能够再三个层面上打开扫描器缓存:

(1)表HTable的层面。这样由该表产生的全部扫描器实例的缓存都会生效。

(2)扫描器Scanner的层面,这样仅仅会影响当前的扫描器实例。

(3)整个client层面。须要改动hbase-site.xml配置文件,这样针对全部的Scanner实例都会生效。

设置扫描器缓存的大小就能控制每次RPC请求取回的行数了!

可是扫描器缓存无疑会添加client和server端的内存消耗,用户须要在少量的ROC请求次数和client以及服务端内存消耗之间找到平衡点。

假设扫描器缓存大小设置太大。每次next操作返回的时间就会变长,假设client的数据超过了堆的大小,就会得到一个OutOfMemoryException。

2、批量

另一个问题。有些行数据量很大,可能超过client进程内存的容量。能够用批量(Batch)解决。

缓存是面向行一级的操作,而批量是面向列一级的操作。

批量能够让用户选择每一次ResultScanner实例的next操作要取回多少列。

二、过滤器(Filter)

过滤器提供了很强大的特性来帮助用户提高处理表中数据的效率。用户不仅能够使用HBase中提前定义好的过滤器。还能够实现自己定义的过滤器。

HBase中两种基本的数据读取机制是Get和Scan,都支持加入很多其它的限制条件来降低查询得到的数据量,这些限制条件能够是列族,列,时间戳及版本。

可是他们缺少一些细粒度的筛选功能,比方基于正則表達式的对于行健和值进行筛选,过滤器能够做到。

Get和Scan两个类都支持过滤器。全部过滤器都在服务端生效,这称作谓词下推(predicate push down),这样能够保证被过滤掉的数据不会被传送到client。

过滤器属性和它们之间的兼容性:

很多其它具体介绍放到以后。。。

时间: 2024-09-29 22:06:47

HBase概念学习(四)Java API之扫描和过滤器的相关文章

HBase概念学习(三)Java API之扫描和过滤器

HBase基本的CRUD操作就不多介绍了,无非就是Put,Get,Delete三个类的运用. 本文相当于是阅读HBase权威指南的总结. 一.扫描(Scan) 现在看一下扫描技术,这种技术类似于关系型数据库的游标(cursor),并利用到了HBase底层顺序存储的特性. 使用扫描的一般步骤是: 1.创建Scan实例 2.为Scan实例增加扫描的限制条件 3.调用HTable的getScanner()方法获取ResultScanner对象 4.迭代ResultScanner对象中的Result对象

HBase的常用Java API

1. 创建HBase表的对象 HBase表的对项名字叫HTable,创建它的方法有很多,常见的有如下: org.apache.hadoop.hbase.client.HTable hTable = new HTable(org.apache.hadoop.hbase.HBaseConfiguration conf, String tableName); 或 org.apache.hadoop.hbase.client.HTable hTable = new HTable(org.apache.h

HBase性能优化 Java Api

1. 使用“连接池” 如果每次和Hbase交互时都去新建连接的话,显然是低效率的,HBase也提供类连接池相关的API. 1.1. HTablePool 早期的API中使用它,但很不幸,现在它已经过时了.在次不再描述. 1.2. HConnection 取代HTablePool的就是现在的HConnection,可以通过它拿到几乎所有关于HBase的相关操作对象. private static HConnection connection = null; private static Confi

HBase学习(十二)Java API 与HBase交互实例

HBase提供了Java Api的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要 import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoo

通过Java Api与HBase交互(转)

HBase提供了Java Api的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要,本文将继续前两篇文章中blog表的示例,介绍常用的Api. import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescr

通过Java Api与HBase交互

HBase提供了Java Api的访问接口,掌握这个就跟Java应用使用RDBMS时需要JDBC一样重要,本文将继续前两篇文章中blog表的示例,介绍常用的Api. import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescr

HBase Java API使用

概括 1. 创建.删除及启用禁用表.添加列等都需用到HBaseAdmin,另外需要注意删除,添加列等操作都需要禁用表 2. 表中添加数据,查询等都是和HTable相关,如果是多线程的情况下注意用HTablePool 3.  插入数据使用Put,可以单行添加也可批量添加 4. 查询数据需使用Get,Result,Scan.ResultScanner等 一.HBaseConfiguration org.apache.hadoop.hbase.HBaseConfiguration 对HBase进行配置

Hbase java API 调用详解

Hbase java API 调用 一. hbase的安装 参考:http://blog.csdn.net/mapengbo521521/article/details/41777721 二.hbase访问方式 Native java api:最常规最高效的访问方式. Hbase shell:hbase的命令行工具,最简单的接口,适合管理员使用 Thrift gateway:利用thrift序列化结束支持各种语言,适合异构系统在线访问 Rest gateway:支持rest风格的http api

Hbase框架原理及相关的知识点理解、Hbase访问MapReduce、Hbase访问Java API、Hbase shell及Hbase性能优化总结

转自:http://blog.csdn.net/zhongwen7710/article/details/39577431 本blog的内容包含: 第一部分:Hbase框架原理理解 第二部分:Hbase调用MapReduce函数使用理解 第三部分:Hbase调用Java API使用理解 第四部分:Hbase Shell操作 第五部分:Hbase建表.读写操作方式性能优化总结 第一部分:Hbase框架原理理解 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBase是基于Google