三、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 ...
随机推荐
- 【文文殿下】后缀自动机(SAM)求最长公共子串的方法
首先,在A 串上建立一个SAM,然后用B串在上面跑.具体跑的方法是: 从根节点开始,建立一个指针 p ,指着B串的开头,同步移动指针,沿着SAM的边移动,如果可以移动(即存在边)那么万事皆好,直接le ...
- 【timeisprecious】【JavaScript 】JavaScript RegExp 对象
JavaScript>RegExp正则表达式 1 .From Runnob JavaScript RegExp 对象(概览) JavaScript RegExp 对象(教程) RegExp 对象 ...
- python 快速幂求斐波那契数列
先占坑 后面再写详细的 import numpy as np def pow(n): a = np.array([[1,0],[0,1]]) b = np.array([[1,1],[1,0]]) n ...
- IDEA 引入外部jar包 pom 配置,防止打包失败
1. <!--添加外部依赖--> <dependency> <groupId>Ice</groupId> ...
- day 12 课后作业
# -*- coding: utf-8 -*-# @Time : 2019/1/4 20:49# @Author : Endless-cloud# @Site : # @File : day 12 课 ...
- leetcode-40-组合总和 II
题目描述: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只 ...
- 【性能测试】:监控Mysql数据库方式
1, 进入到/etc目录下,打开my.cnf文件,在文件最后添加几行 slow_query_log = ON //打开慢查询开关 slow_q ...
- [性能测试]:关于MQ协议脚本开发
消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们. 银行脚本使用MQ通信的较多,下面介绍一个MQ的脚本: M ...
- DIV盒子介绍
1.盒子模型=网页布局的基石,由四部分组成: 边框(border).外边距(margin).内边距(padding).盒子中的内容(content) 2.设置顺序是顺时针:上.右.下.左. 三个值(上 ...
- 【文档】七、Mysql Binlog不同事件类型的事件内容
下面主要讲述了每个类型的事件中的固定和可变部分的数据. Start_log_event_v3/START_EVENT_V3 这个事件出现在v1或v3的binlog文件的开头部分.对于4.0和4.1版本 ...