2010-10-21 31 views
13

所有的表,我可以告诉HBase的禁用和使用删除特定表的脚本。有没有办法做到这一点?我想通过命令行实用程序./hbase shell执行此操作,而不是通过Java或Thrift。即删除HBase的

回答

18

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

+4

请注意,'disable_all'*。*''是禁用所有HBase表的适当命令。当使用'disable_all'*''时,您将收到来自HBase的错误禁用确认;这是[已知问题](https://issues.apache.org/jira/browse/HBASE-6642),在HBase 0.94.4及之后版本中已经修复。 – 2012-12-17 08:57:48

+0

感谢Emaad的提示。我可以确认它在0.94.5中仍然不固定。 – 2013-03-29 13:59:56

+2

'disable_all'。*''的作品 – 2014-01-16 15:15:39

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 
+0

是的,但这取决于hbase shell提供的输出。我希望hbase有内置的东西。 – 2010-10-23 00:15:35

+0

你不会从shell和baja的方法中找到这个功能,就像你将得到的一样。我认为没有太多计划改进当前的shell(这非常糟糕)。我知道你想避免节俭/ java,但也许如果你可以发布你的理由,以避免他们另一种选择可以被建议? – juhanic 2010-10-28 06:09:41

9

我有一个方便的脚本,正是这一点,使用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 
+1

happybase真的很酷..事实上,我用它来监控hbase的目的,以及.. – 2012-10-11 17:19:18

+1

这也可以一气呵成:connection.delete_table('table-name',disable = True)http:// happybase。 readthedocs.org/en/latest/api.html#happybase.Connection.delete_table – 2014-07-19 19:51:37

1

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

return list 

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

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

如果你正在寻找的东西,将在“一个班轮”通过shell脚本做到这一点,你可以用这个方法:

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

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