24

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

4

5 回答 5

17

使用Hadoop FS 外壳。具体来说:

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

如果您想以编程方式执行此操作,请创建两个文件系统(一个本地和一个 HDFS)并使用FileUtil 类

于 2011-01-17T20:00:49.420 回答
11

我尝试使用从目录复制

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

它给了我一个错误,说 Target is a directory 。然后我将其修改为

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

有用 。

于 2012-04-22T17:25:46.973 回答
2

在 Hadoop 版本中:

Hadoop 2.4.0.2.1.1.0-390

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

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

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

即使/path/on/disk是包含子目录和文件的目录,它也可以工作。

于 2015-08-12T13:38:09.727 回答
0

您还可以使用以下put命令:

$ hadoop fs -put /local/path hdfs:/path
于 2018-09-12T21:34:24.260 回答
-2

对于程序员,您也可以使用 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)
于 2014-08-19T18:59:31.057 回答