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作用:提供了一个接 ...
随机推荐
- Android下最小化程序到后台代码
procedure TForm1.Button4Click(Sender: TObject); var Intent: JIntent; begin Intent := TJIntent. ...
- POJ 3067 Japan 【树状数组经典】
题目链接:POJ 3067 Japan Japan Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32076 Accep ...
- Swift学习——格式控制符和元组流程控制(二)
Swift中的格式控制符和元祖 (1)首先介绍一下元祖,元祖是关系型数据库中 比如学生表中的姓名,年龄,电话等 定义例如以下 var studentinfo = ("jhon", ...
- 如何为WebStorm设置SASS的File Watchers?
Webstorm是一个很牛叉的IDE,现在工作每天都是用它了. 最近开始用SASS,LESS等来写CSS,而在Webstorm中,它自带一个File Watchers功能,设置一下,即可实时编译SAS ...
- 【luogu P1726 上白泽慧音】 题解
题目链接:https://www.luogu.org/problemnew/show/P1726 菜 #include <stack> #include <cstdio> #i ...
- Trident中 FixedBatchSpout分析
FixedBatchSpout 继承自 IBatchSpout IBatchSpout 方法 public interface IBatchSpout extends Serializable { v ...
- WebClient设置Expect: 100-continue
今天使用WebClient进行post发送数据的时候.总是无响应.实在没办法了.只好用fiddler抓包看一看.自己构造请求看哪里有问题. 发现请求头加上这句话后就无响应了.Expect: 100-c ...
- 掘金上发现的有趣web api
本篇文章主要选取了几个有趣且有用的webapi进行介绍,分别介绍其用法.用处以及浏览器支持度 page lifecycle onlineState(网络状态) device orientation(陀 ...
- rest_framework--序列化组件
#####序列化组件##### 一.什么是序列化 在python中一切皆对象,把对象从内存中变成可存储或传输的过程称之为序列化. 你写一个django项目肯定是有前后端交互的吧,虽然django也可以 ...
- c++ 数字和字符串的相互转换
需要包含头文件<sstream> 字符串转化为int #include<stdio.h> #include<string.h> #include<iostre ...