16

我可以使用以下命令告诉 hbase 禁用和删除特定表:

disable 'tablename'
drop 'tablename'

但我想删除数据库中的所有表,而不对任何表的名称进行硬编码。有没有办法做到这一点?我想通过命令行实用程序来执行此操作./hbase shell,而不是通过 Java 或 Thrift。

4

6 回答 6

21

disable_alldrop_all已作为命令添加到 HBase ruby​​ shell 中。这些命令是在 jira HBASE-3506中添加的。 这些命令采用表的正则表达式来禁用/删除。他们会在继续之前要求确认。这应该使删除大量表变得非常容易,并且不需要外部库或脚本。

于 2012-11-15T00:53:04.017 回答
10

我有一个方便的脚本可以做到这一点,使用 Python Happybase库:

import happybase

c = happybase.Connection()

for table in c.tables():
  c.disable_table(table)
  c.delete_table(table)
  print "Deleted: " + table

您需要安装 Happybase 才能使用此脚本,您可以将其安装为:

sudo easy_install happybase
于 2012-06-06T17:56:07.867 回答
6

您可以通过管道将命令传递给bin/hbase shell命令。从那里您可以使用一些脚本来获取表名并将禁用/删除命令传回 hbase。

IE

echo "list" | bin/hbase shell | ./filter_table_names.pl > table_names.txt
./turn_table_names_into_disable_delete_commands.pl table_names.txt | bin/hbase shell 
于 2010-10-22T17:01:30.173 回答
1

有一个黑客。打开 $HBASE_HOME/lib/ruby/shell/commands/list.rb 文件并在命令方法的底部添加以下行。

return list

之后,list 命令返回所有表的名称数组。然后就这样做。

list.each {|t| disable t;drop t}
于 2013-06-12T08:11:02.420 回答
0

我不是通过 hbase shell 删除表,而是通过命令行删除它们,
-删除我的 hadoop 分布式文件系统目录,然后,
-创建一个新的干净的 hadoop 分布式文件系统目录,然后,
-用'格式化我的 hadoop 分布式文件系统hadoop namenode -format',然后,
-start-all.sh 和 start-hbase.sh

参考:
http ://hadoop.apache.org/common/docs/r0.20.1/api/overview-summary.html#overview_description

于 2010-12-29T17:46:56.157 回答
0

如果您正在寻找可以通过 shell 脚本在“单行”中执行此操作的东西,您可以使用以下方法:

$ echo 'list.each {|t| disable t; drop t}; quit;' | hbase shell

注意:以上是从 Bash shell 提示符运行的。它将命令回显到命令hbase shell返回的所有表中并循环list执行,然后在遍历list返回的数组时禁用并删除每个表。一旦完成,它就会退出。

于 2015-10-24T12:20:18.157 回答