Acelerando o FTP Recursivo


8

Estou tentando baixar o valor de um ano de dados de um servidor NOAA FTP usando wget (ou ncftpget). No entanto, leva muito mais tempo do que deveria devido à sobrecarga do FTP (eu acho). Por exemplo, este comando

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

Ou da mesma forma, via ncftpget

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

Rende um resultado de. 53 minutos para transferir 30 milhões!

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 assisto a essa transferência, cada arquivo individual é transferido rapidamente (500kb / s), mas o processo de download de 12.000 arquivos relativamente pequenos gera uma enorme quantidade de sobrecarga e atrasa todo o processo.

Minhas perguntas:

  1. Estou avaliando a situação corretamente? Sei que é difícil saber sem conhecer os servidores, mas o FTP realmente é um saco de tanta coisa ao transferir toneladas de arquivos pequenos?
  2. Existem ajustes no wget ou no ncftpget para permitir uma melhor execução do servidor FTP remoto? Ou talvez algum tipo de paralelismo?

Respostas:


6

Eis como acabei resolvendo isso usando os conselhos de outras pessoas. O NOAA, neste caso, possui um recurso FTP e HTTP para isso, então o que escrevi um script que faz o seguinte:

  1. ncftpls para obter uma lista de arquivos
  2. sed para concluir os caminhos do arquivo para obter uma lista completa dos arquivos http
  3. aria2c para baixá-los rapidamente

Script de exemplo:

# 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

Isso roda muito mais rápido e provavelmente é mais gentil com os servidores da NOAA. Provavelmente existe uma maneira inteligente de se livrar desse passo do meio, mas ainda não o encontrei.


Excelente solução, funciona fora da caixa! Obrigado.
markusN

2
  1. Sua avaliação está correta. Do ponto de vista de números puros, a sobrecarga está diminuindo a velocidade do download
  2. Use aria2c . O Aria2c abre muitas conexões paralelas ao servidor ftp para baixar um conjunto de arquivos mais rapidamente. Apenas certifique-se de que seu servidor suporte várias conexões simultâneas do mesmo host

Como alternativa, se você tiver acesso de gravação em seu host (nesse caso, eu suponho que você esteja efetuando login anonimamente e não tenha acesso de gravação) zip / tar os arquivos antes do download


Se você também pode comprimir, isso pode torná-lo ainda mais rápido.
CTRL-ALT-DELOR

O aria2c pode suportar FTP recursivo? Eu olhei para a documentação e não poderia encontrar uma menção a este, como eu quero baixar uma pasta inteira ...
Tom Hayden

Ele não suporta-lo, no entanto, usando ftp padrão para arquivos de enumerar, em seguida, passar essa lista para aria ainda vai ser mais rápido do ftp padrão recursiva
Outurnate

@ TomHayden - Não sei que você pode exatamente, mas certamente pode listar uma pasta e alimentar os resultados. Também há a interface RPC com a qual você pode fazer praticamente qualquer coisa. 742: boa resposta - vim aqui para dizer isso, mas você me venceu.
mikeserv

@mikeserv thanks. Adereços para encontrar o RPC
Outurnate

1

Sim você está correto. Infelizmente, embora as especificações de ftp ofereçam um modo de transferência alternativo capaz de multiplicar vários arquivos em uma única conexão de dados, a última vez que fiz uma pesquisa sobre o software disponível (que reconhecidamente estava em 1998), nenhum era compatível. Não acho que a situação tenha mudado porque o interesse no ftp foi bastante baixo. A maioria das organizações com esses conjuntos de dados fornece acesso a eles via http ou em arquivos maiores para evitar esse problema. Você deve verificar se o NOAA faz isso.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.