加快递归FTP


8

我正在尝试使用wget(或ncftpget)从NOAA FTP服务器下载一年的数据。但是,由于FTP的开销,它花费的时间比应该花费的时间长(我认为)。例如,此命令

time wget -nv -m ftp://ftp:email@ftp.ncdc.noaa.gov/pub/data/noaa/2015 -O /weather/noaa/2015

或类似地,通过ncftpget

ncftpget -R -T -v ftp.ncdc.noaa.gov /weather/noaa/ /pub/data/noaa/2015

产生结果。53分钟转移30M!

FINISHED --2015-01-03 16:21:41--
Total wall clock time: 53m 32s
Downloaded: 12615 files, 30M in 7m 8s (72.6 KB/s)

real    53m32.447s
user    0m2.858s
sys 0m8.744s

当我观看此传输时,每个文件的传输速度都非常快(500kb / sec),但是下载12,000个相对较小的文件的过程会产生大量的开销,并使整个过程变慢。

我的问题:

  1. 我是否正确评估了情况?我知道在不知道服务器的情况下很难说,但是FTP在传输大量小文件时真的吸收了这么多吗?
  2. 是否有wget或ncftpget的任何调整,以使它们与远程FTP服务器更好地兼容?还是某种并行性?

Answers:


6

这就是我最终使用其他人的建议解决此问题的方式。在这种情况下,NOAA为此具有FTP和HTTP资源,因此我编写了执行以下操作的脚本:

  1. ncftpls获取文件列表
  2. sed以完成到http文件完整列表的文件路径
  3. aria2c快速下载所有内容

示例脚本:

# generate file list
ncftpls ftp://path/to/ftp/resources > /tmp/remote_files.txt

# append the full path, use http
sed -i -e 's/^/http:\/\/www1\.website\.gov\/pub\/data\//' /tmp/remote_files.txt

# download using aria2c
aria2c -i /tmp/remote_files.txt -d /filestore/2015

这运行得更快,并且可能对NOAA的服务器更友好。也许甚至有一个聪明的方法可以摆脱这一中间步骤,但是我还没有找到它。


出色的解决方案,开箱即用!谢谢。
markusN

2
  1. 您的评估是正确的。从纯数字的角度来看,开销减慢了下载速度
  2. 使用aria2c。Aria2c打开许多与ftp服务器的并行连接,以更快地下载一组文件。只要确保您的服务器支持来自同一主机的多个并发连接

另外,如果您对主机具有写访问权限(在这种情况下,我认为您是匿名登录并且没有写访问权限),请在下载之前对文件进行zip / tar


如果您也可以压缩,则可以使其更快。
ctrl-alt-delor

aria2c可以支持递归FTP吗?我查看了文档,却找不到相关内容,就像我想下载整个文件夹一样……
Tom Hayden 2015年

它不支持它,但是,使用标准ftp枚举文件,然后将该列表传递给aria仍然比递归标准ftp更快
Outurnate 2015年

@TomHayden-我不知道您可以做到这一点,但是可以列出一个文件夹并将结果提供给它。还有一个RPC接口,您几乎可以用它进行任何操作。742:很好的答案-来这里是要说这个,但是你击败了我。
mikeserv

@mikeserv谢谢。查找RPC的建议
2015年

1

是的,你是对的。不幸的是,尽管ftp规范提供了一种替代的传输模式,该模式能够通过单个数据连接传输多个文件,但是上一次我对可用软件进行调查(该数据早在1998年就被接受了),但没有人支持它。我认为情况没有改变,因为对ftp的兴趣一直很低。拥有此类数据集的大多数组织都通过http或较大的档案库提供对它们的访问,以避免此问题。您应该检查NOAA是否这样做。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.