Rekursives FTP beschleunigen

8

Ich versuche, Daten im Wert von einem Jahr mit wget (oder ncftpget) von einem NOAA-FTP-Server herunterzuladen. Aufgrund des Overheads von FTP dauert es jedoch viel länger als erwartet (glaube ich). Zum Beispiel dieser Befehl

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

Oder ähnlich über ncftpget

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

Ergibt ein Ergebnis von. 53 Minuten, um 30M zu übertragen!

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

Wenn ich mir diese Übertragung ansehe, wird jede einzelne Datei ziemlich schnell übertragen (500 KBit / s), aber das Herunterladen von 12.000 relativ kleinen Dateien verursacht einen enormen Overhead und verlangsamt den gesamten Prozess.

Meine Fragen:

  1. Beurteile ich die Situation richtig? Mir ist klar, dass es schwer zu sagen ist, ohne die Server zu kennen, aber saugt FTP wirklich so viel, wenn Tonnen kleiner Dateien übertragen werden?
  2. Gibt es irgendwelche Verbesserungen an wget oder ncftpget, damit sie besser mit dem Remote-FTP-Server spielen können? Oder vielleicht eine Art Parallelität?
Tom Hayden
quelle

Antworten:

6

Hier ist, wie ich dieses Problem mithilfe der Ratschläge anderer gelöst habe. Die NOAA hat in diesem Fall eine FTP- und eine HTTP-Ressource dafür, also habe ich ein Skript geschrieben, das Folgendes tut:

  1. ncftpls, um eine Liste der Dateien zu erhalten
  2. sed, um die Dateipfade zu einer vollständigen Liste von http-Dateien zu vervollständigen
  3. aria2c, um sie alle schnell herunterzuladen

Beispielskript:

# 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

Dies läuft viel schneller und schont wahrscheinlich die Server der NOAA. Es gibt wahrscheinlich sogar eine clevere Möglichkeit, diesen mittleren Schritt loszuwerden, aber ich habe ihn noch nicht gefunden.

Tom Hayden
quelle
Hervorragende Lösung, funktioniert sofort! Vielen Dank.
MarkusN
2
  1. Ihre Einschätzung ist richtig. Vom Standpunkt der reinen Zahlen aus verlangsamt der Overhead den Download
  2. Verwenden Sie aria2c . Aria2c öffnet viele parallele Verbindungen zum FTP-Server, um eine Reihe von Dateien schneller herunterzuladen. Stellen Sie nur sicher, dass Ihr Server mehrere gleichzeitige Verbindungen vom selben Host unterstützt

Wenn Sie auf Ihrem Host Schreibzugriff haben (in diesem Fall würde ich davon ausgehen, dass Sie sich anonym anmelden und keinen Schreibzugriff haben), komprimieren / tarieren Sie die Dateien vor dem Download

Outurnate
quelle
Wenn Sie auch komprimieren können, wird dies möglicherweise noch schneller.
Strg-Alt-Delor
Kann aria2c rekursives FTP unterstützen? Ich habe mir die Dokumentation angesehen und konnte keine Erwähnung finden, da ich einen ganzen Ordner herunterladen möchte ...
Tom Hayden
Es wird jedoch nicht unterstützt, Standard-FTP zum Aufzählen von Dateien zu verwenden. Die Übergabe dieser Liste an Aria ist dann immer noch schneller als rekursives Standard-FTP
Outurnate
@ TomHayden - Ich bin mir nicht bewusst, dass Sie genau können, aber sicherlich können Sie einen Ordner auflisten und ihm die Ergebnisse zuführen. Es gibt auch die RPC-Schnittstelle, mit der Sie praktisch alles tun können. 742: gute Antwort - bin hergekommen, um das zu sagen, aber du hast mich geschlagen.
Mikeserv
@mikeserv danke. Requisiten zum Finden des RPC
Outurnate
1

Ja du hast Recht. Obwohl die FTP-Spezifikationen einen alternativen Übertragungsmodus bieten, mit dem mehrere Dateien über eine einzige Datenverbindung übertragen werden können, wurde dies bei der letzten Umfrage zu verfügbarer Software (die zugegebenermaßen bereits 1998 durchgeführt wurde) von keiner unterstützt. Ich glaube nicht, dass sich die Situation geändert hat, da das Interesse an FTP eher gering war. Die meisten Organisationen mit solchen Datensätzen bieten Zugriff auf sie über http oder in größeren Archiven, um dieses Problem zu vermeiden. Sie sollten überprüfen, ob NOAA dies tut.

psusi
quelle