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

7lrncoxx  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(377)

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

chy5wohz

chy5wohz1#

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

distcp只在集群内工作(从hdfs到hdfs)。

yxyvkwin

yxyvkwin2#

对于localffs到hdfs和hdfs到hdfs的复制,distcp工作得非常好。但是,由于输入数据驻留在localfs(非分布式存储)上而不是hdfs上,因此它并没有为我们提供mapreduce的高度并行性的好处。因此,使用这两种方法中的任何一种都可以获得几乎相同的性能,这显然取决于硬件和输入数据的大小。
顺便说一句,你说的distcp是什么意思,但不能得到适当的内容?

tyky79it

tyky79it3#

distcp无疑是通过hdfs复制大量数据的最快方法。我建议在从您最喜欢的编程语言调用if之前,先从命令行尝试一下。

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

-p保留状态,-update如果文件已经存在但大小不同,则覆盖数据。
因为distcp是用java编写的,所以从java应用程序调用它应该不会有任何困难。您还可以使用您最喜欢的脚本语言(python、bash等)来运行hadoop distcp,就像其他任何命令行应用程序一样。

相关问题