[原创]HBase学习笔记(3)- Java程序访问HBase
这里介绍使用java api来访问和操作HBase,例如create、delete、select、update等操作。
1.HBase配置
配置HBase使用的zookeeper集群地址和端口。
private static Configuration configuration;
static {
configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.property.clientPort", "2181");
configuration.set("hbase.zookeeper.quorum", "ZK1,ZK2,ZK3");
}
2.创建表
// 创建表
public static boolean create(String tableName, String columnFamily) {
HBaseAdmin admin = null;
try {
admin = new HBaseAdmin(configuration);
if (admin.tableExists(tableName)) {
System.out.println(tableName + " exists!");
return false;
} else {
// 逗号分隔,可以有多个columnFamily
String[] cfArr = columnFamily.split(",");
HColumnDescriptor[] hcDes = new HColumnDescriptor[cfArr.length];
for (int i = 0; i < cfArr.length; i++) {
hcDes[i] = new HColumnDescriptor(cfArr[i]);
}
HTableDescriptor tblDes = new HTableDescriptor(TableName.valueOf(tableName));
for (HColumnDescriptor hc : hcDes) {
tblDes.addFamily(hc);
}
admin.createTable(tblDes);
System.out.println(tableName + " create successfully!");
return true;
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
3.插入数据
指定表名、rowkey、cf、qualifier和value,插入数据到HBase。
public static boolean put(String tableName, String rowkey, String columnFamily, String qualifier, String value) {
try {
HTable table = new HTable(configuration, tableName);
Put put = new Put(rowkey.getBytes());
put.add(columnFamily.getBytes(), qualifier.getBytes(), value.getBytes());
table.put(put);
System.out.println("put successfully! " + rowkey + "," + columnFamily + "," + qualifier + "," + value);
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
4.查询数据
4.1.查询指定rowkey的整条记录,返回Result对象。
// 查询
public static Result getResult(String tableName, String rowkey) {
System.out.println("get result. table=" + tableName + " rowkey=" + rowkey);
try {
HTable table = new HTable(configuration, tableName);
Get get = new Get(rowkey.getBytes());
return table.get(get);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
4.2.展现Result内容
// Result转换成Map形式,便于输出
private static Map<String, Object> result2Map(Result result) {
Map<String, Object> ret = new HashMap<String, Object>();
if (result != null && result.listCells() != null) {
for (Cell cell : result.listCells()) {
String key = Bytes.toString(CellUtil.cloneQualifier(cell));
String value = Bytes.toString(CellUtil.cloneValue(cell));
System.out.println(key + " => " + value);
ret.put(key, value);
}
}
return ret;
}
4.3.指定qualifier查询数据
// 查询
public static byte[] get(String tableName, String rowkey, String qualifier) {
System.out.println("get result. table=" + tableName + " rowkey=" + rowkey + " qualifier=" + qualifier);
Result result = getResult(tableName, rowkey);
if (result != null && result.listCells() != null) {
for (Cell cell : result.listCells()) {
String key = Bytes.toString(CellUtil.cloneQualifier(cell));
if (key.equals(qualifier)) {
String value = Bytes.toString(CellUtil.cloneValue(cell));
System.out.println(key + " => " + value);
return CellUtil.cloneValue(cell);
}
}
}
return null;
}
5.查看全表数据
如下只要指定表名,就可以通过Scan来查看全表数据。
// 查看全表
public static List<Map<String, Object>> scan(String tableName) {
System.out.println("scan table " + tableName);
try {
HTable table = new HTable(configuration, tableName);
Scan scan = new Scan();
ResultScanner rs = table.getScanner(scan);
List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
for (Result r : rs) {
Map<String, Object> m = result2Map(r);
StringBuilder sb = new StringBuilder();
for(String k : m.keySet()) {
sb.append(k).append("=>").append(m.get(k)).append(" ");
}
System.out.println(sb.toString());
resList.add(m);
}
return resList;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
6.列出HBase中所有表名
// 列出所有表
public static List<String> list() {
System.out.println("list tables.");
try {
HBaseAdmin admin = new HBaseAdmin(configuration);
TableName[] tableNames = admin.listTableNames();
List<String> tblArr = new ArrayList<String>();
for (int i = 0; i < tableNames.length; i++) {
tblArr.add(tableNames[i].getNameAsString());
System.out.println("Table: " + tableNames[i].getNameAsString());
}
return tblArr;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
7.删除指定qualifier内容
// 指定qualifier删除内容
public static boolean deleteQualifier(String tableName, String rowkey, String columnFamily, String qualifier) {
System.out.println("delete qualifier. table=" + tableName
+ " rowkey=" + rowkey + " cf=" + columnFamily + " qualifier=" + qualifier);
try {
HBaseAdmin admin = new HBaseAdmin(configuration);
if (admin.tableExists(tableName)) {
HTable table = new HTable(configuration, tableName);
Delete delete = new Delete(rowkey.getBytes());
delete.deleteColumn(columnFamily.getBytes(), qualifier.getBytes());
table.delete(delete);
}
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
8.删除指定rowkey的记录
// 指定rowkey删除记录
public static boolean deleteRow(String tableName, String rowkey) {
System.out.println("delete row. table=" + tableName + " rowkey=" + rowkey);
try {
HBaseAdmin admin = new HBaseAdmin(configuration);
if (admin.tableExists(tableName)) {
HTable table = new HTable(configuration, tableName);
Delete delete = new Delete(rowkey.getBytes());
table.delete(delete);
}
System.out.println(tableName + ", " + rowkey + " delete successfully!");
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
9.删除指定column family
// 删除columnfamily
public static boolean deleteColumnFamily(String tableName, String columnFamily) {
System.out.println("delete column family. table=" + tableName + " cf=" + columnFamily);
try {
HBaseAdmin admin = new HBaseAdmin(configuration);
if (admin.tableExists(tableName)) {
admin.disableTable(tableName);
admin.deleteColumn(tableName, columnFamily);
admin.enableTable(tableName);
}
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
10.删除表
删除指定表名。
// 删除表
public static boolean delete(String tableName) {
System.out.println("delete table " + tableName);
try {
HBaseAdmin admin = new HBaseAdmin(configuration);
if (admin.tableExists(tableName)) {
admin.disableTable(tableName);
admin.deleteTable(tableName);
}
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
11.一个测试案例
public class HBaseTest {
public static void main(String[] args) {
HBaseUtils.create("test1", "cf1,cf2,cf3");
HBaseUtils.put("test1", "row1", "cf1", "field1", "value1");
HBaseUtils.put("test1", "row1", "cf1", "field2", "value2");
HBaseUtils.put("test1", "row1", "cf2", "field3", "value3");
HBaseUtils.put("test1", "row2", "cf1", "field4", "value4");
HBaseUtils.list();
HBaseUtils.get("test1", "row1");
HBaseUtils.get("test1", "row2", "cf1");
HBaseUtils.deleteRow("test1", "row2");
HBaseUtils.scan("test1");
// HBaseUtils.delete("test1");
HBaseUtils.list();
}
}
[原创]HBase学习笔记(3)- Java程序访问HBase的更多相关文章
- [原创] hadoop学习笔记:wordcout程序实践
看了官网上的示例:但是给的不是很清楚,这里依托官网给出的示例,加上自己的实践,解析worcount程序的操作 1.首先你的确定你的集群正确安装,并且启动你的集群,应为这个是hadoop2.6.0,所以 ...
- JAVA API访问Hbase org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=32
Java使用API访问Hbase报错: 我的hbase主节点是spark1 java代码访问hbase的时候写的是ip 结果运行程序报错 不能够识别主机名 修改主机名 修改主机hosts文 ...
- 学习笔记之Java程序设计实用教程
Java程序设计实用教程 by 朱战立 & 沈伟 学习笔记之JAVA多线程(http://www.cnblogs.com/pegasus923/p/3995855.html) 国庆休假前学习了 ...
- HBASE学习笔记(四)
这两天把要前几天的知识点回顾一下,接下来我会用自己对知识点的理解来写一些东西 一.知识点回顾 1.hbase集群启动:$>start-hbase.sh ===>hbase-daemon.s ...
- HBase学习笔记之HBase的安装和配置
HBase学习笔记之HBase的安装和配置 我是为了调研和验证hbase的bulkload功能,才安装hbase,学习hbase的.为了快速的验证bulkload功能,我安装了一个节点的hadoop集 ...
- HBase学习笔记1 - 如何编写高性能的客户端Java代码
转载请标注原链接:http://www.cnblogs.com/xczyd/p/5577124.html 客户在使用HBase的时候,经常会抱怨说写入太慢,并发上不去等等.从前我遇到这种情况,一般都二 ...
- HBase学习笔记——Java API操作
1.1. 配置 HBaseConfiguration 包:org.apache.hadoop.hbase.HBaseConfiguration 作用:通过此类可以对HBase进行配置 用法实例: C ...
- [原创]HBase学习笔记(1)-安装和部署
HBase安装和部署 使用的HBase版本是1.2.4 1.安装步骤(默认hdfs已安装好) # 下载并解压安装包 cd tools/ tar -zxf hbase-1.2.4-bin.tar.gz ...
- [原创]HBase学习笔记(4)- 数据导入
需要分别从Oracle和文本文件往HBase中导入数据,这里介绍几种数据导入方案. 1.使用importTSV导入HBase importTSV支持增量导入.新数据插入,已存在数据则修改. 1.1.首 ...
随机推荐
- 学习 OpenStack 的方法论 - 每天5分钟玩转 OpenStack(150)
作为 OpenStack 的核心教程,我们已经到了最后总结的部分. OpenStack 目前已经有好几十个模块,本教程讨论的是最最重要的核心模块:Keystone,Nova,Glance,Cinder ...
- java异常的一些小知识
异常,我们软件都需要面对的一个问题.如何让你的软件更加健壮呢?这是一个值得我们考虑的问题.这里主要为大家介绍一下异常是什么,异常是如何产生的,如何将异常抛出,如何捕获异常,对于异常应该如何处理的个人一 ...
- python 模块加载错误总结
在运行yum时提示如下错误 There was a problem importing one of the Python modules required to run yum. The error ...
- js-组件-轮播
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- MASM32使用教程
代码如果你在用汇编语言来开发windows下的程序的话,MASM32是很好的选择. (Masm32下载地址请用google搜索罢.) 工欲善其事,必先利其器. 本文主要针对masm32 v8来说明三点 ...
- API模板
#include <windows.h> #include <windowsx.h> #define DIVISIONS 5 LRESULT CALLBACK WndProc ...
- BZOJ 1033: [ZJOI2008]杀蚂蚁antbuster(模拟)
坑爹的模拟题QAQ DEBUG多了1kb QAQ 按题意做就行了 注意理解题意啊啊啊啊 尼玛输出忘换行wa了3次QAQ CODE: #include<cstdio>#include< ...
- BZOJ 1009 :[HNOI2008]GT考试(KPM算法+dp+矩阵快速幂)
这道到是不用看题解,不过太经典了,早就被剧透一脸了 这道题很像ac自动机上的dp(其实就是) 然后注意到n很大,节点很小,于是就可以用矩阵快速幂优化了 时间复杂度为o(m^3 *log n); 蒟蒻k ...
- 康复计划#4 快速构造支配树的Lengauer-Tarjan算法
本篇口胡写给我自己这样的老是证错东西的口胡选手 以及那些想学支配树,又不想啃论文原文的人- 大概会讲的东西是求支配树时需要用到的一些性质,以及构造支配树的算法实现- 最后讲一下把只有路径压缩的并查集卡 ...
- linux下keepalived 安装配置
keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层.第4层和第7层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务 ...