`
mrpengpengda
  • 浏览: 37165 次
  • 性别: 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操作

    (2)熟练使用HBase操作常用的 Shell命令。(3)熟悉HBase操作常用的 Java API。 A.3.2 实验平台 (1)操作系统:Linux。 (2)Hadoop 版本:2.7.1或以上版本。(3)HBase版本:1.1.2或以上版本。(4) JDK 版本:1.7或以上...

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

    在本次实验中,我更加进一步理解了HDFS在Hadoop体系结构中的角色并能使用HDFS操作常用的Shell命令以及HDFS操作常用的Java API。 在本次实验的第一题是用编程Java API实现指定功能,并用Hadoop提供的HBase Shell命令...

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

    hbase java api 访问 增加修改删除(一) 详情请看:http://blog.csdn.net/wild46cat/article/details/53306621

    HBase常用Java API

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

    hbase常用JAVA API

    jar包已打好,改动配置即可使用

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

    使用HBase常用Java API创建表、插入数据、浏览数据。 二.实验目的 1、理解HBase在Hadoop体系结构中的角色。 2、熟练使用HBase操作常用的Shell命令。 3、熟悉HBase操作常用的JavaAPI。 三.实验过程截图及说明 1、...

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

    java调用hbase实现数据库的增删改查

    java调用hbase数据库,完成对hbase常用api的封装和对hbase数据库的增删改查等操作,经测试绝对可用。

    HBase Programming HBase编程-TSMC教育訓練課程

    HBase 程式編譯方法 HBase 程式設計 常用的HBase API 說明 實做 I/O 操作 搭配Map Reduce 運算 案例演練 其他專案

    实验四:NoSQL和关系数据库的操作比较

    (2)熟练使用4种数据库操作常用的 Shell命令。 (3)熟悉4种数据库操作常用的Java API。 A.4.2实验平台 (1)操作系统:Linux(建议Ubuntu 16.04)。(2)Hadoop版本:2.7.1。 (3)MySQL版本:5.7.15。(4)HBase版本:1.1.2。...

    实验二:熟悉常用的HDFS操作

    (2)熟练使用HDFS操作常用的 Shell命令。(3)熟悉HDFS操作常用的Java API。 A.2.2 实验平台 (1)操作系统:Linux(建议Ubuntu 16.04)。(2) Hadoop版本:2.7.1。 (3)JDK版本:1.7或以上版本。(4) Java IDE:Eclipse。

    大数据HBase之入门进阶

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

    hbase参考文档

    hbase参考文档,包括搭建,与spring整合,常用api等

    大数据学习路线 大数据技术栈思维导图 大数据常用软件安装指南

    HDFS Java API 的使用 基于 Zookeeper 搭建 Hadoop 高可用集群 Hive Hive 简介及核心概念 Linux 环境下 Hive 的安装部署 Hive CLI 和 Beeline 命令行的基本使用 Hive 常用 DDL 操作 Hive 分区表和分桶表 Hive 视图...

    hadoop使用

    Linux使用;Hadoop安装;HDFS常用操作;HDFS常用操作java api;MapReduce计数操作,排序操作;HBase操作shell命令,HBase操作java api

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

    Java API 的使用 基于 Zookeeper 搭建 Hadoop 高可用集群 二、Hive 简介及核心概念 Linux 环境下 Hive 的安装部署 CLI 和 Beeline 命令行的基本使用 常用 DDL 操作 分区表和分桶表 视图和索引 常用 DML 操作 数据...

    大型分布式网站架构与实践

     常用的在线日志分析命令的使用和日志分析脚本的编写,如cat、grep、wc、less等命令的使用,以及awk、shell脚本的编写。  如何进行集群的监控,包括监控指标的定义、心跳检测、容量评估等。  如何保障高并发系统...

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

    RowKey设计,协处理,Shell访问,Java API访问和Hbase性能调优ElasticSearch入门,概念基础,基础原理,索引,映射,搜索,聚合和性能优化Scala入门,函数,类,对象,特征,模式匹配,常用类和方法,异常处理,编程...

    大数据技术原理及应用课实验4 NoSQL和关系数据库的操作比较 林子雨实验

    2. 熟练使用四种数据库操作常用的Shell命令; 3. 熟悉四种数据库操作常用的Java API。 二、实验平台 1. 操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04); 2. Hadoop版本:3.1.3; 3. MySQL版本:5.6; 4. HBase...

    Kudu分布式存储引擎

    详细的描述了Kudu在实际生产环境中的架构图和应用,并剖析了如何和Spark进行交互、如何和Mysql进行交互 总结性的阐述了Kudu的性能测试报告、报错解决方案、性能优化方案 帮助同学们掌握基础的Linux常用命令

Global site tag (gtag.js) - Google Analytics