相关知识


创建表插入数据删除等见:http://www.cnblogs.com/wishyouhappy/p/3735077.html

HBase API简介见:http://www.cnblogs.com/wishyouhappy/p/3753347.html

按行、列簇等查询


package wish.hbase;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.HTablePool;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes; public class HBaseQuerydata
{
static Configuration cfg = HBaseConfiguration.create();
static { cfg.set("hbase.zookeeper.quorum", "192.168.1.95");
cfg.set("hbase.zookeeper.property.clientPort", "2181");
} public static void queryByRowKey(String tablename, String rowKey) throws IOException
{
HTable table = new HTable(cfg, tablename);
Get g = new Get(rowKey.getBytes());
Result rs = table.get(g); for (KeyValue kv : rs.raw())
{
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column : " + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} public static void queryByRowKeyFamily(String tablename, String rowKey, String family) throws IOException
{
HTable table = new HTable(cfg, tablename);
Get g = new Get(rowKey.getBytes());
g.addFamily(Bytes.toBytes(family));
Result rs = table.get(g);
for (KeyValue kv : rs.raw())
{
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column : " + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} public static void queryByRowKeyFamilyColumn(String tablename, String rowKey, String family, String column)
throws IOException
{
HTable table = new HTable(cfg, tablename);
Get g = new Get(rowKey.getBytes());
g.addColumn(family.getBytes(), column.getBytes()); Result rs = table.get(g); for (KeyValue kv : rs.raw())
{
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column : " + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} /*
* 查询所有
*/
public static void queryAll(String tableName) {
HTablePool pool = new HTablePool(cfg, 1000);
try {
ResultScanner rs = pool.getTable(tableName).getScanner(new Scan());
for (Result r : rs) {
System.out.println("rowkey:" + new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("列:" + new String(keyValue.getFamily())
+ " 值:" + new String(keyValue.getValue()));
}
}
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) throws Exception
{
    System.out.println("******************************queryall******************************");
queryAll("wishtest1");System.out.println("******************************query by rowkey******************************");
queryByRowKey("wishTest1", "2");
System.out.println("******************************query by rowkey family******************************");
queryByRowKeyFamily("wishTest1", "2","name");
System.out.println("******************************query by rowkey family column******************************");
queryByRowKeyFamilyColumn("wishTest1", "6","score","Chinese");
}
}

输出如下:

******************************queryall******************************
rowkey:****1121
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:*1111
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:1
列:age 值:20
列:gender 值:male
列:name 值:rain
rowkey:2
列:age 值:20
列:gender 值:female
列:name 值:wish
rowkey:3
列:age 值:20
列:gender 值:male
列:name 值:Joey
rowkey:4
列:age 值:20
列:gender 值:male
列:name 值:Jenny
列:score 值:90
列:score 值:100
列:score 值:100
列:score 值:90
rowkey:5
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:6
列:age 值:20
列:gender 值:male
列:name 值:Joey
列:score 值:100
列:score 值:100
列:score 值:90
******************************query by rowkey******************************
rowkey: 2
Column Family: age
Column :
value : 20
rowkey: 2
Column Family: gender
Column :
value : female
rowkey: 2
Column Family: name
Column :
value : wish
******************************query by rowkey family******************************
rowkey: 2
Column Family: name
Column :
value : wish
******************************query by rowkey family column******************************
rowkey: 6
Column Family: score
Column : Chinese
value : 100

行过滤器


使用过滤器可以提高操作表的效率,HBase中两种数据读取函数get()和scan()都支持过滤器

可以使用预定义好的过滤器或者是实现自定义过滤器

过滤器在客户端创建,通过RPC传送到服务器端,在服务器端执行过滤操作

行过滤器简单例子如下:

测试table中所有数据如下:

rowkey:****1121
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:*1111
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:1
列:age 值:20
列:gender 值:male
列:name 值:rain
rowkey:2
列:age 值:20
列:gender 值:female
列:name 值:wish
rowkey:3
列:age 值:20
列:gender 值:male
列:name 值:Joey
rowkey:4
列:age 值:20
列:gender 值:male
列:name 值:Jenny
列:score 值:90
列:score 值:100
列:score 值:100
列:score 值:90
rowkey:5
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:6
列:age 值:20
列:gender 值:male
列:name 值:Joey
列:score 值:100
列:score 值:100
列:score 值:90

eg1:

public static void rowFilterLESS_OR_EQUAL(String tableName, String columnFamily, String column, String condition){
System.out.println("***********************start rowFilterLESS_OR_EQUAL***************************");
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column)); Filter f = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes(condition)));
scan.setFilter(f);
HTablePool pool = new HTablePool(cfg, 1000);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("***********************end rowFilterLESS_OR_EQUAL***************************"); }
public static void main(String[] args) {
String tableName = "wishTest1";
HBaseFilter.rowFilterLESS_OR_EQUAL(tableName, "score", "Math", "4");
}

输出:

***********************start rowFilterLESS_OR_EQUAL***************************

-------------------------------
rowkey: ****1121
Column Family: score
Column :Math
value : 99
-------------------------------
rowkey: *1111
Column Family: score
Column :Math
value : 99
-------------------------------
rowkey: 4
Column Family: score
Column :Math
value : 90
-------------------------------
rowkey: 5
Column Family: score
Column :Math
value : 99
***********************end rowFilterLESS_OR_EQUAL***************************

eg2:

    /*
* rowFilterRegex
*/
public static void rowFilterRegex(String tableName, String columnFamily, String column, String condition){
System.out.println("***********************start rowFilterRegex***************************");
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column)); Filter f = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("\\*."));
scan.setFilter(f);
HTablePool pool = new HTablePool(cfg, 1000);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("***********************end rowFilterRegex***************************"); }
public static void main(String[] args) {
String tableName = "wishTest1";
HBaseFilter.rowFilterRegex(tableName, "score", "Math", "\\*");
}

