Java 操作 HBase 表结构详解
Java 操作 HBase 表结构详解
一、Admin 是干什么的?
在 Java API 中:
| 对象 | 作用 |
|---|---|
| Admin | 表、列族管理 |
| Table | 数据读写 |
DDL 用 Admin,DML 用 Table
二、建表前的设计思考
HBase 表设计与 MySQL 完全不同:
- 没有列
- 只有列族
- 列族是 物理存储单位
列族数量越少越好(1~3 个)
三、Java 建表完整流程
1 获取 Admin
Admin admin = HBaseConnectionUtil
.getConnection()
.getAdmin();
2 判断表是否存在
TableName tableName = TableName.valueOf("student");
if (admin.tableExists(tableName)) {
System.out.println("表已存在");
return;
}
3 创建表描述器
TableDescriptorBuilder tableBuilder =
TableDescriptorBuilder.newBuilder(tableName);
4 添加列族
ColumnFamilyDescriptor infoCF =
ColumnFamilyDescriptorBuilder
.newBuilder("info".getBytes())
.build();
ColumnFamilyDescriptor scoreCF =
ColumnFamilyDescriptorBuilder
.newBuilder("score".getBytes())
.build();
tableBuilder.setColumnFamily(infoCF);
tableBuilder.setColumnFamily(scoreCF);
5 创建表
admin.createTable(tableBuilder.build());
admin.close();
四、完整建表代码
public class HBaseDDL {
public static void createTable() throws Exception {
Admin admin = HBaseConnectionUtil.getConnection().getAdmin();
TableName tableName = TableName.valueOf("student");
if (admin.tableExists(tableName)) {
System.out.println("表已存在");
return;
}
TableDescriptorBuilder tableBuilder =
TableDescriptorBuilder.newBuilder(tableName);
tableBuilder.setColumnFamily(
ColumnFamilyDescriptorBuilder
.newBuilder("info".getBytes()).build());
tableBuilder.setColumnFamily(
ColumnFamilyDescriptorBuilder
.newBuilder("score".getBytes()).build());
admin.createTable(tableBuilder.build());
admin.close();
}
}
五、删除表的完整流程
为什么要 disable?
HBase 不允许直接删除正在使用的表
public static void dropTable() throws Exception {
Admin admin = HBaseConnectionUtil.getConnection().getAdmin();
TableName tableName = TableName.valueOf("student");
if (admin.tableExists(tableName)) {
admin.disableTable(tableName);
admin.deleteTable(tableName);
}
admin.close();
}

浙公网安备 33010602011771号