在Hadoop文件系统中复制本地文件

时间:2014-02-05 07:26:12

标签: hadoop hdfs

以编程方式在HDFS中复制文件的最快方法是什么?我尝试过DistCp,但无法获得适当的内容

3 个答案:

答案 0 :(得分:2)

distcp localfFS到HDFS HDFS到HDFS 复制完全正常。但是,它没有为我们提供MapReduce的高​​并行性的好处,因为输入数据驻留在localFS(非分发存储)而不是HDFS上。因此,使用两者中的任何一个都会给你几乎相同的性能,这显然取决于输入数据的硬件和大小。

顺便说一下, DistCp是什么意思,但无法获得适当的内容

答案 1 :(得分:0)

 FileSystem fs = FileSystem.get(conf);
 fs.copyFromLocalFile(new Path("/home/me/localdirectory/"),   new Path("/me/hadoop/hdfsdir"));

DistCp仅适用于群集内(从hdfs到hdfs)。

答案 2 :(得分:0)

Distcp无疑是通过HDFS复制大量数据的最快方式。我建议先从命令行尝试,然后再调用你最喜欢的编程语言。

hadoop distcp -p -update "hdfs://A:8020/user/foo/bar" "hdfs://B:8020/user/foo/baz"

-p保留状态,-update覆盖数据,如果文件已存在但具有不同的大小。

由于Distcp为written in Java,因此从Java应用程序调用它应该没有任何困难。您还可以使用自己喜欢的脚本语言(Python,bash等)来运行hadoop distcp,就像任何其他命令行应用程序一样。