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?
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
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 .
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.
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)
Também pode usar o comando put
:
$ hadoop fs -put /local/path hdfs:/path