O Hadoop copiou uma pasta?

existe uma API HDFS que possa copiar um directório local inteiro para as HDFS? Eu encontrei uma API para copiar arquivos, mas existe uma para diretórios?

 22
Author: slm, 2011-01-17

5 answers

Utilize a shellHadoop FS . Especificamente:

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

Se o quiser fazer programaticamente, crie dois sistemas de Ficheiros (um Local e um HDFS) e use a classe FileUtil

 16
Author: Spike Gronim, 2015-11-25 15:27:19

Tentei copiar a partir da pasta usando

/hadoop/core/bin/hadoop fs -copyFromLocal /home/grad04/lopez/TPCDSkew/ /export/hadoop1/lopez/Join/TPCDSkew
Deu-me um erro ao dizer que o alvo é um directório . Então modifiquei-o para
/hadoop/core/bin/hadoop fs -copyFromLocal /home/grad04/lopez/TPCDSkew/*.* /export/hadoop1/lopez/Join/TPCDSkew
Funciona .
 10
Author: LGG, 2012-04-22 17:25:46

Na versão Hadoop:

Hadoop 2.4.0.2.1.1.0-390

(e provavelmente mais tarde; só testei esta versão específica porque é a que tenho)

Você pode copiar pastas inteiras recursivamente sem qualquer notação especial usando copyFromLocal por exemplo:

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

Que funciona mesmo quando /path/on/disk é uma pasta que contém subdiretórios e ficheiros.

 2
Author: Tommy, 2015-08-12 13:38:09

Para programador, você também pode usar copyFromLocalFile. Aqui está um exemplo:

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
Author: Haimei, 2014-08-19 18:59:31

Também pode usar o comando put:

$ hadoop fs -put /local/path hdfs:/path
 0
Author: Crt, 2018-09-12 21:34:24