Mempercepat FTP Rekursif

8

Saya mencoba mengunduh data setahun dari Server FTP NOAA menggunakan wget (atau ncftpget). Namun, itu membutuhkan waktu lebih lama daripada seharusnya karena overhead FTP (saya pikir). Misalnya, perintah ini

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

Atau juga, melalui ncftpget

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

Menghasilkan hasil. 53 menit untuk mentransfer 30 juta!

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

Ketika saya menonton transfer ini, masing-masing file individu mentransfer cukup cepat (500 kb / detik) tetapi proses mengunduh 12.000 file yang relatif kecil menimbulkan biaya overhead yang sangat besar dan memperlambat seluruh proses.

Pertanyaan saya:

  1. Apakah saya menilai situasi dengan benar? Saya menyadari sulit untuk mengatakannya tanpa mengetahui server tetapi apakah FTP benar-benar menyedot sebanyak ini ketika mentransfer banyak file kecil?
  2. Apakah ada tweak untuk wget atau ncftpget untuk memungkinkan mereka bermain lebih baik dengan server FTP jarak jauh? Atau mungkin semacam paralelisme?
Tom Hayden
sumber

Jawaban:

6

Inilah cara saya akhirnya menyelesaikan ini menggunakan saran dari orang lain. NOAA dalam hal ini memiliki FTP dan sumber daya HTTP untuk ini, jadi saya menulis skrip yang melakukan hal berikut:

  1. ncftpls untuk mendapatkan daftar file
  2. sed untuk menyelesaikan filepath ke daftar lengkap file http
  3. aria2c untuk mengunduh semuanya dengan cepat

Skrip contoh:

# 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

Ini berjalan jauh lebih cepat dan mungkin lebih ramah ke server NOAA. Bahkan mungkin ada cara cerdas untuk menyingkirkan langkah tengah itu, tetapi saya belum menemukannya.

Tom Hayden
sumber
Solusi luar biasa, berhasil di luar kotak! Terima kasih.
MarkusN
2
  1. Penilaian Anda benar. Dari sudut pandang angka murni, overhead memperlambat pengunduhan
  2. Gunakan aria2c . Aria2c membuka banyak koneksi paralel ke server ftp untuk mengunduh satu set file lebih cepat. Pastikan server Anda mendukung beberapa koneksi konkuren dari host yang sama

Atau, jika Anda memiliki akses tulis pada host Anda (dalam hal ini, saya akan menganggap Anda masuk secara anonim dan tidak memiliki akses tulis) zip / tar file sebelum mengunduh

Mengungguli
sumber
Jika Anda bisa mengompres juga, ini bisa membuatnya lebih cepat.
ctrl-alt-delor
Bisakah aria2c mendukung FTP rekursif? Saya melihat dokumentasi dan tidak dapat menemukan penyebutan ini, seperti saya ingin mengunduh seluruh folder ...
Tom Hayden
Namun, itu tidak mendukungnya, menggunakan ftp standar untuk menghitung file, kemudian meneruskan daftar itu ke aria masih akan lebih cepat daripada ftp standar rekursif
Outurnate
@ TomHayden - Saya tidak tahu bahwa Anda bisa melakukannya, tetapi yang pasti Anda bisa membuat daftar folder dan memberikan hasilnya. Juga ada antarmuka RPC yang dapat Anda gunakan untuk melakukan apa saja. 742: jawaban yang bagus - datang ke sini untuk mengatakan ini tetapi Anda mengalahkan saya untuk itu.
mikeserv
@ mikeserv terima kasih. Props untuk menemukan RPC
Outurnate
1

Ya kamu benar. Sayangnya sementara spesifikasi ftp menawarkan mode transfer alternatif yang mampu menyalurkan banyak file melalui koneksi data tunggal, terakhir kali saya melakukan survei terhadap perangkat lunak yang tersedia (yang diakui pada tahun 1998), tidak ada yang mendukungnya. Saya tidak berpikir situasinya telah berubah karena minat terhadap ftp agak rendah. Sebagian besar organisasi dengan kumpulan data semacam itu menyediakan akses kepada mereka melalui http, atau dalam arsip yang lebih besar untuk menghindari masalah ini. Anda harus memeriksa apakah NOAA melakukan ini.

psusi
sumber