三、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 ...
随机推荐
- 视频video遇到一些坑
1.video层级最高问题 解决方案思路:当点击其他按钮触发事件时,视频层级挡住其他外层,比如会挡住弹窗,这是应该让视频暂停播放且隐藏,这是视频这个地方会空一个位置可以放一张封面占位,这样就解决视频层 ...
- APScheduler定时任务
python模块(APScheduler定时任务) APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时 ...
- CF77E Martian Food(圆的反演or 笛卡尔定理+韦达定理)
题面 传送门 这题有两种方法(然而两种我都想不到) 方法一 前置芝士 笛卡尔定理 我们定义一个圆的曲率为\(k=\pm {1\over r}\),其中\(r\)是圆的半径 若在平面上有两两相切,且六个 ...
- mybatis常用默认配置
设置参数 描述 有效值 默认值 cacheEnable 该配置影响所有映射器中配置的缓存全局开关 true.false true lazyLoadingEnable 延迟加载的全局开关.当它开启时,所 ...
- Oracle执行SQL语句的过程
转载至:http://blog.csdn.net/aqszhuaihuai/article/details/7024551 当我们提交一条sql语句时,Oracle会做哪些操作呢? Oracle会为每 ...
- python3的全局变量和局部变量
局部变量 定义在函数体内部的变量称为局部变量 函数的形参也是局部变量 局部变量的作用范围只在声明该局部变量的函数体内 局部变量在函数调用时被创建,在函数调用完成后自动销毁 全局变量 定义在函数体外,模 ...
- Android屏幕尺寸单位转换
最近在看Android群英传这本书,书中有一节涉及到了,屏幕尺寸与单位.觉得以后可能会用到,做个笔记. PPI(pixels per inch) ,又称为DPI,它是由对角线的像素点数除以屏幕的大小得 ...
- main:处理命令行选项
有时我们需要给main函数传递实参, 我们可以把命令行选项通过两个形参传递给main函数: int mian(int argc, char *argv[]) { ... }; argv是argumen ...
- 关于Vue中main.js,App.vue,index.html之间关系进行总结
在初始化的Vue项目中,我们最先接触到的就是main.js,App.vue,index.html这三个文件,我们从培训视频或者官方文档上可以了解到: index.html---主页,项目入口 App. ...
- start and end call use itelephony and how to pick up a call
Bluetooth Headset service: 但想想而已. 没有蓝牙耳机如何调用它来接听电话.想想有点搞笑. 网上扒的通过添加一个ITelephony.aidl来反射,注意aidl的写法,如果 ...