web-dev-qa-db-ja.com

hdfsを介してhbaseデータをインポート/エクスポートする方法(hadoopコマンド)

クロールされたデータをファイルシステムが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. Hadoopコマンドを使用してhbaseテーブルをローカルファイルシステムにコピーしたい
  2. 次に、hadoopコマンドを使用して、別のシステムのhdfsに直接保存します
  3. 最後に、テーブルをhbaseに表示し、そのデータを元のテーブルとして表示したい
9
Shafiq

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ツール

21
Nanda

代わりに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スナップショット

4
VishAmdi