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 ...
随机推荐
- 极简promise雏形
function Promise(fn) { var value = null, callbacks = []; //callbacks为数组,因为可能同时有很多个回调 this.then = fun ...
- JavaScript DOM 基础操作
JavaScript DOM 基础操作 一.获取元素的六方式 document.getElementById('id名称') //根据id名称获取 document.getElementsByclas ...
- C++构造函数语义学(二)(基于C++对象模型)
带有虚函数的情况. 下面情况编译器也会在需要的时候为其合成. 1.如果一个类自己声明为虚函数. 1 #include<iostream> 2 using namespace std; 3 ...
- zabbix安装 报错 socket '/var/lib/mysql/mysql.sock' (13)]
安装界面提示: Error connecting to database: Can't connect to local MySQL server through socket '/var/lib/m ...
- 如何使用iconfont的CDN
如何使用iconfont的CDN iconfont作为阿里的图标库,在开发过成功用的已经是非常广泛了,但iconfont并不需要将图标下载后使用,而是可以直接用cdn引入使用,至于使用流程,请看下文. ...
- MySQL表空间结构
在Innodb中,我们可以指定一张表的数据是保存在独立表空间还是系统表空间,这个参数是:innodb_file_per_table 如果我们设置这个参数的值为0,那么一个表将使用系统表空间来保存表的数 ...
- 裸k8s搭建中遇到的两个坑
在装docker的时候报错了,需要先安装selinux版本.才能安装容器. 需要按照提示安装这个包. 采用强制安装.rpm -ivh 包名字 --force --nodeps 在k8s的master上 ...
- 2.flink
Flink 运行时的组件 作业管理器(JobManager) •控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager 所控制执行. •JobManager 会先接收 ...
- (DDS)正弦波形发生器——幅值、频率、相位可调(一)
(DDS)正弦波形发生器--幅值.频率.相位可调 一.项目任务: 设计一个幅值.频率.相位均可调的正弦波发生器. 频率每次增加1kHz. 相位每次增加 2*PI/256 幅值每次增加两倍 二.文章内容 ...
- ObjectInputStream java.io.StreamCorruptedException: invalid type code: AC问题解决
感谢原文作者:攻城狮_无名 原文链接:https://blog.csdn.net/mingyang_2016/article/details/75208117 问题描述: 每次向一个文件中序列化对象时 ...