Command line 删除Hbase中所有表的脚本

Command line 删除Hbase中所有表的脚本,command-line,hbase,Command Line,Hbase,我可以使用以下命令告诉hbase禁用和删除特定表: disable 'tablename' drop 'tablename' 但是我想删除数据库中的所有表,而不硬编码任何表的名称。有办法做到这一点吗?我想通过命令行实用程序/hbase shell,而不是通过Java或Thrift来实现这一点。您可以通过管道将命令传递到bin/hbase shell命令。从那里,您可以使用一些脚本来获取表名,并将disable/delete命令传回hbase i、 e 我不是通过hbase shell删除表,而

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

disable 'tablename'
drop 'tablename'

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

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

i、 e


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

参考:

我有一个方便的脚本,可以使用Python库实现这一点:

导入happybase
c=happybase.Connection()
对于c.tables()中的表:
c、 禁用_表(表)
c、 删除表格(表格)
打印“已删除:”+表格
您需要安装Happybase才能使用此脚本,您可以将其安装为:

sudo easy_install happybase
并已作为命令添加到HBase ruby shell中。这些命令是在jira中添加的。这些命令使用表的正则表达式来禁用/删除。他们会在继续之前要求确认。这将使删除大量表变得非常容易,并且不需要外部库或脚本。 打开$HBASE_HOME/lib/ruby/shell/commands/list.rb文件,并将其添加到command方法底部的下一行

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

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

如果您希望通过shell脚本在“一行程序”中实现这一点,可以使用以下方法:

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

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

是的,但这取决于hbase外壳提供的输出。我希望hbase会有一些内置的功能。你不会从shell中发现这些功能,baja的方法几乎是你能得到的。我不认为有太多的计划来改进当前的shell(这是非常糟糕的)。我知道你想避免使用thrift/java,但如果你能发布避免使用thrift/java的理由,也许可以建议另一种选择?happybase真的很酷。。事实上,我也将其用于监视hbase目的。这也可以一次性完成:连接。删除\u table('table-name',disable=True)注意,
disable\u all'*.*.'
是禁用所有hbase表的适当命令。使用
禁用所有'*'
时,您将收到来自HBase的错误禁用确认;这是一个在HBase 0.94.4以后的版本中修复的问题。感谢Emaad提供此提示。如果要删除命名空间中的所有表,我可以确认它在0.94.5中仍然没有修复。在hbase shell中运行disable_all'namespace_name:.*'并删除_all'namespace_name:.*'。
$ echo 'list.each {|t| disable t; drop t}; quit;' | hbase shell