在 hbase 及更早版本的 0.90.x 版本中,我们有一个简单的脚本,它将重命名 hdfs 表目录,然后编辑 hbase:meta 表,用 new 替换旧表名的所有提及。该脚本被称为./bin/rename_table.rb
。该脚本已被弃用和删除,主要是因为它没有维护并且脚本执行的操作是残酷的。
从 hbase 0.94.x 开始,您可以使用快照工具重命名表。以下是使用 hbase shell 的方法:
hbase shell> disable 'tableName'
hbase shell> snapshot 'tableName', 'tableSnapshot'
hbase shell> clone_snapshot 'tableSnapshot', 'newTableName'
hbase shell> delete_snapshot 'tableSnapshot'
hbase shell> drop 'tableName'
或者在代码中它将如下:
void rename(Admin admin, String oldTableName, TableName newTableName) {
String snapshotName = randomName();
admin.disableTable(oldTableName);
admin.snapshot(snapshotName, oldTableName);
admin.cloneSnapshot(snapshotName, newTableName);
admin.deleteSnapshot(snapshotName);
admin.deleteTable(oldTableName);
}