头歌实践教学平台:大数据存储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 *********/

}

}

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

相关推荐
AR-26710-23 分钟前
机器学习复习Day8——异常检测
人工智能·python·机器学习·scikit-learn
千里码aicood28 分钟前
Django 基于Django的电脑推荐与分析可视化系统设计与实现
python·django·电脑
未若君雅裁36 分钟前
Agent 的结构化输出,ProviderStrategy、ToolStrategy 与错误重试
python·langchain
洛兮银儿40 分钟前
pycharm选中同一个词的标记颜色的修改
ide·python·pycharm
郝学胜_神的一滴1 小时前
Effective Python 条款 6:善用拆包告别恼人的下标索引
python·pycharm
Easy_API1 小时前
OpenAI三周内第二次降价,GPT-5.6 Sol砍了20%到33
大数据·前端·人工智能·gpt·深度学习
汤姆yu1 小时前
基于Django的学习资料共享与智能推荐系统
后端·python·django·毕业设计·学习资料共享
Freak嵌入式1 小时前
树莓派 Pico GPIO 深度解析:从 MCU 架构到寄存器控制,底层原理与实践指南
java·开发语言·科技·单片机·嵌入式硬件·架构
小K讲AI营销1 小时前
智谱配售314亿港元:融资通道切换
大数据·人工智能