`
尘事随缘
  • 浏览: 9753 次
社区版块
存档分类
最新评论

Hbase Client 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扫描器的StartRow和StopRow 方法比较好。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);
基本用法也就是这些。欢迎指正点评。
分享到:
评论

相关推荐

    hbase-client-1.4.3-API文档-中文版.zip

    赠送原API文档:hbase-client-1.4.3-javadoc.jar; 赠送源代码:hbase-client-1.4.3-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.4.3.pom; 包含翻译后的API文档:hbase-client-1.4.3-javadoc-API文档-...

    HBase_Client_Api_Guide

    HBase_Client_Api_Guide

    hbase-client-1.1.2-API文档-中文版.zip

    赠送原API文档:hbase-client-1.1.2-javadoc.jar; 赠送源代码:hbase-client-1.1.2-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.1.2.pom; 包含翻译后的API文档:hbase-client-1.1.2-javadoc-API文档-...

    hbase的java client实例

    hbase java api,集成spring使用,mapreduce实例,协处理器实例等等

    hbase-client-1.2.12-API文档-中文版.zip

    赠送原API文档:hbase-client-1.2.12-javadoc.jar; 赠送源代码:hbase-client-1.2.12-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.2.12.pom; 包含翻译后的API文档:hbase-client-1.2.12-javadoc-API文档...

    hbase-client-1.1.2-API文档-中英对照版.zip

    赠送原API文档:hbase-client-1.1.2-javadoc.jar; 赠送源代码:hbase-client-1.1.2-sources.jar; 包含翻译后的API文档:hbase-client-1.1.2-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId...

    hbase-sdk是基于hbase-client和hbase-thrift的原生API封装的一款轻量级的HBase ORM框架

    hbase-sdk是基于hbase-client和hbase-thrift的原生API封装的一款轻量级的HBase ORM框架。 针对HBase各版本API(1.x~2.x)间的差异,在其上剥离出了一层统一的抽象。并提供了以类SQL的方式来读写HBase表中的数据。对...

    hbase-client-1.2.12-API文档-中英对照版.zip

    赠送原API文档:hbase-client-1.2.12-javadoc.jar; 赠送源代码:hbase-client-1.2.12-sources.jar; 赠送Maven依赖信息文件:hbase-client-1.2.12.pom; 包含翻译后的API文档:hbase-client-1.2.12-javadoc-API文档...

    快速学习-HBaseAPI操作

    hbase-client 1.3.1 jdk.tools jdk.tools 1.8 system ${JAVA_HOME}/lib/tools.jar 6.2 HBaseAPI 6.2.1 获取Configuration对象 public static Configuration conf; static{ //使用HBaseConfi

    HBase.The.Definitive.Guide.2nd.Edition

    Fully revised for HBase 1.0, this second edition brings you up to speed on the new HBase client API, as well as security features and new case studies that demonstrate HBase use in the real world. ...

    HBase-The Definitive Guide-Second Edition-Early Release.pdf

    Fully revised for HBase 1.0, this second edition brings you up to speed on the new HBase client API, as well as security features and new case studies that demonstrate HBase use in the real world....

    HBase 0.98.1-hadoop2 API

    HBase 0.98.1-hadoop2 API

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

    课时4:基于HBase Client API的CRUD实战 课时5:批处理与扫描器实战 课时6:使用Ganglia监控HBase 课时7:过滤器实战之比较过滤器 课时8:过滤器实战之专用过滤器与FilterList 课时9:过滤器实战之自定义过滤器 ...

    maprdb-rest-base64:解码HBASE REST API输出

    maprdb-rest-base64 此Java应用程序调用HBASE REST API,并对输出进行解码,以从&lt;column&gt; : 获取值&lt;column&gt; : &lt;column&gt; HBASE REST API输出为base64编码格式。 下游应用程序可以解码列族中的值:要使用的列名对于...

    apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz

    Apache Phoenix是构建在HBase之上的关系型数据库层,作为内嵌的客户端JDBC驱动用以对...直接使用HBase的API,结合协处理器(coprocessor)和自定义的过滤器的话,小范围的查询在毫秒级响应,千万数据的话响应速度为秒级

    HBaseClientDemo

    HBase java api 客户端 实例

    利用java api读取hbase数据遇到的一些坑及解决方法

    java.lang.RuntimeException: org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions: Fri Feb 14 10:30:36 CST 2020, null, java.net.SocketTimeoutException: ...

    java8集合源码分析-hbase-sdk:专注于HBase的ORM框架

    Client的相关API开发而来的一款轻量级的HBase ORM框架。提供SQL查询功能,以类SQL的方式——HQL读写HBase数据。 :face_savoring_food: 针对HBase 1.x和2.xAPI的不同之处,在其上做了一层统一的封装。 hbase-sdk分为...

    java使用hbase-1.2版本需要的最小的jar包

    java客户端连接hbase所需要的最少的jar包集合,这个我用的hbase1.2.1的,大家用的版本可能是有稍许的差别(但是这个jar包应该可以用),不过所需要的包名是一样的,只是版本不一样而已,可以根据具体的需要修改为...

    hbase-client-1.4.3.jar中文-英文对照文档.zip

    中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【***.jar Maven依赖信息(可用于项目pom.xml).txt】 ...

Global site tag (gtag.js) - Google Analytics