编辑pom.xml

<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.2.0</version>
</dependency> <dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.0</version>
</dependency>

java文件

package com.cenzhongman.hbase;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
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.util.Bytes;
import org.apache.hadoop.io.IOUtils; /**
*
* 演示 HBase 的 JDBC 连接及 CRUD 操作
*
* @author cen
*
*/ public class HBaseOperation {
static HTable table = null;
static String TABLE_NAME = "user"; /**
* getHTablebyTbaleName
*
* @param tableName
* @return
*/
@SuppressWarnings("deprecation")
public static HTable getHTable() {
// 1.get instance of Default Configuration 读取 core-site.xml hdfs-site.xml 信息
// Configuration conf = new Configuration();//HDFS中获取core-site.xml hdfs-site.xml
// 的方法
// conf.addResource("hbase-default.xml");
// conf.addResource("hbase-site.xml");
// Hbase封装的获取方法(详见源码),增加了读取HBase 的配置文件
Configuration conf = HBaseConfiguration.create(); // 2.get Table instance
try {
table = new HTable(conf, TABLE_NAME);
} catch (IOException e) {
e.printStackTrace();
} return table;
} /**
* getData by table,rowKey,columns[{cfs}][columns]
*
* @param table
* @param rowKey
* @param columns
*/
public static void getData(String rowKey, String[][] columns) { try {
table = getHTable();
// create get with RowKey 选定Get的RowKey
Get get = new Get(Bytes.toBytes(rowKey)); if (columns != null) {
// add column 增加列查询条件
for (int i = 0; i < columns[0].length; i++) {
for (int j = 0; j < columns[1].length; j++) {
get.addColumn(Bytes.toBytes(columns[0][i]), Bytes.toBytes(columns[1][j]));
}
}
}
// get Result
Result result = null;
result = table.get(get); // Key:rowKwy + cf + c + version + type +
// value:value
for (Cell cell : result.rawCells()) {
System.out.println(
Bytes.toString(CellUtil.cloneFamily(cell)) + ":" + Bytes.toString(CellUtil.cloneQualifier(cell))
+ "->" + Bytes.toString(CellUtil.cloneValue(cell)));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeStream(table);
}
} public static void getData(String rowKey) {
getData(rowKey, null);
} /**
* putData to HBase by table,rowKey,column,value 通常一张表的表名和列簇都设置常量 使用Map比数组更简单
*
* @param table
* @param rowKey
* @param column
* @param value
*/
@SuppressWarnings("deprecation")
public static void putData(String rowKey, String cf, String column, String value) { try {
table = getHTable();
// create put with rowKey
Put put = new Put(Bytes.toBytes(rowKey)); // 增加列数据
put.add(Bytes.toBytes(cf), Bytes.toBytes(column), Bytes.toBytes(value)); // put The data to put.
// 实际使用list<Puts>
table.put(put);
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeStream(table);
}
} /**
* 删除一张表中的数据
*
* @param table
* @param rowKey
* @param cf
* @param column
*/
public static void deleteData(String rowKey, String cf, String column) {
// create Delete
try {
table = getHTable();
Delete delete = new Delete(Bytes.toBytes(rowKey)); // 需要 delete 的 data
// delete.addColumn(Bytes.toBytes(cf), Bytes.toBytes(column));//删除最新的版本
delete.addColumns(Bytes.toBytes(cf), Bytes.toBytes(column));// 删除所有的版本 table.delete(delete);
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeStream(table);
}
} /**
* scan data from HBase 包头不包尾
*/
public static void scanData() {
scanData(null, null, null, null);
} public static void scanData(String startRow) {
scanData(startRow, null, null, null);
} public static void scanData(String startRow, String stopRow) {
scanData(startRow, stopRow, null, null);
} public static void scanData(String startRow, String stopRow, String family, String qualifier) {
ResultScanner resultScanner = null; try {
Scan scan = new Scan(); //三种方式
//1.范围扫描可用构造函数来设置
// Scan scan2 = new Scan(startRow, stopRow) //2.设置起始范围
if (startRow != null) {
scan.setStartRow(Bytes.toBytes(startRow));
}
if (stopRow != null) {
scan.setStopRow(Bytes.toBytes(stopRow));
} // 列过滤条件
if (family != null) {
if (qualifier != null) {
scan.addFamily(Bytes.toBytes(family));
}
scan.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
} //3.使用过滤器
/*
* 使用Filter查询速度会下降
* PrefixFilter : 前缀过滤
* PageFilter : 分页过滤
*/
// scan.setFilter(filter); //设置缓存
// scan.setCacheBlocks(cacheBlocks);//把常用的数据缓存到 RegionServer 的 BlocksCache 中
// scan.setCaching(caching);//每一次扫描时获取列的数目 table = getHTable();
resultScanner = table.getScanner(scan);
for (Result result : resultScanner) {
System.out.println("Row:" + Bytes.toString(result.getRow()));
for (Cell cell : result.rawCells()) {
System.out.println(Bytes.toString(CellUtil.cloneFamily(cell)) + ":"
+ Bytes.toString(CellUtil.cloneQualifier(cell)) + "->"
+ Bytes.toString(CellUtil.cloneValue(cell)));
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeStream(resultScanner);
IOUtils.closeStream(table);
} } public static void main(String[] args) {
String rowKey = "00002";
String cf = "info";
String column = "name";
String value = "gugjhg";
putData(rowKey, cf, column, value); // deleteData(rowKey, cf, column); // String[][] columns = { { "info" }, { "name" ,"tel"} };
// getData(rowKey); scanData();
System.out.println("finish");
}
}

HBase java API 的使用范例(增,删,查,扫描)的更多相关文章

  1. Java API实现Hadoop文件系统增删改查

    Java API实现Hadoop文件系统增删改查 Hadoop文件系统可以通过shell命令hadoop fs -xx进行操作,同时也提供了Java编程接口 maven配置 <project x ...

  2. ElasticSearch6(三)-- Java API实现简单的增删改查

    基于ElasticSearch6.2.4, Java API创建索引.查询.修改.删除,pom依赖和获取es连接 可查看此文章. package com.xsjt.learn; import java ...

  3. Neo4j学习笔记(1)——使用Java API实现简单的增删改查

    阅读目录 项目的创建及配置 使用嵌入式数据库 创建节点和关系 查询及更新 删除关系和节点 完整代码 参考资料 回到顶部 项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管 ...

  4. Android 系统API实现数据库的增删改查和SQLite3工具的使用

    在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...

  5. 使用java对sql server进行增删改查

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  6. ASP.NET Web API基于OData的增删改查,以及处理实体间关系

    本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先是比较典型的一对多关系,Supplier和Product. public class Product { ...

  7. [转]ASP.NET Web API基于OData的增删改查,以及处理实体间关系

    本文转自:http://www.cnblogs.com/darrenji/p/4926334.html 本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先 ...

  8. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...

  9. Hbase(六) hbase Java API

    一. 几个主要 Hbase API 类和数据模型之间的对应关系: 1. HBaseAdmin关系: org.apache.hadoop.hbase.client.HBaseAdmin作用:提供了一个接 ...

随机推荐

  1. 通过yum安装最新服务

    给yum添加所安装服务最新rpm源  #这里用mysql为例 # wget dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm # y ...

  2. May 22nd 2017 Week 21st Monday

    The biggest adventure you can take is to live the life of your dreams. 你能经历的最大的冒险,就是过上你梦想的生活. Just l ...

  3. JQuery DataTable的配置项及事件

    当我们需要在加载或者显示表格的时候,改变jquery datatable 的数据,或增加一些html标签处理. 可以通过Jquery DataTable的回调函数处理. 实例代码: if (oTabl ...

  4. 【洛谷5286】[HNOI2019] 鱼(计算几何)

    点此看题面 大致题意: 给你\(n\)个点,让你求鱼形图的数量. 核心思路 首先,考虑到\(n\)这么小,我们可以枚举线段\(AD\),再去找符合条件的\(BC,EF\). 然后,不难发现\(BC\) ...

  5. CENTOS 6 通过YUM升级GCC到4.7/4.8

    第一阶段:升级到4.7 [root@01314.CN ~]# cd /etc/yum.repos.d [root@01314.CN yum.repos.d]# wget http://people.c ...

  6. 如何解决“请考虑使用 app.config 将程序集“XXXXXXXX”从版本XXXX重新映射到版本XXXX”的问题

    > 请考虑使用 app.config 将程序集“System.ValueTuple, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”从版本“\ ...

  7. likelihood(似然) and likelihood function(似然函数)

    知乎上关于似然的一个问题:https://www.zhihu.com/question/54082000 概率(密度)表达给定下样本随机向量的可能性,而似然表达了给定样本下参数(相对于另外的参数)为真 ...

  8. [LuoguP1111]修复公路

    [LuoguP1111]修复公路 题目描述: A地区在地震过后,链接所有村庄的公路都损坏了,而导致无法通车,政府派人修复这些公路. 给出A地区的N村庄数和M公路数,并且对于每一个公路给出其链接的两个村 ...

  9. HDU 2859 Phalanx(对称矩阵 经典dp样例)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2859 Phalanx Time Limit: 10000/5000 MS (Java/Others)  ...

  10. c语言描述的二叉树的基本操作(层序遍历,递归,非递归遍历)

    #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define ...