私は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ファイルのダウンロード中に多くのオーバーヘッドが発生し、プロセス全体が遅くなりました。
私の質問:
- 状況の私の評価は正しいですか?サーバーがわからないと言うのは難しいことを知っていますが、小さなファイルをたくさん転送するときにFTPが本当に悪いのですか?
- リモートFTPサーバーでうまく機能するようにwgetまたはncftpgetを調整しましたか?それとも一種の並列性でしょうか?
答え1
他のユーザーの提案を使用してこの問題を解決した方法は次のとおりです。この場合、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サーバーに慣れ親しむことができます。中間段階を排除する賢い方法があるかもしれませんが、まだ見つかりませんでした。
答え2
- あなたの評価は正しいです。純粋に数字の観点から見ると、オーバーヘッドが原因でダウンロードが遅くなります。
- 使用アリア2c。 Aria2cはFTPサーバーへの多くの並列接続を開き、ファイルセットをより速くダウンロードします。サーバーが同じホストで複数の同時接続をサポートしていることを確認してください。
または、ホストコンピュータに書き込みアクセス権がある場合(この場合は匿名でログインし、書き込みアクセス権がないと仮定)、ダウンロードする前にファイルを圧縮するかtarで圧縮します。
答え3
はい、そうです。残念ながら、ftp仕様は単一のデータ接続を介して複数のファイルをパイピングするための代替転送モードを提供しますが、最後に利用可能なソフトウェアを調査したとき(1998年に認められた)、誰もそれをサポートしていません。 FTPへの関心が非常に低いので、状況が変わったとは思わない。これらのデータセットを持つほとんどの組織は、この問題を回避するためにhttpまたはより大きなアーカイブを介してそのデータセットへのアクセスを提供します。これが完了したことを確認するには、NOAAに確認する必要があります。