首页 > 其他分享 >9月13日学习内容

9月13日学习内容

时间:2023-09-13 23:55:10浏览次数:43  
标签:13 String 表格 admin namespace tableName 学习 内容 IOException

昨天学习了shell命令

今天学习了Hbase的API增删改查:

package com.atguigu;

import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.ColumnValueFilter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;

public class HBaseDDL {
public static Connection connection=HBaseConnection.connection;

//创建命名空间
public static void createNamespace(String namespace) throws IOException {
//获取admin
//admin的连接是轻量级的,不是线程安全的,不推荐池化或缓存这个连接
Admin admin=connection.getAdmin();
//调用方法创建命名空间
//代码相对shell更加底层,所以shell能够实现的功能代码一定能实现
// 所以需要填写完整的命名空间描述


//创建命名空间描述建造者=》设计师
NamespaceDescriptor.Builder builder = NamespaceDescriptor.create(namespace);
//给命名空间添加需求
builder.addConfiguration("user","atguigu");
//使用builder构造出对应的添加完参数的对象 完成构建
//创建命名空间出现的问题属于本方法自身的问题 不应该抛出
try {
admin.createNamespace(builder.build());
} catch (IOException e) {
System.out.println("命名空间已经存在");
e.printStackTrace();
}
//关闭admin
admin.close();
}




//判断表格是否存在
public static boolean isTableExist(String namespace,String tableName) throws IOException {
//获取admin
Admin admin=connection.getAdmin();
//使用方法判断表格是否存在
boolean b= false;
try {
b = admin.tableExists(TableName.valueOf(namespace, tableName));
} catch (IOException e) {
e.printStackTrace();
}
//关闭连接
admin.close();
return b;
}



//创建表格(namespqce命名空间名称,tableName表格名称,columnFamilies列族名称)
public static void createTable(String namespace,String tableName,String... columnFamilies) throws IOException {
//判断是否至少有一个列族
if(columnFamilies.length==0){
System.out.println("创建表格至少有一个列族");
return;
}
//判断表格是否已经存在
if(isTableExist(namespace, tableName)){
System.out.println("表格已经存在");
return;
}
//获取admin
Admin admin=connection.getAdmin();
//调用方法创建表格
//创建表格描述的建造者
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(namespace, tableName));
//添加参数
for (String columnFamily : columnFamilies) {
//创建列族描述的建造者
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(columnFamily));
//对应当前的列族添加数据
//添加版本参数
columnFamilyDescriptorBuilder.setMaxVersions(5);
//创建添加完参数的列族描述
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());
}

