Accelerare FTP ricorsivo


8

Sto tentando di scaricare un anno di dati da un server FTP NOAA usando wget (o ncftpget). Tuttavia, ci vuole molto più tempo di quanto dovrebbe a causa dell'overhead di FTP (credo). Ad esempio, questo comando

time wget -nv -m ftp://ftp:email@ftp.ncdc.noaa.gov/pub/data/noaa/2015 -O /weather/noaa/2015

O allo stesso modo, tramite ncftpget

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

Produce un risultato di. 53 minuti per trasferire 30 M!

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

Quando guardo questo trasferimento, ogni singolo file si trasferisce abbastanza rapidamente (500kb / sec) ma il processo di download di 12.000 file relativamente piccoli comporta un'enorme quantità di sovraccarico e rallenta l'intero processo.

Le mie domande:

  1. Sto valutando la situazione correttamente? Mi rendo conto che è difficile dirlo senza conoscere i server, ma FTP fa davvero tanto schifo quando si trasferiscono tonnellate di piccoli file?
  2. Ci sono delle modifiche da wget o ncftpget per consentire loro di giocare meglio con il server FTP remoto? O forse una sorta di parallelismo?

Risposte:


6

Ecco come ho finito per risolvere questo usando i consigli degli altri. Il NOAA in questo caso ha un FTP e una risorsa HTTP per questo, quindi quello che ho scritto uno script che fa quanto segue:

  1. ncftpls per ottenere un elenco di file
  2. sed per completare i percorsi dei file in un elenco completo di file http
  3. aria2c per scaricarli rapidamente tutti

Script di esempio:

# 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

Funziona molto più velocemente ed è probabilmente più gentile con i server del NOAA. Probabilmente c'è anche un modo intelligente per sbarazzarsi di quel passaggio intermedio, ma non l'ho ancora trovato.


Ottima soluzione, funziona subito! Grazie.
markusN,

2
  1. La tua valutazione è corretta. Dal punto di vista dei numeri puri, l'overhead sta rallentando il download
  2. Usa aria2c . Aria2c apre molte connessioni parallele al server ftp per scaricare più velocemente una serie di file. Assicurati solo che il tuo server supporti più connessioni simultanee dallo stesso host

In alternativa, se si dispone dell'accesso in scrittura sul proprio host (in questo caso, suppongo che si stia effettuando l'accesso in modo anonimo e non si abbia accesso in scrittura) zip / tar i file prima del download


Se riesci a comprimere anche questo potrebbe renderlo ancora più veloce.
ctrl-alt-delor

Aria2c può supportare FTP ricorsivo? Ho guardato la documentazione e non sono riuscito a trovare una menzione di questo, come se volessi scaricare un'intera cartella ...
Tom Hayden

Non lo supporta, tuttavia, utilizzando ftp standard per enumerare i file, quindi passare tale elenco ad aria sarà ancora più veloce di ftp standard ricorsivo
Outurnate

@TomHayden - Non sono a conoscenza del fatto che puoi esattamente, ma sicuramente puoi elencare una cartella e dargli i risultati. Inoltre c'è l' interfaccia RPC con cui puoi praticamente fare qualsiasi cosa. 742: buona risposta - è venuto qui per dirlo ma mi hai battuto.
Mikeserv,

@mikeserv grazie. Props
for find

1

Sì hai ragione. Sfortunatamente, mentre le specifiche ftp offrono una modalità di trasferimento alternativa che è in grado di eseguire il pipeline di più file su una singola connessione dati, l'ultima volta che ho fatto un sondaggio sul software disponibile (che certamente era nel 1998), nessuno lo supportava. Non penso che la situazione sia cambiata perché l'interesse per ftp è stato piuttosto basso. La maggior parte delle organizzazioni con tali set di dati consente di accedervi tramite http o in archivi più grandi per evitare questo problema. Si dovrebbe verificare se NOAA fa questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.