HBase java API 的使用范例(增,删,查,扫描)
编辑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 的使用范例(增,删,查,扫描)的更多相关文章
- Java API实现Hadoop文件系统增删改查
Java API实现Hadoop文件系统增删改查 Hadoop文件系统可以通过shell命令hadoop fs -xx进行操作,同时也提供了Java编程接口 maven配置 <project x ...
- ElasticSearch6(三)-- Java API实现简单的增删改查
基于ElasticSearch6.2.4, Java API创建索引.查询.修改.删除,pom依赖和获取es连接 可查看此文章. package com.xsjt.learn; import java ...
- Neo4j学习笔记(1)——使用Java API实现简单的增删改查
阅读目录 项目的创建及配置 使用嵌入式数据库 创建节点和关系 查询及更新 删除关系和节点 完整代码 参考资料 回到顶部 项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管 ...
- Android 系统API实现数据库的增删改查和SQLite3工具的使用
在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...
- 使用java对sql server进行增删改查
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- ASP.NET Web API基于OData的增删改查,以及处理实体间关系
本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先是比较典型的一对多关系,Supplier和Product. public class Product { ...
- [转]ASP.NET Web API基于OData的增删改查,以及处理实体间关系
本文转自:http://www.cnblogs.com/darrenji/p/4926334.html 本篇体验实现ASP.NET Web API基于OData的增删改查,以及处理实体间的关系. 首先 ...
- java对xml文件做增删改查------摘录
java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...
- Hbase(六) hbase Java API
一. 几个主要 Hbase API 类和数据模型之间的对应关系: 1. HBaseAdmin关系: org.apache.hadoop.hbase.client.HBaseAdmin作用:提供了一个接 ...
随机推荐
- 使用sqlloader向oracle导入文本数据
文本文件如下,注意文件名必须有后缀,文本行首也需要|分隔符:[oracle@ycr test]$ more person.txt|aaa|123|m|aaa|123|m|aaa|123|m|aaa|1 ...
- 微信小程序国际化
微信小程序国际化 现状 小程序国际化官方没有支持,也没有现成的插件. 网上有人做了国际化的尝试.但是只能替换静态文本,就是简单的键值匹配. vue-i18n 由于是基于html 和 vue, 不同于w ...
- IOS 公司标示使用反向域名
1. 公司标示使用反向域名========================================正向域名 www.baidu.com 用来标示一台网络主机反向域名 cn.itcast.Myd ...
- linux命令之添加删除磁盘分区
之前已经写过df和fdisk的区别了,df可以显示当前已经挂载的磁盘分区,df -T可以额外显示文件系统类型 fdisk -l可以显示出所有挂载未挂载的分区,但不显示文件类型 在我的虚拟机上有一块分配 ...
- 初识prufer序列
前言 \(prufer\)序列应该是一个比较实用的东西. 据\(hl666\)大佬说,一切与度数有关的树上计数问题,都可以用它以及它的性质来解决. 而听说\(ZJOI\)最近特别喜欢出计数题,所以有必 ...
- netbackup 8.1安装前注意事项
一.NetBackup 主服务器的 Web 服务器用户/组设置步骤 文章 ID:100034818 上次发布时间:2017-08-24 产品:NetBackup 问题 从 NetBackup 8. ...
- 【luogu P1455 搭配购买】 题解
题目链接:https://www.luogu.org/problemnew/show/P1455 一句话题目做法:并查集合并+01背包 启示:要每次再find一遍.路径压缩会快.因为合并的时候如果是1 ...
- AngularJS web应用程序
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- Java 加密Excel文件(打开时需输入密码)
收集:author: lifq package com.XXX.XXX.utils; import java.io.IOException; import com.jxcell.CellExcepti ...
- Django-rest-framework(二)serializers 使用
简介 初次见到serializers文件,想必大家都会感到陌生,所以,我们不妨换个词来形容他的作用,那就是django 中的Form,这样是不是感觉熟悉了一点. 实际上,serializers 的作用 ...