利用HBase的快照功能来修改表名

Posted 大葱拌豆腐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用HBase的快照功能来修改表名相关的知识,希望对你有一定的参考价值。

hbase的快照功能常常被用来做数据的恢复的,但是由于项目的特殊需求需要改hbase表的表名。在官网上通过快照功能来修改hbase表名的用法:

下面展示用shell命令的和Java api两种方式:

In versions 0.90.x of hbase and earlier, we had a simple script that would rename the hdfs table directory and then do an edit of the hbase:meta table replacing all mentions of the old table name with the new. The script was called ./bin/rename_table.rb. The script was deprecated and removed mostly because it was unmaintained and the operation performed by the script was brutal.

As of hbase 0.94.x, you can use the snapshot facility renaming a table. Here is how you would do it using the hbase shell:

1. 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

2. Java api

 public static boolean renameHBaseTable(String oldTableName) throws Exception {
    //创建连接 Connection con
= ConnectionFactory.createConnection();
    //通过连接获取表的管理对象 Admin admin
= con.getAdmin(); String snapshotName = oldTableName + "_snap"; String newTableName = oldTableName + "_ueser_delete";     //做快照之前先禁用表 admin.disableTable(TableName.valueOf(oldTableName));
    //把之前的表做个快照 admin.snapshot(snapshotName, TableName.valueOf(oldTableName));
    //然后在从当前快照中克隆出一个新的表 admin.cloneSnapshot(snapshotName, TableName.valueOf(newTableName));     //删除快照 admin.deleteSnapshot(snapshotName);
    //删除之前的表 admin.deleteTable(TableName.valueOf(oldTableName));
return true; }

 

以上是关于利用HBase的快照功能来修改表名的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习—LVM快照功能

利用Docker的Commit功能实现Chrome浏览器的缓存快照功能

Notepad++编辑器——Verilog代码片段直接编译

Hbase table之增删查

HBase快照 | 玩转HBase快照

如何利用快照( snapshot )功能快速定位性能问题