2011-01-17 15 views
19

Gibt es eine HDFS-API, die ein gesamtes lokales Verzeichnis auf das HDFS kopieren kann? Ich habe eine API zum Kopieren von Dateien gefunden, aber gibt es eine für Verzeichnisse?Hadoop ein Verzeichnis kopieren?

Antwort

15

Verwenden Sie die Hadoop FS shell. Im Einzelnen:

$ hadoop fs -copyFromLocal /path/to/local hdfs:///path/to/hdfs 

Wenn Sie es programmatisch tun möchten, erstellen Sie zwei Filesystems (eine lokale und eine HDFS) und verwenden the FileUtil class

+0

Ich muss dies programmatisch tun. nicht aus der Shell – rakeshr

+0

ok, habe ich hinzugefügt, wie das mit FileUtil zu tun. –

+0

Kann Hadoop fs Kopie von einer Dateifreigabe unterstützen? Das gelingt mir nie – machinarium

10

Ich versuchte, aus dem Verzeichnis kopieren

/hadoop/core/bin/hadoop fs -copyFromLocal /home/grad04/lopez/TPCDSkew/ /export/hadoop1/lopez/Join/TPCDSkew 

mit Es gab mir ein Fehler, der sagt, Ziel ist ein Verzeichnis. Ich änderte es dann zu

/hadoop/core/bin/hadoop fs -copyFromLocal /home/grad04/lopez/TPCDSkew/*.* /export/hadoop1/lopez/Join/TPCDSkew 

es funktioniert.

+1

Dies bezieht sich auf die Hadoop-Version 0.20. – LGG

+2

Dieses Problem wurde behoben und diese Notation wird nicht mehr benötigt. Das OP hat jedoch keine Hadoop-Version angegeben, daher kann diese Antwort auch für alte Versionen gelten. – Tommy

0

Für Programmierer können Sie auch copyFromLocalFile verwenden. Hier ein Beispiel:

import org.apache.hadoop.conf.Configuration 
import org.apache.hadoop.fs.FileSystem 
import org.apache.hadoop.fs.Path 

val hdfsConfig = new Configuration 
val hdfsURI = "hdfs://127.0.0.1:9000/hdfsData" 
val hdfs = FileSystem.get(new URI(hdfsURI), hdfsConfig) 

val oriPath = new Path("#your_localpath/customer.csv") 
val targetFile = new Path("hdfs://your_hdfspath/customer.csv") 
hdfs.copyFromLocalFile(oriPath, targetFile) 
2

In Hadoop Version:

Hadoop 2.4.0.2.1.1.0-390 

(Und wahrscheinlich später, ich habe nur diese spezielle Version getestet, wie es derjenige ist, ich habe)

Sie können kopieren ganze Verzeichnisse rekursiv ohne spezielle Notation copyFromLocal zB ,:

hadoop fs -copyFromLocal /path/on/disk /path/on/hdfs 

was auch funktioniert, wenn /path/on/disk ein Verzeichnis ist, das Unterverzeichnisse und Dateien enthält.

Verwandte Themen