Acelerando o FTP recursivo

8

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

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

Ou similarmente, via ncftpget

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

Obtém um resultado de. 53 minutos para transferir 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

Quando vejo essa transferência, cada arquivo individual é transferido muito rapidamente (500kb / s), mas o processo de baixar 12.000 arquivos relativamente pequenos gera uma enorme sobrecarga e retarda todo o processo.

Minhas perguntas:

  1. Estou avaliando a situação corretamente? Eu percebo que é difícil dizer sem conhecer os servidores, mas o FTP realmente chupa tanto quando se transfere toneladas de arquivos pequenos?
  2. Há algum ajuste para wget ou ncftpget para permitir que eles funcionem melhor com o servidor FTP remoto? Ou talvez algum tipo de paralelismo?
por Tom Hayden 04.01.2015 / 00:11

3 respostas

6

Veja como acabei resolvendo isso usando o conselho de outras pessoas. O NOAA neste caso tem um recurso FTP e HTTP para isso, então o que eu escrevi um script que faz o seguinte:

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

Exemplo 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

Isso é executado muito mais rápido e provavelmente é mais gentil com os servidores da NOAA. Há provavelmente uma maneira inteligente de se livrar dessa etapa intermediária, mas ainda não a encontrei.

    
por 10.01.2015 / 16:28
2
  1. Sua avaliação está correta. Do ponto de vista de números puros, a sobrecarga está diminuindo o 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 suporta várias conexões simultâneas do mesmo host

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

    
por 04.01.2015 / 00:24
1

Sim, você está correto. Infelizmente, enquanto as especificações ftp oferecem um modo de transferência alternativo que é capaz de multiplicar vários arquivos em uma única conexão de dados, a última vez que fiz uma pesquisa de software disponível (que reconhecidamente era em 1998), nenhum o suportou. Eu não acho que a situação mudou porque o interesse no ftp tem sido bastante baixo. A maioria das organizações com esses conjuntos de dados fornece acesso a elas via http ou em arquivos maiores para evitar esse problema. Você deve verificar se a NOAA faz isso.

    
por 04.01.2015 / 02:05

Tags