hbase是Java编写的,当然也提供了Java的API来操作hbase。

如果你是使用虚拟机来安装配置hbase那么你需要配置一下hostname,不然JavaAPI访问虚拟机的时候会无法连接,请参考:

https://www.cnblogs.com/lay2017/p/9953371.html

同时请注意关闭防火墙,如果你的虚拟机启动会默认开启防火墙的话,你需要关闭。

一、依赖

hbase客户端依赖如下:

<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.0</version>
</dependency>

注意:hbase官方版本截止本文已经是2.1.1,但是这里使用1.2.0是由于官方文档并没有及时更新文档,所以对于client的使用你只能看到javadocs很不方便,亦或者你使用它文档的类的时候发现都是deprecated的线。

二、代码示例

以下的代码约200行,但内容并不复杂,仅有以下三块内容

1、在static块里面初始化了hbase的连接

2、main方法里面调用增删改查等JavaAPI接口,各个方法实现相应的内容

3、最后还有一个close方法

我们先看一下输出:

从输出内容我们看到,对表进行了删除、创建、列表查询,然后对表的单元格数据进行了新增、查询、遍历、删除

完整代码如下

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*; import java.io.IOException;
import java.util.Arrays; /**
* @Description java api
* @Author lay
* @Date 2018/11/12 13:10
*/
public class HbaseJavaApiDemo { private static Configuration configuration;
private static Connection connection;
private static Admin admin;
private static final String ENCODE = "UTF-8"; static {
// 创建configuration
configuration = HBaseConfiguration.create();
// 设置HBase的zk地址和端口
configuration.set("hbase.zookeeper.quorum", "master");
configuration.set("hbase.zookeeper.property.clientPort", "2181");
try {
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) throws Exception {
try {
String table = "t_user";
String row = "row1";
String columnFamily = "cf_name";
String column = "firstName";
String value = "lay";
deleteTable(table);
createOrOverrideTable(table, columnFamily);
listTables();
putData(table, row, columnFamily, column, value);
getData(table, row, columnFamily, column);
scanData(table);
deleteData(table, row, columnFamily, column);
} finally {
close();
}
} /**
* 创建表
* @param table 表名
* @param columnFamily 列簇
* @throws IOException
*/
public static void createOrOverrideTable(String table, String columnFamily) throws IOException {
TableName tableName = TableName.valueOf(table);
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
// 添加一个列簇
HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(columnFamily);
tableDescriptor.addFamily(hColumnDescriptor);
// 存在则删除
deleteTable(table);
admin.createTable(tableDescriptor);
System.out.println(table + " 表创建完成");
} /**
* 列出所有表
* @throws IOException
*/
public static void listTables() throws IOException {
HTableDescriptor[] hTableDescriptors = admin.listTables();
System.out.println("列出所有的表:");
for (HTableDescriptor t : hTableDescriptors) {
System.out.println(t.getTableName());
}
} /**
* 删除表
* @param table 表名
* @throws IOException
*/
public static void deleteTable(String table) throws IOException {
TableName tableName = TableName.valueOf(table);
if (admin.tableExists(tableName)) {
admin.disableTable(tableName);
admin.deleteTable(tableName);
System.out.println(table + " 存在并执行删除");
}
} /**
* 添加数据
* @param table 表名
* @param row 行
* @param columnFamily 列簇
* @param column 列
* @param value 值
* @throws IOException
*/
public static void putData(String table, String row, String columnFamily, String column, String value) throws IOException {
TableName tableName = TableName.valueOf(table);
Put put = new Put(row.getBytes(ENCODE));
put.addColumn(columnFamily.getBytes(ENCODE), column.getBytes(ENCODE), value.getBytes(ENCODE));
Table iTable = connection.getTable(tableName);
iTable.put(put);
iTable.close();
System.out.println("数据添加完毕");
} /**
* 查询数据
* @param table
* @param row
* @param columnFamily
* @param column
* @throws IOException
*/
public static void getData(String table, String row, String columnFamily, String column) throws IOException {
TableName tableName = TableName.valueOf(table);
Get get = new Get(row.getBytes(ENCODE));
Table iTable = connection.getTable(tableName);
Result result = iTable.get(get);
byte[] data = result.getValue(columnFamily.getBytes(ENCODE), column.getBytes(ENCODE));
System.out.println("查询的数据:" + new String(data));
iTable.close();
} /**
* 删除数据
* @param table
* @param row
* @param columnFamily
* @param column
* @throws IOException
*/
public static void deleteData(String table, String row, String columnFamily, String column) throws IOException {
TableName tableName = TableName.valueOf(table);
Delete delete = new Delete(row.getBytes(ENCODE));
delete.addColumn(columnFamily.getBytes(ENCODE), column.getBytes(ENCODE));
Table iTable = connection.getTable(tableName);
iTable.delete(delete);
iTable.close();
System.out.println("数据删除完毕");
} /**
* 扫描数据
* @param table
* @throws IOException
*/
public static void scanData(String table) throws IOException {
TableName tableName = TableName.valueOf(table);
Scan scan = new Scan();
Table iTable = connection.getTable(tableName);
ResultScanner resultScanner = iTable.getScanner(scan);
for (Result r : resultScanner) {
Cell[] cells = r.rawCells();
System.out.println("遍历的数据结果:");
Arrays.stream(cells).forEach(cell -> {
String value = new String(CellUtil.cloneValue(cell));
System.out.println(value);
});
}
iTable.close();
} /**
* 关闭admin和connection
*/
public static void close() {
if (admin != null) {
try {
admin.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if (connection != null) {
try {
connection.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
} }

三、hbase JavaAPI的更多相关文章

  1. HBase JavaAPI

    一.概念 1.对HBase JavaAPI的概述: 01.hbase使用java语言编写,自然支持java编程 02.支持CRUD操作 03.JavaAPI包含了所有的hbase的shell,甚至比这 ...

  2. Apache Hadoop集群离线安装部署(三)——Hbase安装

    Apache Hadoop集群离线安装部署(一)——Hadoop(HDFS.YARN.MR)安装:http://www.cnblogs.com/pojishou/p/6366542.html Apac ...

  3. Hbase(三) hbase协处理器与二级索引

    一.协处理器—Coprocessor 1. 起源Hbase 作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执 行求和.计数.排序等操作.比如,在旧版本的(<0.92)Hb ...

  4. HBase JavaAPI操作示例

    package testHBase; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBase ...

  5. Hadoop集群(三) Hbase搭建

    前面已经完成Zookeeper和HDFS的安装,本文会详细介绍Hbase的安装步骤.以及安装过程中遇到问题的汇总. 系列文章:   Hadoop集群(一) Zookeeper搭建 Hadoop集群(二 ...

  6. Hbase javaAPI(工具类)表的增删改查

    建立连接: package Init; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; i ...

  7. Hbase javaAPI报错:Callexception,tries=10,retries=35,started=38465msago

    [client.RpcRetryingCaller(142)]Callexception,tries=10,retries=35,started=38465msago,cancelled=false, ...

  8. HBase学习(一):认识HBase

    一.大数据发展背景 现今是数据飞速膨胀的大数据时代,大数据强调3V特征,即Volume(量级).Varity(种类)和Velocity(速度). ·Volume(量级):TB到ZB. ·Varity( ...

  9. 分享知识-快乐自己:HBase编程

    HBase编程: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBa ...

随机推荐

  1. java学习笔记—Servlet技术(11)

    如果大家要开发一个动态的网站,那么就必须要学习一种动态的网页开发技术.那么在SUN提供的JavaEE中主要包含两种开发动态网页的技术:Servlet和JSP技术. Servlet技术简介 Servle ...

  2. BZOJ2961: 共点圆(CDQ分治+凸包)

    题面 传送门 题解 这题解法真是多啊--据说可以圆反演转化为动态插入半平面并判断给定点是否在半平面交中,或者化一下改成给定点判断是否所有点都在某一个半平面内-- 鉴于圆反演我也不会,这里讲一下直接推的 ...

  3. [科普] 借助 everything 扩展教你屏蔽网址或转发网址

    教你屏蔽网址或转发网址 万恶之源 为什么写这篇文章,俺觉得大家应该是有这个需(bai)求(du)的.只是不知道如何操作... 一.屏蔽网址 1.借助系统自带防火墙 (不推荐) Linux 下有 ipt ...

  4. Python 魔法方法查询表 -- 总结篇

    据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个, ...

  5. python基础知识梳理-----4基本数据类型,list ,tuple 操作 ,增删该查,以及其他功能函数

    一:列表的增加 1: append() lis = ['张三','李四','王二码子','李鹏智障'] lis.append('赵武')      # 这种加法是放在最后 print(lis) 输出  ...

  6. BootStrap Modal 点击空白时自动关闭

    本文为大家讲解的是如何禁用 BootStrap Modal 点击空白时自动关闭的方法,感兴趣的同学参考下. 方法如下 $('#myModal').modal({backdrop: 'static', ...

  7. L03-Linux RHEL6.5系统中配置本地yum源

    1.将iso镜像文件上传到linux系统.注意要将文件放在合适的目录下,因为后面机器重启时还要自动挂载,所以此次挂载成功之后该文件也不要删除. 2.将iso光盘挂载到/mnt/iso目录下. (1)先 ...

  8. CF917D. Stranger Trees & TopCoder13369. TreeDistance(变元矩阵树定理+高斯消元)

    题目链接 CF917D:https://codeforces.com/problemset/problem/917/D TopCoder13369:https://community.topcoder ...

  9. (五)Audio子系统之AudioRecord.stop

    在上一篇文章<(四)Audio子系统之AudioRecord.read>中已经介绍了AudioRecord如何获取音频数据,接下来,继续分析AudioRecord方法中的stop的实现 函 ...

  10. 在Windows Server 2008 R2(x64)上安装.NET Framework 4.5 兼谈.NET Framework 4.0 “在服务器核心角色上不受支持”含义

    完成了一个服务器文件监控系统,该系统的核心是一个Windows服务,需要安装在服务器上.由于是Visual Studio 2012开发,为了保证开发的Windows服务可以运行,必须在Windows服 ...