//创建对应的表格描述
try {
admin.createTable(tableDescriptorBuilder.build());
} catch (IOException e) {
e.printStackTrace();
}
//关闭admin
admin.close();
}
//添加数据
public static void putCell(String namespace,String tableName,String rowKey,String columnFamily,String columnName,String value) throws IOException {
//获取table
Table table = connection.getTable(TableName.valueOf(namespace, tableName));
//调用相关方法插入数据
//创建put对象
Put put = new Put(Bytes.toBytes(rowKey));
//给Put对象添加数据
put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName),Bytes.toBytes(value));
//将对象写入相应的方法
try {
table.put(put);
} catch (IOException e) {
e.printStackTrace();
}
//关闭table
table.close();


}
//获取数据
public static void getCells(String namespace,String tableName,String rowKey,String columnFamily,String columnName) throws IOException {
//获取table
Table table = connection.getTable(TableName.valueOf(namespace, tableName));
//获取get对象
Get get = new Get(Bytes.toBytes(rowKey));
//如果直接调用get方法直接获取一整行数据
//如果想读取某一时刻的数据,需要添加相应的参数
get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
//设置读取数据的版本
get.readAllVersions();
//读取数据,获得result对象
Result result=table.get(get);
Cell[] cells=result.rawCells();
table.close();

}
//扫描数据
public static void scanRows(String namespace,String tableName,String startRow,String stopRow) throws IOException {
//获取table
Table table = connection.getTable(TableName.valueOf(namespace, tableName));
//获取scan对象
Scan scan = new Scan();
//如果此时直接调用会直接扫描整个表
//可以添加参数来控制扫描
//默认包含
scan.withStartRow(Bytes.toBytes(startRow));
//默认不包含
scan.withStopRow(Bytes.toBytes(stopRow));
//读取多行数据,获取scanner
ResultScanner scanner = null;
try {
scanner = table.getScanner(scan);
} catch (IOException e) {
e.printStackTrace();
}
//result记录的相应的行数据, cell数据
//ResultScanner记录多行数据result数据
for(Result result:scanner){
Cell[] cells= result.rawCells();
for(Cell cell:cells){
System.out.println(new String(CellUtil.cloneRow(cell))+"-"+new String(CellUtil.cloneFamily(cell))+"-"+new String(CellUtil.cloneQualifier(cell))+"-"+new String(CellUtil.cloneValue(cell)));
}
System.out.println();
}
table.close();

}
//单行过滤扫描
public static void filterScan(String namespace,String tableName,String startRow,String stopRow,String columnFamily,String columnName,String value) throws IOException {
//获取table
Table table = connection.getTable(TableName.valueOf(namespace, tableName));
//获取scan对象
Scan scan = new Scan();
scan.withStartRow(Bytes.toBytes(startRow));
//默认不包含
scan.withStopRow(Bytes.toBytes(stopRow));
//可以添加多个过滤
FilterList filterList = new FilterList();
//创建过滤器
scan.setFilter(filterList);
//结果只保留当前列的数据
ColumnValueFilter columnValueFilter=new ColumnValueFilter(
Bytes.toBytes(columnFamily),
Bytes.toBytes(columnName),
CompareOperator.EQUAL,
Bytes.toBytes(value)

);
filterList.addFilter(columnValueFilter);
//添加过滤
scan.setFilter(filterList);
ResultScanner scanner = null;
try {
scanner = table.getScanner(scan);
} catch (IOException e) {
e.printStackTrace();
}

for(Result result:scanner){
Cell[] cells= result.rawCells();
for(Cell cell:cells){
System.out.println(new String(CellUtil.cloneRow(cell))+"-"+new String(CellUtil.cloneFamily(cell))+"-"+new String(CellUtil.cloneQualifier(cell))+"-"+new String(CellUtil.cloneValue(cell))+"\t");
}
System.out.println();
}
table.close();
}

//修改表格
public static void modifyTable(String namespace,String tableName,String columnFamily,int version) throws IOException {
//判断表格是否存在
if(!isTableExist(namespace,tableName)){
return;
}
//获取admin
Admin admin=connection.getAdmin();
try{
//调用方法修改表格
//创建表格描述建造者
//如果使用填写tableName的方法相当于创建一个新的表格描述建造者,没有之前的信息
//如果想要修改之前的信息,必须调用方法填写一个旧的表格描述
//获取之前的表格描述
TableDescriptor descriptor = admin.getDescriptor(TableName.valueOf(namespace, tableName));

TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(descriptor);
//对应建造者进行表格数据的修改
ColumnFamilyDescriptor columnFamily1 = descriptor.getColumnFamily(Bytes.toBytes(columnFamily));
//创建列族描述建造者
//需要填写旧的列族描述
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(columnFamily1);
//修改对应的版本
columnFamilyDescriptorBuilder.setMaxVersions(version);
//此处修改的时候,如果是新创建的,那么别的参数会初始化
tableDescriptorBuilder.modifyColumnFamily(columnFamilyDescriptorBuilder.build());
try {
admin.modifyTable(tableDescriptorBuilder.build());
} catch (IOException e) {
e.printStackTrace();
}
}catch(IOException e){
System.out.println("表格不存在");
e.printStackTrace();
}
//关闭admin
admin.close();
}

//删除表格
public static boolean deleteTable(String namespace,String tableName) throws IOException {
//判断表格是否存在
if(!isTableExist(namespace,tableName)){
System.out.println("表格不存在,无法删除");
return false;
}
//删除表格
Admin admin=connection.getAdmin();
//调用相关的方法删除表格
try {
//HBase删除表格之前 一定要标记表格为不可用
admin.disableTable(TableName.valueOf(namespace, tableName));

admin.deleteTable(TableName.valueOf(namespace, tableName));
} catch (IOException e) {
e.printStackTrace();
}
//关闭admin
admin.close();
return true;
}


