三、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 ...
随机推荐
- kali linux之无线渗透
无线技术变化大,难度大,既新鲜刺激,又压力山大.一半协议 一半理论 无线技术特点: 行业发展迅猛 互联网的重要入口 边界模糊 安全实施缺失而且困难 对技术不了解造成配置不当 企业网络私自接入ap破坏 ...
- fd - 更好的 find 命令
欢迎关注我的公众号 spider-learn fd(https://github.com/sharkdp/fd) 是 find 命令的一个更现代的替换. 对比一下 查找名字含有某个字符的文件 OLD ...
- 双绞线的制作(常用568B)
EIA/TIA的布线标准中规定了两种双绞线的线序568A与568B 标准568A: 绿白—1 绿—2 橙白—3 蓝—4 蓝白—5 橙—6 棕白—7 棕--8 标准568B: 橙白—1 ...
- 学习xss模拟构造攻击(第一篇)
本文作者:i春秋签约作家——rosectow 0×00前言 XSS又名叫CSS全程(cross site scriptting),中文名跨站脚本攻击,目前网站的常见漏洞之一,它的危害没有像上传漏洞,s ...
- 爬虫3:requests库
一个简单易用的http库,多用于第一步,爬取网站源码 简单例子 import requests response = requests.get('https://www.baidu.com ...
- Oracle数据库PL/SQL那点事情---修改过电脑的用户名
在安装Oracle数据库的PL/SQL工具时候,电脑名称是重装系统后自动生成的用户名名称,作为程序员,有很强的强迫症,就想利用自己的英文名称作为自己电脑的名称,所以就修改了电脑的名称:结果PL/SQL ...
- Python 的 GIL 是什么鬼,多线程性能究竟如何
作者:卢钧轶(cenalulu) 本文原文地址: http://cenalulu.github.io/python/gil-in-python/ 前言:博主在刚接触Python的时候时常听到GIL这个 ...
- python web开发学习笔记一:javascript基础
一.认识js: 能进入到软件所实习是我的最大的收获,也是我的荣幸,我相信努力付出一定能够换回收获. 项目最先开始的是接触到web前端的一些内容,我们需要利用flask搭建应该有的框架.我有一些pyth ...
- Hadoop虚拟机的jdk版本和本地eclipse的版本不一致怎么办
在本周学习Hadoop遇到了一个问题,困扰了半天,本人在安装Hadoop时是按照视频来的,结果发现Hadoop上的jdk版本和本地eclipse的版本不一致,导致本地的程序到处jar包传到虚拟机上运用 ...
- js 多个异步 的并发控制
今天在群里看到一个人发的面试题: 1,请实现如下的函数,可以批量请求数据,所有的URL地址在urls参数中,同时可以通过max参数 控制请求的并发度.当所有的请求结束后,需要执行callback回调. ...