输出:

***********************start rowFilterRegex***************************
-------------------------------
rowkey: ****1121
Column Family: score
Column :Math
value : 99
-------------------------------
rowkey: *1111
Column Family: score
Column :Math
value : 99
***********************end rowFilterRegex***************************

eg3:

/*
* rowFilterSubstring
*/
public static void rowFilterSubstring(String tableName, String columnFamily, String column, String condition){
System.out.println("***********************start rowFilterSubstring***************************");
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column)); Filter f = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("\\*"));
scan.setFilter(f);
HTablePool pool = new HTablePool(cfg, 1000);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("***********************end rowFilterSubstring***************************"); }
    public static void main(String[] args) {
String tableName = "wishTest1";
HBaseFilter.rowFilterSubstring(tableName, "score", "Math", "\\*");
}

输出同上

列簇过滤器


public static void familyFilterLess(String tableName, String condition){
Filter filter = new FamilyFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes(condition)));
Scan scan = new Scan();
scan.setFilter(filter);
HTablePool pool = new HTablePool(cfg,100);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} resultScanner.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static void main(String[] args) {
String tableName = "wishTest1";
HBaseFilter.familyFilterLess(tableName, "gender");
//HBaseFilter.rowFilterSubstring(tableName, "score", "Math", "\\*");
}

输出:

-------------------------------
rowkey: ****1121
Column Family: age
Column :
value : 20
-------------------------------
rowkey: *1111
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 1
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 2
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 3
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 4
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 5
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 6
Column Family: age
Column :
value : 20

列名过滤器


    /*
* 列名过滤器
*/ public static void qualifierFilterLess(String tableName, String condition){
Filter filter = new QualifierFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes(condition)));
Scan scan = new Scan();
scan.setFilter(filter);
HTablePool pool = new HTablePool(cfg,100);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} resultScanner.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

值过滤器


    /*
* 值过滤器
*/ public static void valueFilterLess(String tableName, String condition){
Filter filter = new ValueFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes(condition)));
Scan scan = new Scan();
scan.setFilter(filter);
HTablePool pool = new HTablePool(cfg,100);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} resultScanner.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

