クロールされたデータをファイルシステムがhdfsであるHbaseにナッチで保存しました。次に、データ(hbaseの1つのテーブル)をコマンドによってhdfsからローカルディレクトリに直接コピーしました
hadoop fs -CopyToLocal /hbase/input ~/Documents/output
その後、次のコマンドを実行して、そのデータを別のhbase(他のシステム)にコピーして戻しました
hadoop fs -CopyFromLocal ~/Documents/input /hbase/mydata
これはhdfsに保存され、hbase Shellでlist
コマンドを使用すると、別のテーブル、つまり「mydata」として表示されますが、scan
コマンドを実行すると、「 mydataの名前。
上記の手順の何が問題になっていますか?簡単な言葉で:
1つのhbaseクラスターからテーブルをエクスポートして別のクラスターにインポートする場合は、次のいずれかの方法を使用します。
Hadoopの使用
書き出す
$ bin/hadoop jar <path/to/hbase-{version}.jar> export \
<tablename> <outputdir> [<versions> [<starttime> [<endtime>]]
注:hdfsの出力ディレクトリをソースから宛先にコピーします集まる
インポート
$ bin/hadoop jar <path/to/hbase-{version}.jar> import <tablename> <inputdir>
注:outputdirとinputdirの両方がhdfsにあります。
Hbaseの使用
書き出す
$ bin/hbase org.Apache.hadoop.hbase.mapreduce.Export \
<tablename> <outputdir> [<versions> [<starttime> [<endtime>]]]
ソースから宛先クラスターにhdfsの出力ディレクトリをコピーします
インポート
$ bin/hbase org.Apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>
代わりにHbaseコマンドを使用してhbaseテーブルをバックアップできる場合は、マップ削減ジョブを使用して、hfile、ログ、およびスナップショットメタデータを他のファイルシステム(local/hdfs/s3)にコピーするHbase ExportSnapshotツールを使用できます。
テーブルのスナップショットを撮ります
$ ./bin/hbase Shell hbase> snapshot 'myTable', 'myTableSnapshot-122112'
必要なファイルシステムにエクスポートする
$ ./bin/hbase class org.Apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot MySnapshot -copy-to fs://path_to_your_directory
これをローカルファイルシステムからhdfs:/// srv2:8082/hbaseにエクスポートし、hbase Shellから復元コマンドを実行して、スナップショットからテーブルを復元できます。
$ ./bin/hbase Shell
hbase> disable 'myTable'
hbase> restore_snapshot 'myTableSnapshot-122112'
参照: Hbaseスナップショット