[原创]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.首 ...
随机推荐
- localStorage , sessionStorage ,cookie 使用介绍
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- seq语句随笔
1.UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果. 2.UNION ALL只是简单的将两个结果合并后就返回.这样,如果返回的两个结 ...
- STM32单片机学习心得——概述
我校的课程真是跟不上时代发展,甚至还在教授8051/8052单片机的内容,于是不甘寂寞的我就自己踏入了STM32单片机的坑-- 首先,我现在大二,刚学完模拟电子技术,还没有学习数字电路技术,于是自学单 ...
- block之---应用场景:做参数和返回值
1.做参数 什么时候使用Block充当参数? 封装一个功能,这个功能做什么事情由外界决定,但是什么时候调用由内部决定,这时候就需要把Block充当参数去使用. 模拟需求: 封装一个计算器,怎么计算由外 ...
- Angular实现购物车计算
使用AngularJS实现一个简单的购物车,主要感受强大的双向绑定和只关注对象不关注界面特性. 先看看界面: 点击+-操作和删除: 这些全部只需要操作数据源就行,不需要关注界面. 实现过程: 一.使用 ...
- 转:微信开发之使用java获取签名signature(贴源码,附工程)
微信开发之使用java获取签名signature(贴源码,附工程) 标签: 微信signature获取签名 2015-12-29 22:15 6954人阅读 评论(3) 收藏 举报 分类: 微信开发 ...
- Angular企业级开发(7)-MVC之控制器
1.MVC中的控制器 AngularJS的控制器主要为了把模型和视图连接在一起.大多数业务逻辑操作都会放在视图对应的控制器中.当然如果我们能够把业务逻辑放到后端的REST服务中,就可以开发轻量级Ang ...
- WP8.1程序开发中,如何加载本地文件资源或安装在程序包中的资源。
Web 要访问来自 Web 的文件,你可以使用标准的绝对 HTTP URI: <img src="http://www.contoso.com/images/logo.png" ...
- 使用StyleCop.Analyzers进行代码审查
为什么要进行代码审核? 提早发现代码中的BUG,避免将BUG带到生产环境 极大的提高软件质量,以及可维护性 统一代码规范.提高可读性,减少新加入成员的熟悉时间 加速个人和团队的成长,知识和经验的积累 ...
- mysql 常用命令集锦
Mysql安装目录数据库目录/var/lib/mysql/配置文件/usr/share/mysql(mysql.server命令及配置文件)相关命令/usr/bin(mysqladmin mysqld ...