Ftp
加速遞歸 FTP
我正在嘗試使用 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/秒),但下載 12,000 個相對較小的文件的過程會產生巨大的成本並減慢整個過程。
我的問題:
- 我是否正確評估了情況?我意識到在不知道伺服器的情況下很難分辨,但是在傳輸大量小文件時,FTP 真的很糟糕嗎?
- 是否對 wget 或 ncftpget 進行了任何調整,以使它們能夠更好地與遠端 FTP 伺服器配合使用?或者也許是某種並行性?
以下是我最終如何使用其他人的建議來解決這個問題。在這種情況下,NOAA 有一個 FTP 和一個 HTTP 資源,所以我編寫了一個執行以下操作的腳本:
- ncftpls 獲取文件列表
- sed 完成 http 文件完整列表的文件路徑
- 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 的伺服器更友好。甚至可能有一種巧妙的方法可以擺脫中間步驟,但我還沒有找到。