So kopieren Sie Dateien von HDFS in das lokale Dateisystem


135

So kopieren Sie Dateien von HDFS in das lokale Dateisystem. Es gibt keinen physischen Speicherort einer Datei unter der Datei, nicht einmal ein Verzeichnis. Wie kann ich sie für weitere Validierungen zu meinem lokalen verschieben? Ich werde durch Winscp versucht.

Antworten:


242
  1. bin/hadoop fs -get /hdfs/source/path /localfs/destination/path
  2. bin/hadoop fs -copyToLocal /hdfs/source/path /localfs/destination/path
  3. Zeigen Sie mit Ihrem Webbrowser auf HDFS WEBUI ( namenode_machine:50070), navigieren Sie zu der Datei, die Sie kopieren möchten , scrollen Sie auf der Seite nach unten und klicken Sie auf Datei herunterladen .

Perfekter Tariq, ich habe es verstanden. Es gibt keinen physischen Speicherort einer Datei unter der Datei, nicht einmal ein Verzeichnis. bin / hadoop dfs -ls / use / hadoop / myfolder Ich kann die Datei anzeigen. Von Ich habe die Informationen als Um die Datei zu überprüfen, können Sie sie von HDFS in das lokale Dateisystem kopieren , damit ich sie von Winscp verschieben kann
Surya

2
Ich muss noch einmal Tariq erwähnen, vielen Dank, dass Sie Zeit und Wissen beigesteuert haben. Vielen Dank . Du hast viel unterstützt, das gibt viel Selbstvertrauen für einen neuen Bie wie mich.
Surya

1
Aha. Sie können den Befehl hdfs cat tatsächlich verwenden, wenn Sie den Inhalt der Datei anzeigen oder die Datei im Webui öffnen möchten. Dies erspart Ihnen das Herunterladen der Datei auf Ihre lokalen fs. Bitte schön. Und wenn Sie mit den Antworten auf Ihre Fragen zu 100% zufrieden sind, können Sie sie markieren, damit andere davon profitieren können. Nicht nur für diese, sondern allgemein.
Tariq

2
Nur um meinen lat-Kommentar zu ergänzen: Wenn es sich um eine Binärdatei handelt, zeigt cat Ihnen nicht den tatsächlichen Inhalt. Um den Inhalt einer Binärdatei anzuzeigen, können Sie verwenden: bin / hadoop fs -text / path / to / file
Tariq

1
Es scheint ein Fehler zu sein (behoben). Siehe die Antwort.
Tariq

27

In Hadoop 2.0

hdfs dfs -copyToLocal <hdfs_input_file_path> <output_path>

wo,

  • hdfs_input_file_path vielleicht erhalten von http://<<name_node_ip>>:50070/explorer.html

  • output_path ist der lokale Pfad der Datei, in den die Datei kopiert werden soll.

  • Sie können auch getanstelle von verwenden copyToLocal.


15

Um Dateien von HDFS in das lokale Dateisystem zu kopieren, kann der folgende Befehl ausgeführt werden:

hadoop dfs -copyToLocal <input> <output>

  • <input>: Der HDFS-Verzeichnispfad (z. B. / mydata), den Sie kopieren möchten
  • <output>: der Zielverzeichnispfad (zB ~ / Dokumente)

1
Das scheint bei mir nicht zu funktionieren. Es heißt immer, dass die <input> -Datei nicht gefunden wurde. Ich benutze Clouderas VM-Instanz, die Cent
OS

@SutharMonil Sind Sie sicher, dass die Datei tatsächlich vorhanden ist? Können Sie dort über stöbern hadoop fs -ls?
Dennis Jaheruddin

6

Sie können auf beide Arten erreichen.

1.hadoop fs -get <HDFS file path> <Local system directory path>
2.hadoop fs -copyToLocal <HDFS file path> <Local system directory path>

Ex:

Meine Dateien befinden sich in /sourcedata/mydata.txt. Ich möchte die Datei in das lokale Dateisystem unter diesem Pfad / user / ravi / mydata kopieren

hadoop fs -get /sourcedata/mydata.txt /user/ravi/mydata/

3

Wenn Ihre Quelldatei auf mehrere Dateien aufgeteilt ist (möglicherweise aufgrund von Kartenreduzierung), die sich im selben Verzeichnisbaum befinden, können Sie diese in eine lokale Datei kopieren mit:

hadoop fs -getmerge /hdfs/source/dir_root/ local/destination

Dies sollte akzeptiert werden. Dies ist, was die meisten Leute suchen, nicht eine aufgeteilte Datei.
James O'Brien

2

Dies funktionierte für mich auf meiner VM-Instanz von Ubuntu.

hdfs dfs -copyToLocal [Hadoop-Verzeichnis] ​​[lokales Verzeichnis]


0

Wenn Sie Docker verwenden, müssen Sie die folgenden Schritte ausführen:

  1. Kopieren Sie die Datei von hdfs nach namenode (hadoop fs -get output / part-r-00000 / out_text). "/ out_text" wird auf dem Namensknoten gespeichert.

  2. Kopieren Sie die Datei von namenode auf die lokale Festplatte mit (docker cp namenode: / out_text output.txt)

  3. output.txt befindet sich in Ihrem aktuellen Arbeitsverzeichnis


-3
bin/hadoop fs -put /localfs/destination/path /hdfs/source/path 

1
hdfs dfs -put ist ein Befehl zum Übertragen von Dateien von lokalem FS zu HDFS. hdfs dfs -get ist die richtige Option
b_rousseau
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.