2010-10-21 4 views
13

ich hbase sagen kann, deaktivieren und bestimmte Tabellen löschen verwenden:Ein Skript, das alle Tabellen in Hbase löscht

disable 'tablename' 
drop 'tablename' 

Aber ich mag alle Tabellen in der Datenbank löschen, ohne die Namen von einem des Tisches zu . Gibt es eine Möglichkeit, dies zu tun? Ich möchte dies über das Befehlszeilenprogramm ./hbase shell tun, nicht über Java oder Thrift.

Antwort

18

disable_all und drop_all wurden als Befehle in dem HBase rubin Schale hinzugefügt. Diese Befehle wurden in jira hinzugefügt HBASE-3506 Diese Befehle nehmen eine Regex von Tabellen zum Deaktivieren/Ablegen. Und sie werden um Bestätigung bitten, bevor sie fortfahren. Das sollte viele Tabellen recht einfach machen und keine externen Bibliotheken oder Skripte erfordern.

+4

Beachten Sie, dass 'disable_all '*. *'' der geeignete Befehl ist, um alle HBase-Tabellen zu deaktivieren. Wenn Sie 'disable_all' * ''verwenden, erhalten Sie eine falsche Deaktivierungsbestätigung von HBase; Dies ist ein [bekanntes Problem] (https://issues.apache.org/jira/browse/HBASE-6642), das ab HBase 0.94.4 behoben wird. –

+0

Danke Emaad für diesen Tipp. Ich kann bestätigen, dass es immer noch nicht in 0.94.5 behoben ist. –

+2

'disable_all '. *'' Funktioniert –

6

Sie können Befehle an den Befehl bin/hbase shell übergeben. Von dort aus können Sie einige Skripte verwenden, um die Tabellennamen zu erfassen und die Befehle zum Deaktivieren/Löschen an hbase zurückzuleiten.

dh

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

Ja, aber das hängt davon ab, welche Ausgabe die hbase-Shell bietet. Ich hatte gehofft, HBase würde etwas eingebaut haben. –

+0

Sie werden nicht feststellen, dass Funktionalität von der Shell und Baja Methode ist so nahe wie Sie bekommen. Ich glaube nicht, dass es Pläne gibt, die aktuelle Shell zu verbessern (was ziemlich schlimm ist). Ich bin mir bewusst, dass Sie Sparsamkeit/Java vermeiden möchten, aber vielleicht, wenn Sie Ihre Gründe für die Vermeidung von ihnen vorschlagen können, könnte eine andere Alternative vorgeschlagen werden? – juhanic

0

Ich bin nicht Tabellen durch den hbase Shell zu löschen, aber ich sich von der Kommandozeile zu löschen, indem,
- mein hadoop verteiltes Dateisystem-Verzeichnis zu löschen, dann
- Erstellen eines neuen sauber hadoop verteiltes Dateisystem-Verzeichnis, dann,
- Formatierung mein hadoop verteiltes Dateisystem mit 'hadoop NameNode -format', dann,
- start-all.sh und start-hbase.sh

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

9

Ich habe ein praktisches Skript, das genau dies tut, die Python Happybase Bibliothek:

import happybase 

c = happybase.Connection() 

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

Sie müssen Happybase dieses Skript zu verwenden, installiert, und Sie können es installieren :

sudo easy_install happybase 
+1

happycase ist wirklich cool .. infact Ich benutze es auch für die Überwachung von HBase Zwecken .. –

+1

Dies kann auch in einem Rutsch getan werden: connection.delete_table ('Tabellenname', deaktivieren = True) http: // happybase. readthedocs.org/en/latest/api.html#happybase.Connection.delete_table –

1

Es gibt einen Hack. Öffnen Sie die Datei $ HBASE_HOME/lib/ruby ​​/ shell/commands/list.rb und fügen Sie am Ende der Befehlszeile die folgende Zeile hinzu.

return list 

Danach gibt der Befehl list ein Array mit Namen aller Tabellen zurück. Und dann einfach so.

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

Wenn Sie nach etwas suchen, das in einer ‚one-liner‘ über ein Shell-Skript tun können Sie diese Methode verwenden:

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

HINWEIS: Die oben ausgeführt wurde, von der Bash-Shell-Eingabeaufforderung. Er gibt die Befehle in hbase shell zurück und führt eine Schleife durch alle Tabellen, die vom Befehl list zurückgegeben werden, und deaktiviert dann & löscht jede Tabelle, während sie durch das Array iteriert, das list zurückgegeben wird. Sobald es fertig ist, hört es auf.

Verwandte Themen