Tăng tốc FTP đệ quy


8

Tôi đang cố tải xuống dữ liệu trị giá một năm từ Máy chủ FTP của NOAA bằng wget (hoặc ncftpget). Tuy nhiên, nó mất nhiều thời gian hơn so với chi phí do FTP (tôi nghĩ). Ví dụ, lệnh này

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

Hoặc tương tự, thông qua ncftpget

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

Mang lại một kết quả của. 53 phút để chuyển 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

Khi tôi xem chuyển khoản này, mỗi tệp riêng lẻ chuyển khá nhanh (500kb / giây) nhưng quá trình tải xuống 12.000 tệp tương đối nhỏ phải chịu một lượng chi phí khổng lồ và làm chậm toàn bộ quá trình.

Những câu hỏi của tôi:

  1. Tôi có đang đánh giá chính xác tình hình không? Tôi nhận ra rằng thật khó để nói mà không biết các máy chủ nhưng FTP có thực sự hấp dẫn điều này khi chuyển hàng tấn tệp nhỏ không?
  2. Có bất kỳ tinh chỉnh nào để wget hoặc ncftpget để cho phép họ chơi đẹp hơn với máy chủ FTP từ xa không? Hoặc có lẽ một số loại song song?

Câu trả lời:


6

Đây là cách tôi kết thúc việc giải quyết điều này bằng lời khuyên từ người khác. NOAA trong trường hợp này có FTP và tài nguyên HTTP cho việc này, vì vậy những gì tôi đã viết một tập lệnh thực hiện như sau:

  1. ncftpls để có được một danh sách các tập tin
  2. sed để hoàn thành các filepath vào danh sách đầy đủ các tệp http
  3. aria2c để nhanh chóng tải xuống tất cả

Kịch bản ví dụ:

# 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

Điều này chạy nhanh hơn nhiều và có lẽ tốt hơn với các máy chủ của NOAA. Thậm chí có thể có một cách thông minh để thoát khỏi bước giữa đó, nhưng tôi chưa tìm thấy nó.


Giải pháp tuyệt vời, làm việc ra khỏi hộp! Cảm ơn.
markusN

2
  1. Đánh giá của bạn là chính xác. Từ quan điểm số thuần túy, chi phí hoạt động chậm lại
  2. Sử dụng aria2c . Aria2c mở nhiều kết nối song song với máy chủ ftp để tải xuống một tập hợp các tệp nhanh hơn. Chỉ cần chắc chắn rằng máy chủ của bạn hỗ trợ nhiều kết nối đồng thời từ cùng một máy chủ

Ngoài ra, nếu bạn có quyền truy cập ghi trên máy chủ của mình (trong trường hợp này, tôi sẽ cho rằng bạn đang đăng nhập ẩn danh và không có quyền truy cập ghi) zip / tar các tệp trước khi tải xuống


Nếu bạn có thể nén tốt, điều này có thể làm cho nó thậm chí nhanh hơn.
ctrl-alt-delor

Aria2c có thể hỗ trợ FTP đệ quy không? Tôi đã xem tài liệu và không thể tìm thấy một đề cập nào về điều này, như tôi muốn tải xuống toàn bộ thư mục ...
Tom Hayden

Tuy nhiên, nó không hỗ trợ nó, sử dụng ftp tiêu chuẩn để liệt kê các tệp, sau đó chuyển danh sách đó sang aria vẫn sẽ nhanh hơn so với ftp tiêu chuẩn đệ quy
Xuất hiện

@TomHayden - Tôi không biết rằng bạn có thể chính xác, nhưng chắc chắn bạn có thể liệt kê một thư mục và cung cấp cho nó kết quả. Ngoài ra còn có giao diện RPC mà bạn thực sự có thể làm bất cứ điều gì. 742: câu trả lời hay - đến đây để nói điều này nhưng bạn đã đánh bại tôi.
mikeerv

@mikeerv cảm ơn. Đạo cụ để tìm RPC
Xuất hiện

1

Ư, bạn đung. Thật không may, trong khi thông số kỹ thuật ftp cung cấp chế độ truyền thay thế có khả năng phân loại nhiều tệp qua một kết nối dữ liệu, lần cuối cùng tôi thực hiện một cuộc khảo sát về phần mềm có sẵn (được thừa nhận là vào năm 1998), không có hỗ trợ nào. Tôi không nghĩ tình hình đã thay đổi vì sự quan tâm đến ftp khá thấp. Hầu hết các tổ chức có bộ dữ liệu như vậy cung cấp quyền truy cập vào chúng thông qua http hoặc trong kho lưu trữ lớn hơn để tránh vấn đề này. Bạn nên kiểm tra nếu NOAA làm điều này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.