删除Hbase中所有表的脚本

Vla*_*ala 14 command-line hbase

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

disable 'tablename'
drop 'tablename'
Run Code Online (Sandbox Code Playgroud)

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

ecl*_*ark 20

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

  • 请注意,`disable_all'*.*'`是禁用所有HBase表的适当命令.使用`disable_all'*'`时,您将收到HBase错误的禁用确认; 这是[已知问题](https://issues.apache.org/jira/browse/HBASE-6642),已在HBase 0.94.4开始修复. (4认同)

Sum*_*man 10

我有一个方便的脚本,使用Python Happybase库完成此操作:

import happybase

c = happybase.Connection()

for table in c.tables():
  c.disable_table(table)
  c.delete_table(table)
  print "Deleted: " + table
Run Code Online (Sandbox Code Playgroud)

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

sudo easy_install happybase
Run Code Online (Sandbox Code Playgroud)


baj*_*ife 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 
Run Code Online (Sandbox Code Playgroud)