web-dev-qa-db-fra.com

Hadoop copier un répertoire?

Existe-t-il une API HDFS capable de copier un répertoire local complet sur HDFS? J'ai trouvé une API pour copier des fichiers, mais existe-t-il une pour les répertoires?

22
rakeshr

Utilisez le Hadoop FS Shell . Plus précisément:

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

Si vous voulez le faire par programme, créez deux FileSystems (un Local et un HDFS) et utilisez la classe FileUtil

16
Spike Gronim

J'ai essayé de copier depuis le répertoire en utilisant 

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

Cela m'a donné une erreur en disant que la cible est un répertoire. Je l'ai ensuite modifié pour 

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

Ça marche .

10
LGG

Dans la version Hadoop:

Hadoop 2.4.0.2.1.1.0-390

(Et probablement plus tard, je n'ai testé que cette version spécifique car c'est celle que j'ai)

Vous pouvez copier des répertoires entiers de manière récursive sans aucune notation spéciale à l'aide de copyFromLocal, par exemple:

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

qui fonctionne même lorsque /path/on/disk est un répertoire contenant des sous-répertoires et des fichiers. 

2
Tommy

Vous pouvez également utiliser la commande put:

$ hadoop fs -put /local/path hdfs:/path
0
Crt

Pour le programmeur, vous pouvez également utiliser copyFromLocalFile. Voici un exemple:

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)
0
Haimei