使用HBase的Admin进行DDL操作,Admin API 与 RDBMS 的 Data Definition Language (DDL) 类似,提供了各种数据管理操作功能:创建表,检查表是否存在,修改表和列族定义,删除表等。
添加jar包
HBase安装目录的lib下所有jar包
TestAdmin.java DDL操作类
public class TestAdmin {
private static final String TABLE_NAME = "MY_HBASE_TABLE_TADMIN";
private static final String CF_DEFAULT = "DEFAULT_COLUMN_FAMILY";
/**
* 创建表、删除表
*/
public static void createOrOverwrite(Admin admin,
@SuppressWarnings("deprecation") HTableDescriptor table)
throws IOException {
if (admin.tableExists(table.getTableName())) {
// Disable an existing table
admin.disableTable(table.getTableName());
// Delete a table (Need to be disabled first)
admin.deleteTable(table.getTableName());
}
admin.createTable(table);
}
/**
* 创建具体表
*/
public static void createSchemaTables() throws IOException {
Configuration config = HBaseConfiguration.create();
Connection conn = ConnectionFactory.createConnection(config);
Admin admin = conn.getAdmin();
HTableDescriptor table = new HTableDescriptor(
TableName.valueOf(TABLE_NAME));
table.setReadOnly(false);
table.addFamily(new HColumnDescriptor(CF_DEFAULT)
.setCompressionType(Algorithm.NONE));
System.out.print("Creating table. ");
createOrOverwrite(admin, table);
System.out.println(" Done.");
//释放资源
admin.close();
conn.close();
}
/**
* 获取所有表名称,对应shell命令:list
*/
public static void listTables() throws IOException {
Configuration config = HBaseConfiguration.create();
Connection conn = ConnectionFactory.createConnection(config);
Admin admin = conn.getAdmin();
TableName[] tables = admin.listTableNames();
for(TableName tn:tables){
System.out.println(" table: "+tn);
}
//释放资源
admin.close();
conn.close();
}
public static void main(String... args) throws IOException {
createSchemaTables();
listTables();
}
}