Accélérer le FTP récursif

8

J'essaie de télécharger l'équivalent d'un an de données à partir d'un serveur FTP NOAA en utilisant wget (ou ncftpget). Cependant, cela prend beaucoup plus de temps qu'il ne le devrait en raison de la surcharge de FTP (je pense). Par exemple, cette commande

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

Ou de même, via ncftpget

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

Donne un résultat de. 53 minutes pour transférer 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

Lorsque je regarde ce transfert, chaque fichier individuel est transféré assez rapidement (500 Ko / s), mais le processus de téléchargement de 12 000 fichiers relativement petits entraîne une énorme surcharge et ralentit l'ensemble du processus.

Mes questions:

  1. Suis-je en train d'évaluer correctement la situation? Je me rends compte que c'est difficile à dire sans connaître les serveurs, mais FTP aspire-t-il vraiment autant lors du transfert de tonnes de petits fichiers?
  2. Existe-t-il des ajustements à wget ou ncftpget pour leur permettre de jouer plus agréablement avec le serveur FTP distant? Ou peut-être une sorte de parallélisme?
Tom Hayden
la source

Réponses:

6

Voici comment j'ai fini par résoudre ce problème en utilisant les conseils des autres. La NOAA dans ce cas a un FTP et une ressource HTTP pour cela, donc ce que j'ai écrit un script qui fait ce qui suit:

  1. ncftpls pour obtenir une liste de fichiers
  2. sed pour compléter les chemins de fichiers vers une liste complète des fichiers http
  3. aria2c pour les télécharger rapidement tous

Exemple de script:

# 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

Cela fonctionne beaucoup plus rapidement et est probablement plus respectueux des serveurs de la NOAA. Il existe probablement même un moyen intelligent de se débarrasser de cette étape intermédiaire, mais je ne l'ai pas encore trouvée.

Tom Hayden
la source
Excellente solution, fonctionne hors de la boîte! Merci.
markusN
2
  1. Votre évaluation est correcte. Du point de vue des chiffres purs, la surcharge ralentit le téléchargement
  2. Utilisez aria2c . Aria2c ouvre de nombreuses connexions parallèles au serveur ftp pour télécharger plus rapidement un ensemble de fichiers. Assurez-vous simplement que votre serveur prend en charge plusieurs connexions simultanées à partir du même hôte

Alternativement, si vous avez un accès en écriture sur votre hôte (dans ce cas, je suppose que vous vous connectez de manière anonyme et n'avez pas accès en écriture) zip / tar les fichiers avant le téléchargement

Outurnate
la source
Si vous pouvez également compresser, cela peut être encore plus rapide.
ctrl-alt-delor
Aria2c peut-il prendre en charge le FTP récursif? J'ai regardé la documentation et je n'ai pas trouvé de mention à ce sujet, comme si je voulais télécharger un dossier entier ...
Tom Hayden
Il ne le prend pas en charge, cependant, en utilisant le ftp standard pour énumérer les fichiers, puis passer cette liste à aria sera toujours plus rapide que le ftp standard récursif
Outurnate
@ TomHayden - Je ne sais pas si vous pouvez exactement, mais vous pouvez certainement répertorier un dossier et lui fournir les résultats. Il y a aussi l' interface RPC avec laquelle vous pouvez faire pratiquement n'importe quoi. 742: bonne réponse - est venu ici pour dire cela, mais vous m'avez battu.
mikeserv
@mikeserv merci. Accessoires pour trouver le RPC
Outurnate
1

Oui tu as raison. Malheureusement, bien que les spécifications ftp offrent un mode de transfert alternatif capable de multiplier plusieurs fichiers sur une seule connexion de données, la dernière fois que j'ai fait une enquête sur les logiciels disponibles (qui était certes de retour en 1998), aucun ne les a pris en charge. Je ne pense pas que la situation ait changé car l'intérêt pour le ftp a été plutôt faible. La plupart des organisations disposant de tels ensembles de données y ont accès via http ou dans des archives plus grandes pour éviter ce problème. Vous devriez vérifier si la NOAA le fait.

psusi
la source