HBase学习记录-API
delete.addColumns()和delete.addColumn()的区别
/**
* delete.addColumns();
* delete.addColumn();
* 区别:
* addColumn是删除某一个列簇里的最新时间戳版本。
* 传时间戳,则删除指定版本
* addColumns是删除某个列簇里的所有时间戳版本。其如果修改数据后, 不进行flush或没到flush事件,则会出现旧数据的出现;造成数据未修改彻底未删除彻底
* 传时间戳,可删除指定版本,如果没有指定版本的数据则删除小于等于<=该指定版本的所有数据
* 所以大部分用addColumn()
**/
建表时避免多个版本,避免后期需要删除
API代码
package com.hadoop100.test; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; /**
* @author : GuoSpringStrong
* @date : Created in 2022/2/22 16:22
* @description :
*/
public class TestAPI {
private static Connection connection;
private static Admin admin; //静态代码块,一些配置信息
static {
try {
//获取配置信息
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104"); //创建连接对象
connection = ConnectionFactory.createConnection(conf); //创建admin对象
admin = connection.getAdmin(); } catch (IOException e) {
e.printStackTrace();
} } //关闭资源
public static void close() {
if (admin != null) {
try {
admin.close();
} catch (IOException e) {
e.printStackTrace();
}
} if (connection != null) {
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
} } //1 判断表是否存在
public static boolean isTableExist(String tableName) throws IOException { return admin.tableExists(TableName.valueOf(tableName));
} //2 创建表
public static void createTable(String tableName, String... columnFamily) throws IOException {
//判断是否存在列族信息
if (columnFamily.length <= 0)
System.out.println("请设置列族信息!");
//判断表是否存在
if (isTableExist(tableName)) {
System.out.println(tableName + "已存在");
return;
} else System.out.println(tableName + "不存在"); //创建表描述器
HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));
//添加列族信息
for (String cf : columnFamily) {
//创建列族描述器
HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cf);
hTableDescriptor.addFamily(hColumnDescriptor);
} //创建表
admin.createTable(hTableDescriptor);
System.out.println("表" + tableName + "创建成功!"); } //3 创建命名空间
public static void createNameSpace(String nameSpace) {
//创建命名空间描述器
NamespaceDescriptor nameSpaceDescriptor = NamespaceDescriptor.create(nameSpace).build();
//创建命名空间
try {
admin.createNamespace(nameSpaceDescriptor);
System.out.println(nameSpace + " 命名空间已创建!");
} catch (NamespaceExistException e) {
System.out.println(nameSpace + " 命名空间已存在!");
} catch (IOException e) {
e.printStackTrace();
} } //4 删除表
public static void dropTable(String tableName) throws IOException {
//判断表是否存在
if (!isTableExist(tableName)) {
System.out.println(tableName + "不存在!");
return;
} //使表下线
admin.disableTable(TableName.valueOf(tableName));
//删除表
admin.deleteTable(TableName.valueOf(tableName));
System.out.println(tableName + "表删除成功"); } //5 插入数据
public static void putData(String tableName, String rowKey, String colInfo, String colName, String value) throws IOException {
//获取表
Table table = connection.getTable(TableName.valueOf(tableName)); //创建Put对象,存放数据
Put put = new Put(Bytes.toBytes(rowKey));
//向put对象中添加列信息:列族、列名、值
put.addColumn(Bytes.toBytes(colInfo), Bytes.toBytes(colName), Bytes.toBytes(value)); //插入数据
table.put(put); //关闭资源
table.close(); } //6 获取数据
public static void getData(String tableName, String rowKey, String colInfo, String colName) throws IOException {
//获取表
Table table = connection.getTable(TableName.valueOf(tableName)); //创建Get对象,获取数据
Get get = new Get(Bytes.toBytes(rowKey));
//获取指定列族
//get.addFamily(Bytes.toBytes(colInfo));
//获取指定列
//get.addColumn(Bytes.toBytes(colInfo), Bytes.toBytes(colName)); //获取数据
Result result = table.get(get); //解析result并打印
for (Cell cell : result.rawCells()) {
//打印
System.out.print("行键:" + Bytes.toString(CellUtil.cloneRow(cell)) + "\t");
System.out.print("列族:" + Bytes.toString(CellUtil.cloneFamily(cell)) + "\t");
System.out.print("列名:" + Bytes.toString(CellUtil.cloneQualifier(cell)) + "\t");
System.out.print("值:" + Bytes.toString(CellUtil.cloneValue(cell)) + "\n");
} table.close();
} //7 获取数据(scan扫描)
public static void scanTable(String tableName) throws IOException {
//获取表
Table table = connection.getTable(TableName.valueOf(tableName)); //获取数据
ResultScanner results = table.getScanner(new Scan()); //解析数据
for (Result result : results) {
for (Cell cell : result.rawCells()) {
//打印
System.out.print("行键:" + Bytes.toString(CellUtil.cloneRow(cell)) + "\t");
System.out.print("列族:" + Bytes.toString(CellUtil.cloneFamily(cell)) + "\t");
System.out.print("列名:" + Bytes.toString(CellUtil.cloneQualifier(cell)) + "\t");
System.out.print("值:" + Bytes.toString(CellUtil.cloneValue(cell)) + "\n"); }
System.out.println();
} table.close(); } //8 删除数据
public static void delectData(String tableName, String rowKey, String colInfo, String colName) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName)); //创建删除对象
Delete delete = new Delete(Bytes.toBytes(rowKey)); //删除指定列
delete.addColumn(Bytes.toBytes(colInfo), Bytes.toBytes(colName));
/**
* delete.addColumns();
* delete.addColumn();
* 区别:
* addColumn是删除某一个列簇里的最新时间戳版本。
* 传时间戳,则删除指定版本
* addColumns是删除某个列簇里的所有时间戳版本。其如果修改数据后, 不进行flush或没到flush事件,则会出现旧数据的出现;造成数据未修改彻底未删除彻底
* 传时间戳,可删除指定版本,如果没有指定版本的数据则删除小于等于<=该指定版本的所有数据
* 所以大部分用addColumn()
**/ //删除列族
delete.addFamily(Bytes.toBytes(colInfo)); //执行删除
table.delete(delete); table.close();
} public static void main(String[] args) throws IOException {
//判断表是否存在
//System.out.println(isTableExist("stu2")); //创建命名空间
//createNameSpace("0425"); //创建表
//createTable("0425:stu2", "info1", "info2"); //插入数据
//putData("0425:stu2", "1001", "info1", "sex", "male"); //获取数据
getData("stu", "1001", "personal_info", ""); //扫描表
scanTable("stu"); //删除表
//dropTable("stu2"); //关闭资源
close();
}
}
HBase学习记录-API的更多相关文章
- HBASE学习笔记--API
HBaseConfiguration HBaseConfiguration是每一个hbase client都会使用到的对象,它代表的是HBase配置信息.它有两种构造方式: public HBaseC ...
- Hbase学习记录(1)|伪分布式安装
概述 Hbase –Haddop Database 是一个高性能,高可靠性.面向列.可伸缩的分布式存储系统. Hbase利用HDFS作为文件存储系统,利用MapReduce来处理Hbase的海量数据, ...
- Hbase 学习记录
说明: 公司最近要使用HBase 用于(冷)历史数据 存储,和简单离线计算.在一次讨论会上,我发表意见,为什么把近期数据流程热点数据库中,并且继续异步流入到 历史数据库HBase 里面.提供高效查询等 ...
- HBase学习记录
HBase 使用docker搭建参考https://blog.csdn.net/baifanwudi/article/details/78498325 搭建好以后,网页端可以看到: terminal ...
- Hbase学习记录(2)| Shell操作
查看表结构 describe '表名' 查看版本 get '表名','zhangsan'{COLUMN=>'info:age',VERSIONS=>3} 删除整行 deleteall '表 ...
- HBase 学习之一 <<HBase使用客户端API动态创建Hbase数据表并在Hbase下导出执行>>
HBase使用客户端API动态创建Hbase数据表并在Hbase下导出执行 ----首先感谢网络能够给我提供一个开放的学习平台,如果没有网上的技术爱好者提供 ...
- Hbase学习(三)过滤器 java API
Hbase学习(三)过滤器 HBase 的基本 API,包括增.删.改.查等. 增.删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根 ...
- HBase学习笔记-高级(一)
HBase1. hbase.id记录了集群的唯一标识:hbase.version记录了文件格式的版本号2. split和.corrupt目录在日志分裂过程中使用,以便保存一些中间结果和损坏的日志在表目 ...
- HBase学习系列
转自:http://www.aboutyun.com/thread-8391-1-1.html 问题导读: 1.hbase是什么? 2.hbase原理是什么? 3.hbase使用中会遇到什么问题? 4 ...
随机推荐
- win+ r 命令
Win 键+R calc:计算器 notepad:记事本 mspaint:画图 cmd:控制台 control:控制面板 desk.cpl:打开控制面板中的桌面设置 main.cpl:鼠标设置 ine ...
- 【记录一个问题】golangci-lint.exe中,盘符大写就会执行出错
golangci-lint.exe版本为1.31.0 执行:golangci-lint.exe run d:\source\github.com\ahfuzhang\go_xxx_server\src ...
- JavaScript获取URL参数方法总汇
现在做页面基本都用AJAX,因此导致操作很麻烦,每次都需要通过JS获取url中的参数值,网上所搜到很多资料,没一次能记住的,也不知道在哪个项目中使用过,现在又需要通过JS获取url参数,因此不能在偷懒 ...
- 一个BPMN流程示例带你认识项目中流程的生命周期
摘要:本文详细说明了在工作流Activiti框架中的BPMN流程定义整个运行的生命周期. 本文分享自华为云社区<本文详细说明了在工作流Activiti框架中的BPMN流程定义整个运行的生命周期& ...
- Anaconda 创建 32位python虚拟环境
Anaconda 创建 32位python虚拟环境 最近实习在做一个接口自动化数据上传的功能,因为数据是更新的,需要每次上传都查询数据库调用匹配,就不得不面对 python 连接 oracle . ...
- 公司内部一次关于kafka消息队列消费积压故障复盘分享
背景现象 1.20晚上8点业务线开始切换LBS相关流量,在之后的1个小时时间内,积压量呈上升趋势,一路到达50W左右,第二天的图没贴出具体是50W数字,以下是第一天晚上的贴图部分. 现象一: 现象二: ...
- 微前端框架 之 single-spa 从入门到精通
前序 目的 会使用single-spa开发项目,然后打包部署上线 刨析single-spa的源码原理 手写一个自己的single-spa框架 过程 编写示例项目 打包部署 框架源码解读 手写框架 关于 ...
- mysql的innodb缓存使用率统计
show 方式去查看: show status like '%innodb_buffer_pool_pages%'; 计算方式: (total-free)/total * %100: sql方式查看: ...
- unixbench服务器性能测试
使用 Unixbench5 进行linux系统服务器性能综合测试 1.简介 Unixbench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linu ...
- 计算机网络-5-9-TCP拥塞控制
TCP拥塞控制 拥塞控制的一般原理 在计算机网络中的链路容量(带宽),交换节点中的缓存和处理机等,都是网络的资源,在某段时间,若对网络中某一资源的需求超过该资源所能提供的可用部分,网络性能就会变坏,这 ...