2016-04-23 5 views
6

Ich bin mithdfs dfs -put mit überschreiben?

hdfs dfs -put myfile mypath 

und für einige Dateien, die ich bekommen

put: 'myfile': File Exists 
  • , dass es bedeutet eine Datei mit dem gleichen Namen ist oder dass die gleiche genaue Datei (Größe, Inhalt bedeutet) ist schon da?
  • Wie kann ich hier eine Überschreibung angeben?

Vielen Dank!

Antwort

4

put: 'myfile': File Exists

Mittel, die Datei mit dem Namen "myfile" existiert bereits in hdfs. Sie können nicht mehrere Dateien mit dem gleichen Namen in hdfs

Sie es überschreiben können hadoop fs -put -f /path_to_local /path_to_hdfs

+0

danke! sehr hilfreich. Ich überprüfe, ob die Übertragung korrekt durchgeführt wurde? Sagen wir, ich fange hdfs an und schließe meine Konsole. Hat hdfs jetzt eine beschädigte Datei? –

+1

Um zu überprüfen, ob die kopierte Datei korrekt ist (in Bezug auf die Größe) oder nicht, können Sie hdfs dfs -ls/filename verwenden. Es zeigt die Dateigröße in Bytes zusammen mit anderen Informationen an. @ Noobie – Sumit

+3

Also 'hdfs dfs -put -f Eingabe Ausgabe' funktioniert nicht? Ich habe Quellen gefunden, die aussagen, dass es funktioniert –

4
  1. Eine Datei haben mit dem gleichen Namen an der Stelle existiert Sie versuchen zu schreiben.
  2. Sie können überschreiben, indem Sie das Flag -f angeben.
+0

AFAIK, wir können die Dateien nicht überschreiben, die in hdfs vorhanden sind, und deshalb ist hadoop für Eigenschaft "einmal lesen gelesen mehrfache" bekannt. Liege ich falsch?? – Sumit

+1

@ user007, Sie können Dateien löschen und eine neue Datei mit dem gleichen Namen erstellen, überschreiben. Und in einigen Fällen können Sie Daten am Ende der Datei anhängen, aber nur am Ende. Append ist nur in der Hadoop-Version verfügbar, die es enthält und für HBase und andere Frameworks erforderlich ist. – RojoSam

31

Sie können Ihre Datei in hdfs mit -f command.For Beispiel für mich

hadoop fs -put -f <localfile> <hdfsDir> 

ODER

hadoop fs -copyFromLocal -f <localfile> <hdfsDir> 

Es funktionierte gut überschreiben. Der Befehl -f funktioniert jedoch nicht im Falle des Befehls get oder copyToLocal. check this question