2014-09-18 12 views
8

Ich habe meine gecrawled Daten von Nutch in Hbase, deren Dateisystem ist hdfs. Dann hat ich meine Daten kopiert (Eine Tabelle von hbase) von hdfs direkt mit einem lokalen Verzeichnis mit dem BefehlWie importieren/exportieren HBase Daten über hdfs (Hadoop-Befehle)

hadoop fs -CopyToLocal /hbase/input ~/Documents/output 

Danach kopierte ich, dass die Daten in einer anderen hbase (anderes System) mit dem Befehl folgenden

hadoop fs -CopyFromLocal ~/Documents/input /hbase/mydata 

Es ist in hdfs gespeichert und wenn ich list Befehl in HBase Shell verwenden, zeigt es es als eine andere Tabelle dh "Mydata", aber wenn ich scan Befehl ausführen, heißt es dort gibt es keine Tabelle mit 'Mydata' Namen.

Was ist ein Problem mit dem obigen Verfahren? In einfachen Worten:

  1. I unter Verwendung eines hadoop Befehls
  2. Dann hbase Tabelle zu meinem lokalen Dateisystem kopieren will, mag ich es in hdfs in einem anderen System von hadoop Befehl
  3. schließlich direkt speichern möchte ich die Tabelle in hbase zu sein schien und seine Daten wie die ursprüngliche Tabelle zu einem anderen, verwenden Sie eine der folgenden Methode

Antwort

20

Wenn Sie möchten, exportieren Sie die Tabelle von einem hbase Cluster und importieren Sie es an:

Mit Hadoop

  • Export

    $ bin/hadoop jar <path/to/hbase-{version}.jar> export \ 
        <tablename> <outputdir> [<versions> [<starttime> [<endtime>]] 
    

    HINWEIS: Kopieren Sie das Ausgabeverzeichnis in hdfs von der Quelle zum Ziel-Cluster

  • Import

Hinweis: Beide outputdir und InputDir sind in hdfs.

Mit Hbase

  • Export

    $ bin/hbase org.apache.hadoop.hbase.mapreduce.Export \ 
        <tablename> <outputdir> [<versions> [<starttime> [<endtime>]]] 
    
  • Kopieren Sie das Ausgabeverzeichnis in hdfs von der Quelle zum Ziel-Cluster

  • Import

    $ bin/hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir> 
    

    Referenz: Hbase tool to export and import

+0

Ich glaube, Sie haben meine qustion nicht sorgfältig lesen. Ich sagte: "Ich möchte die hbase-Tabelle in mein lokales Dateisystem kopieren, indem ich den hadoop-Befehl verwende", informieren Sie mich, – Shafiq

+0

Was meinen Sie mit dem Kopieren der hbase-Tabelle in das lokale Dateisystem? Sie können immer den copyToLocal-Befehl von hadoop für die Dateien in hdfs verwenden, die sich auf eine Tabelle beziehen, aber das ist nicht sinnvoll. Wenn Sie planen, die Tabelle in einen anderen Cluster zu kopieren, müssen Sie eine der oben genannten Methoden verwenden. Selbst auf die oben genannte Weise müssen Sie die exportierten Dateien in das lokale Dateisystem kopieren und in einen anderen Cluster kopieren. – Nanda

+0

Ich möchte eine Sicherung meiner gecrawlten Daten auf einem externen Laufwerk (USB-Festplatte) haben, damit ich im Falle eines Maschinenfehlers meinen Cluster neu erstellen kann. oder in Zukunft, wenn ich neue Version og Hadoop usw. annehmen muss, dann brauche ich es – Shafiq

4

Wenn Sie den Hbase Befehl stattdessen Backup hbase Tabellen verwenden, können Sie die Hbase ExportSnapshot Werkzeug, das Kopien der hfiles, Protokolle und Snapshot-Metadaten zu anderen Dateisystem verwenden können (local/hdfs/s3) Verwenden eines Kartenreduzierungsauftrags.

  • Snapshot der Tabelle

    $ ./bin/hbase shell hbase> snapshot 'myTable', 'myTableSnapshot-122112'

  • Export in dem gewünschten Dateisystem

    $ ./bin/hbase class org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot MySnapshot -copy-to fs://path_to_your_directory

Sie es wieder aus dem lokalen Dateisystem exportieren zu hdfs: /// srv2: 8082/hbase und führen Sie den Wiederherstellungsbefehl von der HBAS-Shell aus, um die Tabelle aus dem Snapshot wiederherzustellen.

$ ./bin/hbase shell 
hbase> disable 'myTable' 
hbase> restore_snapshot 'myTableSnapshot-122112' 

Referenz: Hbase Snapshots