头歌实践教学平台:大数据存储2023(十三3)

十三、HBase开发: Java API 管理表

第3关:禁用表、启用表、删除表

任务描述

本关任务:使用Java代码禁用表、启用表、删除表。

相关知识

要删除HBase中的表,我们需要先禁用它,否则是无法删除的,如果一张已经禁用的表,我们不想删除了,而想重新启用它,这个时候可以使用Java代码实现启用操作。

接下来我们来学习如何使用Java代码实现这些操作。

禁用表、删除表、启用表

三个操作都很简单:

在获取了Admin对象之后,直接使用disableTable(TableName tableName)、deleteTable(TableName tableName)、enableTable(TableName tableName)即可实现表的禁用、删除与启用操作。

示例,删除名为test的表,启用名为demo的表:

Configuration config = new Configuration();

Connection conn = ConnectionFactory.createConnection(config);

Admin admin = connection.getAdmin();

TableName testName = TableName.valueOf(Bytes.toBytes("test"));

TableName demoName = TableName.valueOf(Bytes.toBytes("demo"));

admin.disableTable(testName);

admin.deleteTable(testName);

admin.enableTable(demoName);

验证

禁用、删除和启用操作之后,我们会想要验证一下操作是否成功;

如何验证呢?

admin.isTableDisabled(tableName)//是否禁用

admin.tableExists(tableName)//是否存在

admin.isTableEnabled(tableName)//是否启用

编程要求

到你了,请在右侧编辑器begin-end中编写代码补全函数,实现函数要实现的功能,具体功能请查看右侧注释。

测试说明

平台将会使用如下代码测试你的程序,调用你编写的方法:

String\[\] tableNames = { "t_emp3", "t_dept3", "t_user3" };

String\[\] columns = { "data1", "data2", "data3" };

Task task = new Task();

// 创建表

for (String tableName : tableNames) {

task.createTable(tableName, columns);

}

// 删除表

task.deleteTable("t_dept3");

// 禁用表

task.disableTable("t_user3");

task.disableTable("t_emp3");

// 启用表

task.enableTable("t_emp3");

// 显示表的状态

List<TableDescriptor> tableDescriptors = admin.listTableDescriptors();

for (TableDescriptor tableDescriptor : tableDescriptors) {

TableName tableName = tableDescriptor.getTableName();

System.out.println("Table: " + tableName);

System.out.println("\texists: " + admin.tableExists(tableName));

System.out.println("\tenabled: " + admin.isTableEnabled(tableName));

}

预期输出:

Table: t_emp3

exists: true

enabled: true

Table: t_user3

exists: true

enabled: false

开始你的任务吧,祝你成功!

package step3;

import java.io.IOException;

import org.apache.hadoop.conf.*;

import org.apache.hadoop.hbase.*;

import org.apache.hadoop.hbase.client.*;

import org.apache.hadoop.hbase.util.*;

public class Task {

/**

* 刪除表

* @param tableName 表名

* @throws Exception

*/

public void deleteTable(String tableName)throws Exception{

/********* Begin *********/

Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象

Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象

Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象

TableName testName = TableName.valueOf(Bytes.toBytes(tableName));

admin.disableTable(testName);

admin.deleteTable(testName);

/********* End *********/

}

/**

* 创建表

* @param tableName 表名

* @param columnNames 列族的动态数组

* @throws Exception

*/

public void createTable(String tableName,String... columnNames)throws Exception{

/********* Begin *********/

Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象

Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象

Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象

// TableName tableName1 = TableName.valueOf(Bytes.toBytes(tableName));//定义表名

// HTableDescriptor htd = new HTableDescriptor(tableName1);//定义表对象

// for(String s: columnNames){

// htd.addFamily(new HColumnDescriptor(Bytes.toBytes(s)));

// }

//构建一个Test_teacher_info表

TableDescriptorBuilder test_teacher_info = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));

for(String s: columnNames){

ColumnFamilyDescriptor of = ColumnFamilyDescriptorBuilder.of(s);

test_teacher_info.setColumnFamily(of);

}

//构建

TableDescriptor build = test_teacher_info.build();

admin.createTable(build);

/********* End *********/

}

/**

* 启用表

* @param tableName

* @throws Exception

*/

public void enableTable(String tableName) throws Exception{

/********* Begin *********/

Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象

Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象

Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象

TableName demoName = TableName.valueOf(Bytes.toBytes(tableName));

admin.enableTable(demoName);

/********* End *********/

}

/**

* 禁用表

* @param tableName

*/

public void disableTable(String tableName)throws Exception{

/********* Begin *********/

Configuration conf = HBaseConfiguration.create(); //使用create()静态方法就可以得到Configuration对象

Connection conn = ConnectionFactory.createConnection(conf); //config为前文的配置对象

Admin admin = conn.getAdmin(); //使用连接对象获取Admin对象

TableName testName = TableName.valueOf(Bytes.toBytes(tableName));

admin.disableTable(testName);

/********* End *********/

}

}

有任何问题都可以随时关注私信!

相关推荐
湘美书院--湘美谈教育1 小时前
湘美书院AI时代的禅悟集:人机智能,反照诸我
大数据·人工智能·深度学习·机器学习·生活
IpdataCloud1 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
2601_966949651 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
蒸鱼Yuzheng2 小时前
Python 游戏测试开发怎么准备:日志解析、接口校验、并发与可维护性
自动化测试·python·测试开发·面试题·游戏测试
m0_734571762 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
Ivanqhz2 小时前
BM1688 双核架构
python·深度学习·神经网络·cnn·mlir
Java后端的Ai之路2 小时前
Python进阶探索17 - Python中的深拷贝与浅拷贝
人工智能·python·ai·浅拷贝·深拷贝
西柚研究生1234563 小时前
论文分析17:YOLOv11_UAVNet:无人机航拍图像专用目标检测算法
人工智能·python·深度学习·算法·目标检测
电商API_180079052473 小时前
拍照找同款是怎么实现的?淘宝以图搜图接口 item_search_img 对接实战
大数据·爬虫·数据挖掘·数据分析·代采api
RAN11426760083 小时前
1.3第一个程序的介绍
开发语言·qt