-1

我有 FTP 服务器(F [ftp])、linux box(S [standalone])和 hadoop 集群(C [cluster])。当前文件流为 F->S->C。我试图通过跳过 S 来提高性能。

目前的流量是:

wget ftp://user:password@ftpserver/absolute_path_to_file
hadoop fs -copyFromLocal path_to_file path_in_hdfs

我试过了:

hadoop fs -cp ftp://user:password@ftpserver/absolute_path_to_file path_in_hdfs

和:

hadoop distcp ftp://user:password@ftpserver/absolute_path_to_file path_in_hdfs

两个都挂了。作为作业的 distcp 被超时杀死。日志(hadoop job -logs)只说它被超时杀死了。我试图从 C 的某个节点的 ftp 中获取 wget 并且它有效。可能是什么原因以及如何解决的任何提示?

4

2 回答 2

2

通过标准输入管道:

 wget ftp://user:password@ftpserver/absolute_path_to_file | hadoop fs -put - path_in_hdfs

单 - 告诉 HDFS put 从标准输入读取。

于 2014-09-24T05:07:25.350 回答
-2

hadoop fs -cp ftp://user:password@ftpserver.com/absolute_path_to_file path_in_hdfs

这不能使用,因为源文件是本地文件系统中的文件。它没有考虑您尝试通过的方案。参考javadoc:文件系统

DISTCP 仅适用于大型集群内或集群间(读取为 Hadoop 集群,即 HDFS)。它再次无法从 FTP 获取数据。两步过程仍然是您最好的选择。或者编写一个程序从 FTP 读取并写入 HDFS。

于 2014-09-23T18:07:54.007 回答