`
mrpengpengda
  • 浏览: 37293 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hbase API中常用类介绍和使用

阅读更多

Hbase API 常用类应用

网上Hbase的介绍有很多,案例也不少。自己写了个Demo,进行一些简单的总结。

HBase 常用类介绍。

JAVA API HBase数据库模型之间的关系

JAVA

Hbase 数据模型

HBaseAdmin

数据库(database)

HBaseConfiguration

HTable

(table)

HTableDescriptor

列族(Column Family)

Put

行列操作

Get

Scanner

 

下面说说JAVA API 提供的这些类的功能。和他们之间有什么样的联系。

1.HBaseConfiguration

关系:org.apache.hadoop.hbase.HBaseConfiguration

作用:通过此类可以对HBase进行配置

用法实例: Configuration config = HBaseConfiguration.create();

说明: HBaseConfiguration.create() 默认会从classpath 中查找 hbase-site.xml 中的配置信息,初始化 Configuration

2.HBaseAdmin

关系:org.apache.hadoop.hbase.client.HBaseAdmin

作用:提供接口关系HBase 数据库中的表信息

用法:HBaseAdmin admin = new HBaseAdmin(config);

3.HTableDescriptor

关系:org.apache.hadoop.hbase.HTableDescriptor

作用:HTableDescriptor 类包含了表的名字以及表的列族信息

用法:HTableDescriptor htd =new HTableDescriptor(tablename);

           Htd.addFamily(new HColumnDescriptor(“myFamily”));

4.HColumnDescriptor

关系:org.apache.hadoop.hbase.HColumnDescriptor

作用:HColumnDescriptor 维护列族的信息

用法:HTableDescriptor htd =new HTableDescriptor(tablename);

           Htd.addFamily(new HColumnDescriptor(“myFamily”));

5.HTable

关系:org.apache.hadoop.hbase.client.HTable

作用:HTable HBase 的表通信

用法:HTable tab = new HTable(config,Bytes.toBytes(tablename));

           ResultScanner sc = tab.getScanner(Bytes.toBytes(“familyName”));

说明:获取表内列族 familyNme 的所有数据。

6.Put

关系:org.apache.hadoop.hbase.client.Put

作用:获取单个行的数据

用法:HTable table = new HTable(config,Bytes.toBytes(tablename));

           Put put = new Put(row);

           p.add(family,qualifier,value);

说明:向表 tablename 添加 “family,qualifier,value”指定的值。

7.Get

关系:org.apache.hadoop.hbase.client.Get

作用:获取单个行的数据

用法:HTable table = new HTable(config,Bytes.toBytes(tablename));

           Get get = new Get(Bytes.toBytes(row));

           Result result = table.get(get);

说明:获取 tablename 表中 row 行的对应数据

8.ResultScanner

关系:Interface

作用:获取值的接口

用法:ResultScanner scanner = table.getScanner(Bytes.toBytes(family));

           For(Result rowResult : scanner){

                   Bytes[] str = rowResult.getValue(family,column);

}

说明:循环获取行中列值。

下面例子使用的就是上面提供的类和接口。

例子1

/**

     * 获取表中所有数据

     */

    @SuppressWarnings("unchecked")

    publicstatic List<Map> getDateAll(String tablename){

       ResultScanner rs = null;

       HTable table  = null;

       try {

           table = new HTable(cfg,tablename);

           Scan s = new Scan();

           //扫描全表,性能不佳

           rs = table.getScanner(s);

           for(Result r=rs.next();r!=null;r=rs.next()){                       for(KeyValue kv : r.raw()){

                  System.out.println(new String(kv.getValue()));

              }

           }

       } catch (Exception e) {

           returnnull;

       }finally{

           rs.close();

       }

       return list;

    }

HBase是大数据的分布式数据库,当使用全表扫描肯定是不合理。下面的例子相比较例子1做些优化。

例子2

/**

     * 指定rowkey的开始和结束扫描表数据

     */

    @SuppressWarnings("unchecked")

    publicstatic List<Map> getDateAll(String tablename){

       ... //篇幅原因省略

       try {

           table = new HTable(cfg,tablename);

           Scan s = new Scan();

           //通过rowkey来指定数据开始和结束,性能上较例子1高很多 

            s.setStartRow(Bytes.toBytes(“2012-12-22”));

           s.setStopRow(Bytes.toBytes(“2012-12-23”));

           rs = table.getScanner(s);

           ... //篇幅原因省略

       } catch (Exception e) {

           ...//篇幅原因省略

    }

当使用扫描器 scan.setStartRow(Bytes)scan.setStopRow(Bytes)查询的数据还不能满足结果集的话,下面的一些类就派上用场了,他就是Filter

客户端请求过滤器

A.      逐一说一下Filter

1.       FilterList  

FilterList 代表一个过滤器列表,过滤器间具有

FilterList.Operator.MUST_PASS_ALL

FilterList.Operator.MUST_PASS_ONE 的关系,下面展示一个过滤器的 关系。

下面FilterList 列表中检查同一属性的'value1' 'value2' 

FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ONE);

SingleColumnValueFilter filter1 = new SingleColumnValueFilter(Bytes.toBytes(“cfamily”), Bytes.toBytes(“column”),CompareOp.EQUAL,Bytes.toBytes("value1"));

list.add(filter1);

SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes(“cfamily”), Bytes.toBytes(“column”), CompareOp.EQUAL, Bytes.toBytes("value2"));

List.add(filter2);

 

2.       SingleColumnValueFilter   

SingleColumnValueFilter 用于测试列值相等 (CompareOp.EQUAL ), 不等 (CompareOp.NOT_EQUAL),或范围 (e.g., CompareOp.GREATER). 下面示例检查列值和字符串'my values' 相等...

SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes(“cFamily”), Bytes.toBytes(“column”), CompareOp.EQUAL, Bytes.toBytes("values"));
scan.setFilter(filter);

3.       ColumnPrefixFilter

ColumnPrefixFilter 用于指定列名前缀值相等

Byte[] prefix = Bytes.toBytes(“values”);
Filter f = new ColumnPrefixFilter(prefix);
scan.setFilter(f);

4.       MultipleColumnPrefixFilter

MultipleColumnPrefixFilter ColumnPrefixFilter 行为差不多,但可以指定多个前缀。

byte[][] prefixes = new byte[][] {Bytes.toBytes("value1"), Bytes.toBytes("value2")};
Filter f = new MultipleColumnPrefixFilter(prefixes);
scan.setFilter(f);

5.       QualifierFilter

QualifierFilter 是基于列名的过滤器。

Filter f = new QualifierFilter(“QualifierName”);
scan.setFilter(f);

6.       RowFilter

RowFilter rowkey过滤器,通常根据rowkey来指定范围时,使用scan扫描器的StartRowStopRow 方法比较好。Rowkey也可以使用。

Filter f = new RowFilter(“rowkey”);
scan.setFilter(f);

B.比较器

7.       RegexStringComparator

RegexStringComparator 是支持正则表达式的比较器。

过滤器配合上比较器会很方便。看下面的代码。

解释一下:代码中绿色字体标注的代码就是正则比较器的使用方法。参数 reg 就是正则验证的规则。

HTable table = new HTable(cfg,"datainfo");
Scan scan = new Scan();
String reg = "^136([0-9]{8})$";//满足136开头的手机号
RowFilter filter = new RowFilter(CompareOp.EQUAL, 
new RegexStringComparator(reg));
scan.setFilter(filter);
ResultScanner rs = table.getScanner(scan);
for(Result rr : rs){
for(KeyValue kv : rr.raw()){
         ...
}
}

8.       SubstringComparator

SubstringComparator 用于检测一个子串是否存在于值中。大小写不敏感。

//检测values 是否存在于查询的列值中
SubstringComparator comp = new SubstringComparator("values");
SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes(“family”), Bytes.toBytes(“column”),CompareOp.EQUAL, Bytes.toBytes(“value”));
scan.setFilter(filter);

基本用法也就是这些。欢迎指正点评。

分享到:
评论
1 楼 BrotherQqiang 2015-08-12  
  

相关推荐

    hbase资料api

    HBase数据查询API HBase是一种分布式的、面向列的NoSQL数据库,主要应用于存储大量的半结构化数据。HBase提供了多种查询方式,包括单条查询和批量查询。 单条查询 单条查询是通过rowkey在table中查询某一行的数据...

    hbase常用JAVA API

    下面将详细介绍HBase Java API的核心概念和常用方法。 1. **连接HBase** 要连接到HBase,你需要创建一个`Configuration`对象,然后通过`Connection`工厂类创建`Connection`。`Configuration`对象用于设置HBase的...

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

    实验的目标是让你理解HBase在Hadoop架构中的地位,以及掌握通过Shell命令和Java API进行基本操作的方法。 首先,让我们来看看实验的平台配置。实验要求的操作系统是Linux,这通常是大数据处理的首选平台,因为它...

    hbase java api 访问 增加修改删除(一)

    在本文中,我们将深入探讨如何使用HBase的Java API进行数据的增加、修改和删除操作。HBase是一个基于Google Bigtable设计的开源分布式数据库,它属于Apache Hadoop生态系统的一部分,适用于处理大规模数据存储。通过...

    hbase java api 访问 查询、分页

    在Java API中,我们主要通过`org.apache.hadoop.hbase.client.Connection`和`org.apache.hadoop.hbase.client.Table`这两个核心类来进行交互。 1. **连接HBase**: 使用`ConnectionFactory.createConnection...

    Hbase 官方中文文档

    HBase官方中文文档概述了Apache HBase TM的基本概念、配置...综上所述,HBase官方中文文档为用户提供了全面的关于HBase安装、配置、使用、优化、安全和维护等环节的知识,是使用和管理HBase集群不可或缺的参考资料。

    大数据技术原理及应用课实验3 熟悉常用的HBase操作 林子雨实验

    3. **熟悉HBase操作常用的Java API**:Java API允许开发者在应用程序中直接与HBase交互,进行更复杂的数据操作和管理。 实验平台的配置如下: 1. **操作系统**:推荐使用Linux环境,如Ubuntu 16.04或18.04。 2. **...

    Hbase shell及常用命令

    HBase shell及常用命令 HBase Shell是HBase数据库的命令行工具,用户可以使用HBase Shell与HBase进行交互。HBase Shell是一个封装了Java客户端API的JRuby应用软件,在HBase的HMaster主机上通过命令行输入hbase ...

    HBase技术介绍.docx

    - **Native Java API**: 最常用的接口之一,适用于Hadoop MapReduce Job中的批量数据处理任务。 - **HBase Shell**: 命令行工具,适合进行简单的管理和查询操作。 - **Thrift Gateway**: 支持多种语言(如C++、PHP、...

    hbase数据可视化系统

    4. 实体类映射:为HBase的表和列族创建Java实体类,使用注解进行映射。 四、搭建HBase可视化界面 1. 页面设计:使用Thymeleaf、Freemarker或其他模板引擎,创建页面布局,设计表单和数据显示区域。 2. 控制器编写...

    HBase常用Java API

    本节介绍与 HBase 数据存储管理相关的 Java API(基于 HBase 版本 1.2.3)。 HBase 的常用Java API HBase 主要包括 5 大类操作:HBase 的配置、HBase 表的管理、列族的管理、列的管理、数据操作等。 1)org.apache....

    HBase技术介绍

    HBase是一种基于Hadoop生态系统的分布式列式存储系统,它主要设计用于处理大规模的数据存储,尤其是在廉价的PC服务器集群上...通过与Pig、Hive、Sqoop等工具的集成,HBase进一步增强了其在大数据分析和处理中的实用性。

    大数据实验三-HBase编程实践

    通过本次实验,我对HBase的安装配置有了深入的理解,并掌握了如何使用Shell命令和Java API来进行表的操作。HBase的强大之处在于它能够处理大规模的数据,并且提供了高效的数据读写能力。在未来的工作中,我会更加...

    hbase访问方式之javaapi共3页.pdf.zip

    在HBase这个分布式列式数据库中,Java API是开发者常用的一种访问方式,它提供了丰富的类和接口用于操作HBase表,包括创建、读取、更新和删除数据等操作。本资料"《hbase访问方式之javaapi共3页.pdf》"虽只提及3页...

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

    在HBase中,这些操作可能包括使用HBase Shell、Java API或者其他的客户端工具来管理表、行、列族和时间戳等元素。 【标签解析】: 由于提供的标签为空,我们无法直接获取特定的关键词,但根据标题和描述,我们可以...

    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-client

    总结,HBase客户端是连接HBase集群的关键,无论是在开发环境中还是生产环境中,都需要熟练掌握客户端的使用和优化。了解并熟练运用HBase的各种客户端工具,可以极大地提升数据处理的效率和质量,更好地发挥HBase在...

    spring操作hbase demo

    4. **定义实体类**:为了方便操作,我们可以创建一个实体类,该类的属性对应HBase表中的列。例如,如果我们有一个名为“User”的表,包含id和name两列,可以这样定义: ```java public class User { private byte...

Global site tag (gtag.js) - Google Analytics