在 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);
}