Hbase 简单封装(Hbase 2.0+ API)
前言
封装了一些常用的方法
- 添加一行数据
- 创建表(单列族)
- 创建表(多列族)
- 删除表
- 判断表是否存在
- 获取一行数据(根据rowkey)
- 获取某个列族某个列的某行数据
- 打印出result(方便展示数据)
工具类
类代码:
package com.hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
public class HbaseUtil {
private static ThreadLocal<Connection> connHolder= new ThreadLocal<Connection>();
/**
* 创建connection
* @throws IOException
*/
public static void makeHbaseConnection() throws IOException {
Connection connection = connHolder.get();
if (connection == null){
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum","hadoop100,hadoop101,hadoop102");
conf.set("hbase.zookeeper.property.clientPort", "2181");
connection = ConnectionFactory.createConnection(conf);
connHolder.set(connection);
}
}
/**
* 关闭连接
* @throws IOException
*/
public static void closeHbseConn() throws IOException {
Connection connection = connHolder.get();
if (connection != null){
connection.close();
connHolder.remove();
}
}
/**
* 添加一行数据
* @param tableName 表名
* @param rowKey 行号
* @param family 列族
* @param column 列名
* @param value
* @throws IOException
*/
public static void insertData(String tableName,String rowKey,String family,String column,String value) throws IOException {
//获取连接
Connection connection = connHolder.get();
//获取表对象
Table table = connection.getTable(TableName.valueOf(tableName));
//获取添加对象
Put put = new Put(Bytes.toBytes(rowKey));
//添加一列
put.addColumn(Bytes.toBytes(family),Bytes.toBytes(column),Bytes.toBytes(value));
//添加
table.put(put);
//关闭
table.close();
}
/**
* 创建表
* @param tableName
* @param family
* @throws IOException
*/
public static void createTable(String tableName,String family) throws IOException {
Connection connection = connHolder.get();
//获取admin
Admin admin = connection.getAdmin();
//列族描述对象建造者
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(family));
//设置最大版本号
columnFamilyDescriptorBuilder.setMaxVersions(3);
//列族描述对象
ColumnFamilyDescriptor columnFamilyDescriptor = columnFamilyDescriptorBuilder.build();
//表描述对象建造者
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
//将列族对象添加进表描述
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptor);
//创建表描述对象
TableDescriptor tableDescriptor = tableDescriptorBuilder.build();
//创建表
admin.createTable(tableDescriptor);
admin.close();
}
/**
* 创建表(多列族)
* @param tableName
* @param familys
* @throws IOException
*/
public static void createTable(String tableName,String[] familys) throws IOException {
Connection connection = connHolder.get();
//获取admin
Admin admin = connection.getAdmin();
//表描述对象建造者
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));
for (String family : familys) {
//列族描述对象建造者
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(family));
//设置最大版本号
columnFamilyDescriptorBuilder.setMaxVersions(3);
//将列族对象添加进表描述
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());
}
//创建表描述对象
TableDescriptor tableDescriptor = tableDescriptorBuilder.build();
//创建表
admin.createTable(tableDescriptor);
admin.close();
}
/**
* 根据行号查询数据
* @param tableName
* @param rowKey
* @return
* @throws IOException
*/
public static Result selectDataByRowkey(String tableName,String rowKey) throws IOException {
Connection connection = connHolder.get();
//获取表
Table table = connection.getTable(TableName.valueOf(tableName));
//获取表描述对象
Get get = new Get(Bytes.toBytes(rowKey));
Result result = table.get(get);
return result;
}
/**
* 获取某一列族中某一列的某一行数据
* @param tableName
* @param rowKey
* @param family
* @param column
* @return
* @throws IOException
*/
public static Result selectDataByCol(String tableName,String rowKey,String family,String column) throws IOException {
Connection connection = connHolder.get();
//获取表
Table table = connection.getTable(TableName.valueOf(tableName));
//获取表描述对象
Get get = new Get(Bytes.toBytes(rowKey));
get.addColumn(Bytes.toBytes(family),Bytes.toBytes(column));
Result result = table.get(get);
return result;
}
/**
* 打印result
* @param result
*/
public static void showResult(Result result){
Cell[] cells = result.rawCells();
for (Cell cell : cells) {
System.out.println("family:" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("qualifier:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("row:" + Bytes.toString(CellUtil.cloneRow(cell)));
System.out.println("value:" + Bytes.toString(CellUtil.cloneValue(cell)));
}
}
/**
* 删除表
* @param tableName
* @throws IOException
*/
public static void deleteTable(String tableName) throws IOException {
Connection connection = connHolder.get();
Admin admin = connection.getAdmin();
TableName name = TableName.valueOf(tableName);
if (admin.tableExists(name)){
admin.deleteTable(name);
}
}
/**
* 是否存在表
* @param tableName
* @return
* @throws IOException
*/
public static boolean tableExists(String tableName) throws IOException {
Connection connection = connHolder.get();
Admin admin = connection.getAdmin();
return admin.tableExists(TableName.valueOf(tableName));
}
}
Hbase 简单封装(Hbase 2.0+ API)的更多相关文章
- 一起学HBase——简单介绍HBase各种组件
HBase是谷歌BigTble的开源实现.谷歌的三篇论文拉开了大数据江湖的序幕,铸就了现在以Hadoop为主的大数据技术生态圈.而HBase是开源的大数据数据库,和传统的行式数据库不同的是,HBase ...
- 简单封装kafka相关的api
一.针对于kafka版本 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>ka ...
- Phoenix(sql on hbase)简单介绍
Phoenix(sql on hbase)简单介绍 介绍: Phoenix is a SQL skin over HBase delivered as a client-embedded JDBC d ...
- Hbase简单配置与使用
一. HBase的 二.基于Hadoop的HBase架构 HBase内置有zookeeper,但一般我们会有其他的Zookeeper集群来监管master和regionserver,Zookeeper ...
- Hbase框架原理及相关的知识点理解、Hbase访问MapReduce、Hbase访问Java API、Hbase shell及Hbase性能优化总结
转自:http://blog.csdn.net/zhongwen7710/article/details/39577431 本blog的内容包含: 第一部分:Hbase框架原理理解 第二部分:Hbas ...
- [How to] MapReduce on HBase ----- 简单二级索引的实现
1.简介 MapReduce计算框架是二代hadoop的YARN一部分,能够提供大数据量的平行批处理.MR只提供了基本的计算方法,之所以能够使用在不用的数据格式上包括HBase表上是因为特定格式上的数 ...
- hbase简单操作
hbase有hbase shell以及hbase 客户端api两种方式进行hbase数据库操作: 首先,hbase shell是在linux命令行进行操作,输入hbase shell命令,进入shel ...
- HBase操作(Shell与Java API)
版权声明:本文为博主原创文章,未经博主允许不得转载. 转: http://blog.csdn.net/u013980127/article/details/52443155 下面代码在Hado ...
- 简单封装axios api
可以在代码逻辑中写axios请求,处理请求结果,但是随着项目越来越大,代码会很繁琐,不容易维护,所以,可以把一些在所有请求中都要处理的逻辑抽取出来,封装成api方法.比如每次请求中都要判断是否有权限, ...
随机推荐
- 【实战分享】从选型到项目落地,漫谈 gRPC
什么是 gRPC? gRPC 的几种常见模式 在学习 gRPC 的时候,相信大家对于它的四种模式都有了解,我们来简单回顾一下: 简单模式(Simple RPC):这种模式最为传统,即客户端发起一次请求 ...
- RPC协议实践入门
RPC 是什么 RPC(Remote Procedure Call) 是一个计算机通信协议.该协议允许运行与一台计算机的程序调用另一个地址空间的程序,是一个通过发送请求-接受回应进行信息交互的系统. ...
- open系统调用
/* int open(const char *pathname, int flags, mode_t mode);flag:打开方式,可以man 2 open查看 O_RDONLY O_WRO ...
- CSS属性(边框)
1.边框 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="U ...
- [原题复现+审计][SUCTF 2019] WEB CheckIn(上传绕过、.user.ini)
简介 原题复现:https://github.com/team-su/SUCTF-2019/tree/master/Web/checkIn 考察知识点:上传绕过..user.ini 线上平台:h ...
- [原题复现][极客大挑战 2019]HardSQL(updatexml报错注入)
简介 原题复现: 考察知识点:SQL注入(报错注入,绕过过滤) 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台 特别感谢!) 榆林学院内可使用信安协会内部的CTF训练平 ...
- tp5 日志的用途以及简单使用
相信大家对日志这个词都很熟悉,那么日志通常是用来做什么的呢? 找错误和监控 正常来说,日志对维运的帮助是最大的,特别是服务器或者是程序出现错误的时候. 那么现在我们就来看看,tp框架的日志是怎么设置的 ...
- 防sql注入函数
- First day,beginning!
beginning 在闲暇的时光记录当下的生活,一直是自己所期盼的: 由于种种原因(懒惰),一直未能开始,那么就从今天开始吧! 看下日期,从实习到现在一个月刚刚好: 公司很不错,师傅特别好,感觉自己是 ...
- 宕机了,Redis数据丢了怎么办?
持续原创输出,点击上方蓝字关注我 目录 前言 什么是AOF? 三种写回策略 日志文件太大怎么办? AOF重写会阻塞主线程吗? AOF的缺点 总结 什么是RDB? 给哪些数据做快照? 快照时能够修改数据 ...