it-swarm.com.de

Wie kopiere ich Daten von einem HDFS auf ein anderes HDFS?

Ich habe zwei HDFS-Einstellungen und möchte einige Tabellen von HDFS1 nach HDFS2 kopieren (nicht migrieren oder verschieben). Wie kopiere ich Daten von einem HDFS auf ein anderes HDFS? Ist es über Sqoop oder eine andere Befehlszeile möglich?

11
sharp

DistCp (Distributed Copy) ist ein Werkzeug zum Kopieren von Daten zwischen Clustern. Es verwendet MapReduce, um die Verteilung, Fehlerbehandlung, Wiederherstellung und Berichterstellung durchzuführen. Es erweitert eine Liste von Dateien und Verzeichnissen zur Eingabe, um Tasks zuzuordnen, von denen jede eine Partition der in der Quellenliste angegebenen Dateien kopiert.

Verwendung: $ hadoop distcp <src> <dst>

beispiel: $ hadoop distcp hdfs://nn1:8020/file1 hdfs://nn2:8020/file2

file1 von nn1 wird mit dem Dateinamen nn2 nach file2 kopiert. 

Distcp ist momentan das beste Werkzeug. Sqoop wird verwendet, um Daten aus der relationalen Datenbank in HDFS und umgekehrt zu kopieren, nicht jedoch zwischen HDFS und HDFS.

Mehr Info: 

Es stehen zwei Versionen zur Verfügung - Laufzeitleistung in distcp2 ist mehr als distcp 

24
Avinash

Hadoop enthält ein nützliches Programm namens distcp, mit dem große Datenmengen parallel zu und von Hadoop Filesystems kopiert werden können. Der kanonische Anwendungsfall für distcp ist die Datenübertragung zwischen zwei HDFS-Clustern. Wenn auf den Clustern identische Versionen von hadoop ausgeführt werden, ist die Verwendung des hdfs-Schemas angemessen.

$ hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar

Die Daten im /foo-Verzeichnis von namenode1 werden in das/bar-Verzeichnis von namenode2 kopiert. Wenn das Verzeichnis /bar nicht vorhanden ist, wird es erstellt. Wir können auch mehrere Quellpfade erwähnen.

Ähnlich wie beim Befehl rsync überspringt der Befehl distcp standardmäßig die bereits vorhandenen Dateien. Wir können auch die Option -overwrite verwenden, um die vorhandenen Dateien im Zielverzeichnis zu überschreiben. Die Option -update aktualisiert nur die Dateien, die sich geändert haben.

$ hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo

distcp kann auch als MapReduce-Job implementiert werden, bei dem das Kopieren von Karten erfolgt, die parallel im Cluster ausgeführt werden. Es wird keine Reduzierstücke geben.

Beim Versuch, Daten zwischen zwei HDFS-Clustern zu kopieren, auf denen verschiedene Versionen ausgeführt werden, schlägt der Kopiervorgang fehl, da die RPC-Systeme nicht kompatibel sind. In diesem Fall müssen wir die schreibgeschützten HTTP-basierten HFTP-Dateisysteme verwenden, um aus der Quelle zu lesen. Hier muss der Job auf dem Zielcluster ausgeführt werden.

$ hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar

50070 ist die Standardportnummer für den eingebetteten Webserver von namenode.

13
Baban Gaigole

distcp wird zum parallelen Kopieren von Daten in und aus den hadoop-Dateisystemen verwendet. Es ist dem generischen hadoop fs -cp-Befehl ähnlich. Im Hintergrundprozess wird distcp als MapReduce-Job implementiert, bei dem Mapper nur für das parallele Kopieren innerhalb des Clusters implementiert werden. 

Verwendungszweck:

  • kopieren Sie eine Datei in eine andere

    % hadoop distcp file1 file2

  • verzeichnisse von einem Ort zum anderen kopieren

    % hadoop distcp dir1 dir2

Wenn dir2 nicht vorhanden ist, erstellt er diesen Ordner und kopiert den Inhalt. Wenn dir2 bereits vorhanden ist, wird dir1 darunter kopiert. Die Option -overwrite bewirkt, dass die Dateien innerhalb desselben Ordners überschrieben werden. Die Option -update aktualisiert nur die Dateien, die geändert werden.

  • Übertragen von Daten zwischen zwei HDFS-Clustern

    % hadoop distcp -update -delete hdfs://nn1/dir1 hdfs://nn2/dir2

Die Option -delete löscht die Dateien oder Verzeichnisse aus dem Ziel, die nicht in der Quelle vorhanden sind.

Probieren Sie dtIngest aus. Es wurde auf der Plattform Apache Apex entwickelt. Dieses Tool kopiert Daten aus verschiedenen Quellen wie HDFS, freigegebenes Laufwerk, NFS, FTP, Kafka an verschiedene Ziele. Das Kopieren von Daten vom Remote-HDFS-Cluster in den lokalen HDFS-Cluster wird von dtIngest unterstützt. dtIngest führt Garne aus, um Daten parallel zu kopieren. Das ist sehr schnell. Es kümmert sich um Fehlerbehandlung, Wiederherstellung usw. und unterstützt regelmäßig das Abrufen von Verzeichnissen, um fortlaufend zu kopieren.

Verwendung: dtingest [OPTION] ... SOURCEURL ... DESTINATIONURL Beispiel: dtingest hdfs: // nn1: 8020/source hdfs: // nn2: 8020/dest

1
priya

der Befehl distcp dient zum parallelen Kopieren von einem Cluster zu einem anderen Cluster. Sie müssen den Pfad für den Namennode von src und den Pfad für den Namennode von dst festlegen, intern wird Mapper verwendet.

Beispiel:

$ hadoop distcp <src> <dst>

es gibt einige Optionen, die Sie für distcp einstellen können 

-m für nein. von Mapper zum Kopieren von Daten erhöht dies die Kopiergeschwindigkeit.

-atomic zum automatischen Festschreiben der Daten.

-update aktualisiert nur die Daten der alten Version.

Es gibt generische Befehle zum Kopieren von Dateien in hadoop: -cp und -put, aber sie werden nur verwendet, wenn das Datenvolumen geringer ist.

0
Pankaj Mandale

Es ist auch hilfreich zu wissen, dass Sie die zugrundeliegenden MapReduce-Jobs entweder mit dem Quell- oder Ziel-Cluster wie folgt ausführen können:

hadoop --config /path/to/hadoop/config distcp <src> <dst>
0
Paul Back