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作用:提供了一个接 ...
随机推荐
- Orchard Core 文档翻译 (四)CMS ModulesTitle (OrchardCore.Title)
Title (OrchardCore.Title) 标题模块提供Title Part ,允许用户定义内容项的标题.它还定义了ContentItemMetadata方面的DisplayText属性 Th ...
- JQUERY实现点击INPUT使光标移动到最后或指定位置
下面本文章给大家简单介绍一下JQUERY实现点击INPUT使光标移动到最后或指定位置例子,希望对各位有帮助,你要知道面对一个 处女座的 需求者, focus()是远远不够的,比如说“我点进去的时候光标 ...
- 为什么有的系统的事务码BSP_WD_CMPWB看不见Enhance Component这个按钮
我的同事问我,为什么有的系统看不到下图7的按钮? 对比两张图里工具栏的差异. 答案 这是因为在图2(看不见Enhance Component按钮)的系统里,该系统的类型被设置为"SAP&qu ...
- 2018.10.31 Mac下的Mysql修改字符编码修改的问题总结
今天在弄数据库的时候发现存入中文汉字变成了问号,Mac跟windows处理方式不一样. show variables like '%char%'; 查看当前mysql的编码格式 也就是默认编码格式 + ...
- 【转】iOS的APP资源,开源的哦
完整项目 文章转自 “标哥的技术博客” IOS-Swift2.0 高仿半糖App 这个开源项目为半糖,官网➡,类似于美丽说,一款电商App,使用语言:Swift2.0,开发工具: Xcode 7.1 ...
- 【洛谷P1039】侦探推理
侦探推理 题目链接 这是一道恶心至极的模拟题 我们可以枚举罪犯是谁,今天是星期几,从而判断每个人说的话是真是假 若每个人说的话的真假一致,且说谎话的人数<=k且说真话的人数<=m-k,就是 ...
- 【luogu P4462 [CQOI2018]异或序列】 题解
题目链接:https://www.luogu.org/problemnew/show/P4462 ax+ax-1+...+ay = cntx+cnty 这样把一段序列变成两段相加跑莫队. #inclu ...
- An Algorithm for Surface Encoding and Reconstruction From 3D Point Cloud Data
An Algorithm for Surface Encoding and Reconstruction From 3D Point Cloud Data https://www.youtube.co ...
- Eclipse插件的卸载和安装
Eclipse 卸载插件: 右下角会有卸载进度 卸载完后 然后需要重启 Eclipse安装插件 选择本地下载好的插件 点击 Ok 插件下载地址:https://jaist.dl.sourceforge ...
- 使用TestFlight测试时候相关内容
前言:记录一下使用TestFlight测试时候相关内容 场景:在我们添加测试员:给测试员发送了邀请:测试员使用TestFlight的时候,其实是有崩溃的次数的记录的,相应的崩溃的信息也是可以查询到的. ...