HBase Client API使用(二)---查询及过滤器的更多相关文章

  1. 第四部分 数据搜索之使用HBASE的API实现条件查询

    因为数据清洗部分需要用到Mapreduce,所以先解决hbase的问题,可以用命令先在hbase存一下简单的数据进行查询,之后只要替换数据就可以实现了原本功能 在看该部分前,确保Hase API看了, ...

  2. HBase 相关API操练(二):Java API

    一.HBase Java编程 (1)HBase是用Java语言编写的,它支持Java编程: (2)HBase支持CRUD操作:Create,Read,Update和Delete: (3)Java AP ...

  3. 第六部分 数据搜索之使用HBASE的API实现条件查询

    题目 使用HADOOP的MAPReduce,实现以下功能: (1)基于大数据计算技术的条件查询:使用mapreduce框架,实现类似Hbase六个字段查询的功能 (2)时段流量统计:以hh:mm:ss ...

  4. HBASE的读写以及client API

    一:读写思想 1.系统表 hbase:namespace 存储hbase中所有的namespace的信息 hbase:meta rowkey:hbase中所有表的region的名称 column:re ...

  5. 073 HBASE的读写以及client API

    一:读写思想 1.系统表 hbase:namespace 存储hbase中所有的namespace的信息 hbase:meta rowkey:hbase中所有表的region的名称 column:re ...

  6. TFS API:二、TFS 代码查询工作项

    TFS API:二.TFS  代码查询工作项 首先我们需要认识TFS的两大获取服务对象的类. 他们分别为TfsConfigurationServer和TfsTeamProjectCollection, ...

  7. HBase总结(十二)Java API 与HBase交互实例

    HBase提供了Java Api的訪问接口,掌握这个就跟Java应用使用RDBMS时须要JDBC一样重要 import java.io.IOException; import org.apache.h ...

  8. Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI

    目录 引言 Search APIs Search API Search Request 可选参数 使用 SearchSourceBuilder 构建查询条件 指定排序 高亮请求 聚合请求 建议请求 R ...

  9. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十)ES6.2.2 Client API

    scala版本2.11 java版本1.8 spark版本2.2.1 es版本6.2.2 hadoop版本2.9.0 elasticsearch节点列表: 192.168.0.120 192.168. ...

随机推荐

  1. Fedora14下首次搭建Samba服务器遇到的一些问题

    SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的通信协议.而Samba则是在Linux和Unix系统上实现SMB协议的一个免费软件,由服务器及客户端程 ...

  2. YYModel 源码历险记 代码结构

    前言 因为公司需要开发一个内部使用的字典转模型的项目,所以最近也是在看关于字典转模型的内容.有Mantle,jsonModel,MJExtension等众多框架,最后还是选择了先从YYModel源码读 ...

  3. Android Studio学习随笔-基本事件(点击)

    最常见的点击事件有三种创建方法,在MainActivity.java的onCreate函数(在启动程序是优先运行的程序)中创建setOnClickListener(动态运行)(最常见) protect ...

  4. Python下载漫画

    上午起来提不起劲,于是就用电脑看漫画,但是在线看漫画好烦,就想下下来看.一个一个点太麻烦,于是花了点时间用python写了个demo,把爱漫画的漫画下载下来,这样就可以随时随地看了.这也是我首次尝试用 ...

  5. HTML5之部分显示

  6. ZOJ3527

    题意:给你一个有向图,一共N个顶点,且每个顶点只有一个前驱或后继,在顶点上建立圣地,那么就可以获得一个信仰值,如果在这个顶点的后继节点上也建立圣地,那么将改变一定的信仰值,求解能获取的最大信仰值. 思 ...

  7. 自定义鼠标Cursor转变成图片

    今天无意做到项目遇到一个好玩的事情,就是当我鼠标移到一个链接上面,并不是像正常那样出现一个小手,而是变成一个小十字架, 下面看图当时第一眼看到总感觉哪里不对,噢噢噢噢 这样的 小手没了,居然是一个图片 ...

  8. javascript 动态控制复选框的选择和取消

    这里就需要引入一个jquery-1.4.2.js 就行了,因为用到了里面的选择器 <html> <head> <script type="text/javasc ...

  9. tomcat报404

    很久没有用eclipse了,尝试了使用下,竟然将简单的配置tomcat都忘了. 自己新建一个工程,在tomcat发布以后,报404,经查Serves下的web.xml中,欢迎页面是index.jsp, ...

  10. strace 使用