以编程方式在HDFS中复制文件的最快方法是什么?我尝试过DistCp,但无法获得适当的内容
答案 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,就像任何其他命令行应用程序一样。