[原创]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.首 ...
随机推荐
- 三层——vb.net版
经过不懈的努力,我的vb.net 版的三层登陆终于实现了.下面将我的成果向大家展示一下. 原则 vb.net的三层登陆跟C#的三层登陆的思想是一样的都是将系统分层--U层只负责与用户 ...
- 基于Spring DM管理的Bundle获取Spring上下文对象及指定Bean对象
在讲述服务注册与引用的随笔中,有提到context.getServiceReferences()方法,通过该方法可以获取到OSGI框架容器中的指定类型的服务引用,从而获取到对应的服务对象.同时该方法还 ...
- 配置NFS服务与tftp服务
在VMware在安装ubuntu的图解 链接:http://pan.baidu.com/s/1jIofvYu 密码:da72 图解里已经解压安装了VMware Tools,接下来必须要安装的就是NFS ...
- HBase介绍
欢迎和大家交流技术相关问题:邮箱: jiangxinnju@163.com博客园地址: http://www.cnblogs.com/jiangxinnjuGitHub地址: https://gith ...
- vc中Error spawning cl.exe错误的解决方法.
可能很多人在安装VC 6.0后有过点击“Compile”或者“Build”后被出现的 “Compiling... ,Error spawning cl.exe”错误提示给郁闷过.很多人的 选择是重装, ...
- linux下php开发环境搭建(nginx+php+mysql)
安装前准备工作 先安装一些必要的类库 yum install -y wget zlib-devel bzip2-devel curl-devel openssl openssl-devel vim ...
- 【转】搜索引擎选择: Elasticsearch与Solr
原文地址:http://i.zhcy.tk/blog/elasticsearchyu-solr/ Elasticsearch简介 Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助 ...
- 多线程简介及GCD的使用
多线程简介: 对于任意一个iOS应用,程序运行起来后,默认会产生一个主线程(MainThread),主线程专门用来处理UIKit对象的操作,如界面的显示与更新.处理用户事件触发的操作等等.(记忆这点, ...
- 微信小程序之提高应用速度小技巧
作者:vicyao, 腾讯web前端开发 高级工程师商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/294.htm ...
- oracle查看用户所占用的表空间
select * from (select owner || '.' || tablespace_name name, sum(b) g from (select owner, t.segment_n ...