저는 wget(또는 ncftpget)을 사용하여 NOAA FTP 서버에서 1년 분량의 데이터를 다운로드하려고 합니다. 그러나 FTP의 오버헤드로 인해 예상보다 시간이 오래 걸렸습니다. 예를 들어, 이 명령은
time wget -nv -m ftp://ftp:[email protected]/pub/data/noaa/2015 -O /weather/noaa/2015
또는 마찬가지로 ncftpget을 통해
ncftpget -R -T -v ftp.ncdc.noaa.gov /weather/noaa/ /pub/data/noaa/2015
결과는 30M 전송에 53분!
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
이 전송을 볼 때 각 개별 파일은 상당히 빠른 속도(500kb/초)로 전송되었지만, 상대적으로 작은 파일 12,000개를 다운로드하는 과정에서 많은 오버헤드가 발생하고 전체 프로세스가 느려졌습니다.
내 질문:
- 상황에 대한 나의 평가가 정확했나요? 서버를 모르고는 말하기 어렵다는 것을 알고 있지만, 작은 파일을 많이 전송할 때 FTP가 정말 그렇게 나쁜가요?
- 원격 FTP 서버에서 더 잘 작동하도록 wget 또는 ncftpget을 조정했습니까? 아니면 일종의 병렬성일까요?
답변1
다른 사람들의 제안을 사용하여 이 문제를 해결한 방법은 다음과 같습니다. 이 경우 NOAA에는 FTP와 HTTP 리소스가 있으므로 다음을 수행하는 스크립트를 작성했습니다.
- ncftpls 파일 목록 가져오기
- sed는 http 파일의 전체 목록에 대한 파일 경로를 완성합니다.
- aria2c 빠른 다운로드 모두
예시 스크립트:
# 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
이는 더 빠르게 실행되며 NOAA 서버에 더 친숙할 수 있습니다. 중간 단계를 없애는 영리한 방법이 있을 수도 있지만 아직 찾지 못했습니다.
답변2
- 귀하의 평가가 정확합니다. 순전히 숫자의 관점에서 볼 때 오버헤드로 인해 다운로드 속도가 느려집니다.
- 사용아리아 2c. Aria2c는 FTP 서버에 대한 많은 병렬 연결을 열어 파일 세트를 더 빠르게 다운로드합니다. 서버가 동일한 호스트에서 여러 동시 연결을 지원하는지 확인하십시오.
또는 호스트 컴퓨터에 쓰기 액세스 권한이 있는 경우(이 경우 익명으로 로그인했으며 쓰기 액세스 권한이 없다고 가정) 다운로드하기 전에 파일을 압축하거나 tar로 압축합니다.
답변3
그래 네가 맞아. 불행하게도 ftp 사양은 단일 데이터 연결을 통해 여러 파일을 파이핑할 수 있는 대체 전송 모드를 제공하지만, 마지막으로 사용 가능한 소프트웨어를 조사했을 때(1998년에 인정함) 누구도 이를 지원하지 않았습니다. FTP에 대한 관심이 매우 낮기 때문에 상황이 변했다고 생각하지 않습니다. 이러한 데이터세트를 보유한 대부분의 조직은 이 문제를 방지하기 위해 http 또는 더 큰 아카이브를 통해 해당 데이터세트에 대한 액세스를 제공합니다. 이 작업이 완료되었는지 확인하려면 NOAA에 확인해야 합니다.