删除Hbase中所有表的脚本

时间:2010-10-21 19:02:22

标签: command-line hbase

我可以告诉hbase使用以下方法禁用和删除特定的表:

disable 'tablename'
drop 'tablename'

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

6 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分: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

答案 2 :(得分:6)

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

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 

答案 3 :(得分:1)

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

return list

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

list.each {|t| disable t;drop t}

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

如果您正在寻找通过shell脚本在'one-liner'中执行此操作的内容,则可以使用此方法:

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

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