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?
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
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.
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
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.
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>