Hadoop复制一个目录?

时间:2011-01-17 19:23:24

标签: hadoop hdfs

是否有可以将整个本地目录复制到HDFS的HDFS API?我找到了一个用于复制文件的API,但有一个用于目录吗?

5 个答案:

答案 0 :(得分:16)

使用Hadoop FS shell。具体做法是:

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

如果您想以编程方式执行此操作,请创建两个FileSystems(一个Local和一个HDFS)并使用the FileUtil class

答案 1 :(得分:10)

我尝试使用

从目录中复制
/hadoop/core/bin/hadoop fs -copyFromLocal /home/grad04/lopez/TPCDSkew/ /export/hadoop1/lopez/Join/TPCDSkew

它给了我一个错误,说Target是一个目录。然后我将其修改为

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

它有效。

答案 2 :(得分:2)

在Hadoop版本中:

Hadoop 2.4.0.2.1.1.0-390

(可能以后;我只测试了这个特定的版本,因为它是我的版本)

您可以使用copyFromLocal来复制整个目录而无需任何特殊符号,例如:

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

即使/path/on/disk是包含子目录和文件的目录也能正常工作。

答案 3 :(得分:0)

对于程序员,您也可以使用copyFromLocalFile。这是一个例子:

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)

答案 4 :(得分:0)

您还可以使用put命令:

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