次を使用して、特定のテーブルを無効にして削除するようにhbaseに指示できます。
disable 'tablename'
drop 'tablename'
しかし、テーブルの名前をハードコーディングせずに、データベース内のすべてのテーブルを削除したいと思います。これを行う方法はありますか?./hbase shell
JavaやThriftではなく、コマンドラインユーティリティを使用してこれを実行したいと思います。
次を使用して、特定のテーブルを無効にして削除するようにhbaseに指示できます。
disable 'tablename'
drop 'tablename'
しかし、テーブルの名前をハードコーディングせずに、データベース内のすべてのテーブルを削除したいと思います。これを行う方法はありますか?./hbase shell
JavaやThriftではなく、コマンドラインユーティリティを使用してこれを実行したいと思います。
disable_allとdrop_allが、HBaseRubyシェルのコマンドとして追加されました。これらのコマンドはjiraHBASE-3506で追加されました。これらのコマンド は、テーブルの正規表現を使用して無効化/削除します。そして、続行する前に確認を求めます。これにより、多くのテーブルを簡単に削除でき、外部のライブラリやスクリプトを必要としません。
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
コマンドをコマンドにパイプできますbin/hbase shell
。そこから、いくつかのスクリプトを使用してテーブル名を取得し、disable/deleteコマンドを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
ハックがあります。$ HBASE_HOME / lib / ruby / shell / commands / list.rbファイルを開き、コマンドメソッドの下部に以下の行を追加します。
return list
その後、listコマンドはすべてのテーブルの名前の配列を返します。そして、このようにします。
list.each {|t| disable t;drop t}
私はhbaseシェルを介してテーブルを削除していませんが、コマンドラインからテーブルを削除し
ます-hadoop分散ファイルシステムディレクトリを削除し、次に
-新しいクリーンなhadoop分散ファイルシステムディレクトリを作成し
、-hadoop分散ファイルシステムを'でフォーマットしますhadoop namenode -format'、次に、
-start-all.shおよびstart-hbase.sh
参照:
http:
//hadoop.apache.org/common/docs/r0.20.1/api/overview-summary.html#overview_description
シェルスクリプトを介して「ワンライナー」でこれを行うものを探している場合は、次の方法を使用できます。
$ echo 'list.each {|t| disable t; drop t}; quit;' | hbase shell
注:上記はBashシェルプロンプトから実行されました。コマンドをエコーして、コマンドhbase shell
から返されたすべてのテーブルをループし、返されlist
た配列を反復処理するときに各テーブルを無効にしてドロップしますlist
。完了すると、終了します。