Accélérer le FTP récursif

Je tente de download la valeur d'une année de données à partir d'un server FTP NOAA en utilisant wget (ou ncftpget). Cependant, cela prend plus de time qu'il ne devrait en raison des frais généraux de FTP (je pense). Par exemple, cette command

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 

Quand je regarde ce transfert, chaque file individuel est transféré assez rapidement (500kb / s), mais le téléchargement de 12 000 files relativement petits entraîne des frais généraux énormes et ralentit tout le process.

Mes questions:

  1. Est-ce que j'évalue la situation correctement? Je me rends count qu'il est difficile de le dire sans connaître les servers, mais le FTP est-il vraiment aussi gourmand en transférant des tonnes de petits files?
  2. Y at-il des réglages pour wget ou ncftpget pour leur permettre de jouer plus agréable avec le server FTP distant? Ou peut-être une sorte de parallélisme?

Voici comment j'ai fini par résoudre cela 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 get une list de files
  2. sed pour compléter les paths de files à une list complète de files http
  3. aria2c pour les download rapidement

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 vite et est probablement plus gentil pour les servers de la NOAA. Il y a probablement même un moyen intelligent de se débarrasser de cette étape intermédiaire, mais je ne l'ai pas encore trouvé.

  1. Votre évaluation est correcte. Du sharepoint vue des numbers purs, les frais généraux ralentissent le téléchargement
  2. Utilisez aria2c . Aria2c ouvre de nombreuses connections parallèles au server ftp pour download plus rapidement un set de files. Assurez-vous simplement que votre server prend en charge plusieurs connections simultanées à partir du même hôte

Sinon, si vous avez un access en écriture sur votre hôte (dans ce cas, je suppose que vous vous connectez anonymement et que vous n'avez pas access en écriture) zip / tar les files avant le téléchargement

Oui tu as raison. Malheureusement, alors que les spécifications ftp offrent un mode de transfert alternatif qui est capable de multiplier plusieurs files sur une seule connection de données, la dernière fois que j'ai fait un sondage sur les logiciels disponibles (il était vrai en 1998), aucun ne l'a soutenu. Je ne pense pas que la situation a changé parce que l'intérêt pour ftp a été plutôt faible. La plupart des organisations avec de tels sets de données y ont access via http, ou dans de plus grandes archives pour éviter ce problème. Vous devriez vérifier si NOAA fait cela.