三、hbase JavaAPI
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的更多相关文章
- HBase JavaAPI
一.概念 1.对HBase JavaAPI的概述: 01.hbase使用java语言编写,自然支持java编程 02.支持CRUD操作 03.JavaAPI包含了所有的hbase的shell,甚至比这 ...
- Apache Hadoop集群离线安装部署(三)——Hbase安装
Apache Hadoop集群离线安装部署(一)——Hadoop(HDFS.YARN.MR)安装:http://www.cnblogs.com/pojishou/p/6366542.html Apac ...
- Hbase(三) hbase协处理器与二级索引
一.协处理器—Coprocessor 1. 起源Hbase 作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执 行求和.计数.排序等操作.比如,在旧版本的(<0.92)Hb ...
- HBase JavaAPI操作示例
package testHBase; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBase ...
- Hadoop集群(三) Hbase搭建
前面已经完成Zookeeper和HDFS的安装,本文会详细介绍Hbase的安装步骤.以及安装过程中遇到问题的汇总. 系列文章: Hadoop集群(一) Zookeeper搭建 Hadoop集群(二 ...
- Hbase javaAPI(工具类)表的增删改查
建立连接: package Init; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; i ...
- Hbase javaAPI报错:Callexception,tries=10,retries=35,started=38465msago
[client.RpcRetryingCaller(142)]Callexception,tries=10,retries=35,started=38465msago,cancelled=false, ...
- HBase学习(一):认识HBase
一.大数据发展背景 现今是数据飞速膨胀的大数据时代,大数据强调3V特征,即Volume(量级).Varity(种类)和Velocity(速度). ·Volume(量级):TB到ZB. ·Varity( ...
- 分享知识-快乐自己:HBase编程
HBase编程: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBa ...
随机推荐
- leecode刷题(21)-- 删除链表的倒数第N个节点
leecode刷题(21)-- 删除链表的倒数第N个节点 删除链表的倒数第N个节点 描述: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2- ...
- CodeForces1142/1143题解
题面 传送门(1143) 传送门(1142) \(1143A\) 咕咕 n=read(); fp(i,1,n)a[i]=read(),++cnt[a[i]]; fp(i,1,n)if(++c[a[i] ...
- mxonline实战7,模板继承和模板标签
对应github地址:https://github.com/pshyms/django/tree/master/mxonline/7_day 一. 定制不同页面中样式相同,内容不同的模 ...
- python 之 比较哪个数据大小
#定义一个字典info={}#定义比较的人数n=int(input("请输入你要比较的人数"))#循环while(n): #输入a,b 两个数据 ,分别代表学号 和分数 # 把输入 ...
- 基于python复制蓝鲸作业平台
前言 去年看武sir代码发布的视频无意中听到了蓝鲸平台但是一直没深究,前一段时间公司要搞一个代码发布平台,但是需求变化很多一直找不到一个很好的参考 模板,直到试用了一下蓝鲸作业平台发现“一切皆作业”的 ...
- leetcode-867-Transpose Matrix(矩阵由按行存储变成按列存储)
题目描述: Given a matrix A, return the transpose of A. The transpose of a matrix is the matrix flipped o ...
- 功能一: 数据库访问DAO层方法定义
功能1: 今天到现在为止 实战课程的访问量 yyyyMMdd courseID 使用数据库来进行存储我们的统计结果 Spark Streaming把统计结果写入到数据库里面 可视化前端根据: yyyy ...
- L08-Linux解决Device eth0 does not seem to be present,delaying initialization问题
问题前提: 在VirtualBox中克隆Linux服务器,如下,由Centos6.5_Base克隆得到node01服务器,采用的是完全克隆的方式,克隆时重新初始化MAC地址. 原服务器Centos6. ...
- L03-Linux RHEL6.5系统中配置本地yum源
1.将iso镜像文件上传到linux系统.注意要将文件放在合适的目录下,因为后面机器重启时还要自动挂载,所以此次挂载成功之后该文件也不要删除. 2.将iso光盘挂载到/mnt/iso目录下. (1)先 ...
- postgresql客户端连接错误的解决方法【转】
今天在重新设置postgresql服务器以后却发现启动不了服务器.错误如下:psql: could not connect to server: No such file or directory ...