再帰FTP速度の向上

再帰FTP速度の向上

私はwget(またはncftpget)を使用してNOAA FTPサーバーから1年間のデータをダウンロードしようとしています。しかし、FTPのオーバーヘッドは予想よりも時間がかかりました。たとえば、このコマンドは

time wget -nv -m ftp://ftp:[email protected]/pub/data/noaa/2015 -O /weather/noaa/2015

または同様にncftpget経由

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

結果は30M伝送に53分!

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ファイルのダウンロード中に多くのオーバーヘッドが発生し、プロセス全体が遅くなりました。

私の質問:

  1. 状況の私の評価は正しいですか?サーバーがわからないと言うのは難しいことを知っていますが、小さなファイルをたくさん転送するときにFTPが本当に悪いのですか?
  2. リモートFTPサーバーでうまく機能するようにwgetまたはncftpgetを調整しましたか?それとも一種の並列性でしょうか?

ベストアンサー1

他のユーザーの提案を使用してこの問題を解決した方法は次のとおりです。この場合、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サーバーに慣れ親しむことができます。中間段階を排除する賢い方法があるかもしれませんが、まだ見つかりませんでした。

おすすめ記事