以编程方式在hdfs中复制文件的最快方法是什么?我尝试了distcp,但无法获得适当的内容
chy5wohz1#
FileSystem fs = FileSystem.get(conf); fs.copyFromLocalFile(new Path("/home/me/localdirectory/"), new Path("/me/hadoop/hdfsdir"));
distcp只在集群内工作(从hdfs到hdfs)。
yxyvkwin2#
对于localffs到hdfs和hdfs到hdfs的复制,distcp工作得非常好。但是,由于输入数据驻留在localfs(非分布式存储)上而不是hdfs上,因此它并没有为我们提供mapreduce的高度并行性的好处。因此,使用这两种方法中的任何一种都可以获得几乎相同的性能,这显然取决于硬件和输入数据的大小。顺便说一句,你说的distcp是什么意思,但不能得到适当的内容?
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,就像其他任何命令行应用程序一样。
3条答案
按热度按时间chy5wohz1#
distcp只在集群内工作(从hdfs到hdfs)。
yxyvkwin2#
对于localffs到hdfs和hdfs到hdfs的复制,distcp工作得非常好。但是,由于输入数据驻留在localfs(非分布式存储)上而不是hdfs上,因此它并没有为我们提供mapreduce的高度并行性的好处。因此,使用这两种方法中的任何一种都可以获得几乎相同的性能,这显然取决于硬件和输入数据的大小。
顺便说一句,你说的distcp是什么意思,但不能得到适当的内容?
tyky79it3#
distcp无疑是通过hdfs复制大量数据的最快方法。我建议在从您最喜欢的编程语言调用if之前,先从命令行尝试一下。
-p保留状态,-update如果文件已经存在但大小不同,则覆盖数据。
因为distcp是用java编写的,所以从java应用程序调用它应该不会有任何困难。您还可以使用您最喜欢的脚本语言(python、bash等)来运行hadoop distcp,就像其他任何命令行应用程序一样。