public static void main(String[] args) throws IOException {
//测试创建命名空间
createNamespace("atguigu");
//测试判断表格是否存在
System.out.println(isTableExist("atguigu","list"));
//测试创建表格
createTable("atguigu","student","info","msg");
//测试修改表格
modifyTable("atguigu","student","info",6);
//删除表格
deleteTable("atguigu","student");

//其他代码
System.out.println("其他代码");
//关闭hbase连接
HBaseConnection.closeConnection();
}
}

标签:13,String,表格,admin,namespace,tableName,学习,内容,IOException
From: https://www.cnblogs.com/fengjiale/p/17701144.html

相关文章

  • 9月13日总结
    一.今天做了什么1.学习英语课上学了英语课文背了20个四级单词2.学习了原码补码反码3.下午收拾了半天宿舍,帮孟导送文件,弄名单二.遇到的问题,如何解决无三.明天准备做什么今天没写完html作业,比想象的难一点,明天继续写......
  • 洛谷[P1305 新二叉树] Tag:二叉树、基础数据结构
    P1305新二叉树题目描述:输入一串二叉树,输出其前序遍历。输入格式:第一行为二叉树的节点数$n(1\len\le26)$,后面\(n\)行,每一个字母为节点,后两个字母分别为其左右儿子。特别地,数据保证第一行读入的节点必为根节点。空节点用*表示输出格式:二叉树的前序遍历。思路:对......
  • 学习笔记之synchronized
    学习笔记之synchronizedynchronized是一个JDK提供的同步的关键字,通过synchronized可以锁定一个代码块或者一个方法,从而实现锁的效果。synchronized的几种用法1.修饰在对象方法上publicclassSynDemo{inti=0;intx=0;publicsynchronizedvoidtestSync(){......
  • 学习笔记之Redis消息队列-基于Stream的消息队列
    学习笔记之Redis消息队列-基于Stream的消息队列Stream是Redis5.0引入的一种新数据类型,可以实现一个功能非常完善的消息队列。其实只需要知道写入消息队列的命令和读取消息队列的命令就行了写入消息队列:XADD读取消息队列的方式之一:XREAD在业务开发中,我们可以循环的调用......
  • 2023.9.13
    今天学习之前先把idea重新装了一下,整了个脚本变成永久免费的了,简单试着写了几个力扣上面的题目,两数之和,我最先的思路是穷举法,让每个数都来相加一次,如果有等于想要的就输出,一次成功,然后就是看了看老师推的书,手机上找不到资源,图书馆也没看到,就在一个国内的资源网上看了看,还是有的,编......
  • 9/13
    今天尝试进行编写登录界面,在网上学习了Swing类的运用,如packagefrist;importjavax.swing.*;publicclassJFramedemo1{publicstaticvoidmain(String[]args){JFramef=newJFrame("login");f.setVisible(true);f.setSize(300......
  • 13 动态创建对象执行方法
    反射的作用packageannotate;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;//通过反射,动态创建对象publicclassTest12{publicstaticvoidmain(String[]args)throwsException{Classc1=Body.class;//1......
  • 2023年9月13日 天气:晴
    今天没有课,然后就背了20个单词,然后就是练习了一下随机生成30道四则运算的那道题。publicclasscount{publicstaticvoidmain(String[]args){for(inti=0;i<30;i++){intfirNum=(int)(Math.random()*99)+1;intsecNum=(int)(Math.r......
  • 2023年9月13日
    案例:2023年9月13日图片排版,集中排版,分散排版,侧边导航HTML<!DOCTYPEhtml><html> <head> <metacharset="utf-8"/> <title>导航页</title> <linkrel="stylesheet"href="./css/index_style.css"> </head>......
  • Python学习笔记-Python函数进阶
    函数多返回值思考如果一个函数有两个return,程序如何执行?例如:defreturn_num():return1return2result=return_num()print(result)上面代码只执行了第一个return,因为retrun可以退出当前函数,导致return下方的代码不执行。多个返回值如果一个函数要有多个返回值,书写方式示......