十三、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 *********/
}
}
有任何问题都可以随时关注私信!