这里介绍使用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的更多相关文章

  1. [原创] hadoop学习笔记:wordcout程序实践

    看了官网上的示例:但是给的不是很清楚,这里依托官网给出的示例,加上自己的实践,解析worcount程序的操作 1.首先你的确定你的集群正确安装,并且启动你的集群,应为这个是hadoop2.6.0,所以 ...

  2. JAVA API访问Hbase org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=32

    Java使用API访问Hbase报错: 我的hbase主节点是spark1   java代码访问hbase的时候写的是ip 结果运行程序报错 不能够识别主机名 修改主机名     修改主机hosts文 ...

  3. 学习笔记之Java程序设计实用教程

    Java程序设计实用教程 by 朱战立 & 沈伟 学习笔记之JAVA多线程(http://www.cnblogs.com/pegasus923/p/3995855.html) 国庆休假前学习了 ...

  4. HBASE学习笔记(四)

    这两天把要前几天的知识点回顾一下,接下来我会用自己对知识点的理解来写一些东西 一.知识点回顾 1.hbase集群启动:$>start-hbase.sh ===>hbase-daemon.s ...

  5. HBase学习笔记之HBase的安装和配置

    HBase学习笔记之HBase的安装和配置 我是为了调研和验证hbase的bulkload功能,才安装hbase,学习hbase的.为了快速的验证bulkload功能,我安装了一个节点的hadoop集 ...

  6. HBase学习笔记1 - 如何编写高性能的客户端Java代码

    转载请标注原链接:http://www.cnblogs.com/xczyd/p/5577124.html 客户在使用HBase的时候,经常会抱怨说写入太慢,并发上不去等等.从前我遇到这种情况,一般都二 ...

  7. HBase学习笔记——Java API操作

    1.1.  配置 HBaseConfiguration 包:org.apache.hadoop.hbase.HBaseConfiguration 作用:通过此类可以对HBase进行配置 用法实例: C ...

  8. [原创]HBase学习笔记(1)-安装和部署

    HBase安装和部署 使用的HBase版本是1.2.4 1.安装步骤(默认hdfs已安装好) # 下载并解压安装包 cd tools/ tar -zxf hbase-1.2.4-bin.tar.gz ...

  9. [原创]HBase学习笔记(4)- 数据导入

    需要分别从Oracle和文本文件往HBase中导入数据,这里介绍几种数据导入方案. 1.使用importTSV导入HBase importTSV支持增量导入.新数据插入,已存在数据则修改. 1.1.首 ...

随机推荐

  1. oracle decode函数的用法

    含义解释: decode(字段,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 用法如下:IF 字段=值1 返回 返回值1ELSIF 字段=值2 返回 返回值2 ......ELSIF ...

  2. ESLint 规则详解(一)

    前端界大神 Nicholas C. Zakas 在 2013 年开发的 ESLint,极大地方便了大家对 Javascript 代码进行代码规范检查.这个工具包含了 200 多条 Javascript ...

  3. bootstrap_下拉菜单+头部

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 为什么使用enable_shared_from_this——shared_ptr两类错误

    在使用C++实现弱回调时,订阅者应当维护一系列发布者的weak_ptr,而发布者注册回调时要传出this的shared_ptr指针,流行的实现方法是使用std::enable_shared_from_ ...

  5. ES(二): Build ES Cluster on Azure VM

    目录: 系统环境准备 安装ES集群 安装Kibana 安装x-pack 安装head 系统环境准备 参见: HDP2.4安装(二):Centos7配置 修改network: 修改hosts: 配置ss ...

  6. LruCache原理解析

    LruCache是一个泛型类,它内部采用LinkedHashMap,并以强引用的方式存储外界的缓存对象,提供get和put方法来完成缓存的获取和添加操作.当缓存满时,LruCache会移除较早的缓存对 ...

  7. C++之priority_queue

    前言 最近越来越觉得自己总结的事情越来越流水账,因此,我需要提高我总结内容的精度.所以可能会导致写博客的时间会延长一些. 之前从没用过优先队列,刷算法题目的时候才开始了解的,所以做个总结.什么情况下使 ...

  8. linux-网络数据包抓取-tcpdump

    用法格式: tcpdump [-i 网卡]  [选项]  '表达式' 选项说明如下: -i:interface 监听的网卡. -nn:表示以ip和port的方式显示来源主机和目的主机,而不是用主机名和 ...

  9. Ognl值栈对象及struts标签

    用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面 ...

  10. Android 增量更新

    title: Android NDK之增量更新 1.增量更新使用到的库bsdiff和bzip2 bsdiff库是一个开源的二进制差分工具,通过对比Apk的二进制,从而进行差分包的生成. bsdiff库 ...