DNAnexus에서 대량의 파일 다운로드를 관리하는 CLI 도구
참고: 이 도구는 이 도구의 초기 버전이며 다양한 설정에서 테스트 중입니다. 이 도구가 귀하의 응용 분야에 적합한지 알아보려면 DNAnexus에 문의하세요.
dx-download-agent
를 시작하려면 릴리스 페이지에서 사전 컴파일된 최신 바이너리를 다운로드하세요. 다운로드 에이전트는 다음 두 파일을 허용합니다.
manifest_file
: 다운로드에 대한 최소한 다음 정보를 설명하는 BZ2 압축 JSON 매니페스트 파일입니다. 예:
{ "프로젝트-AAAA": [ { "id": "file-XXXX", "name": "foo", "folder": "/path/to", "parts": { "1": { "size": 10, "md5": "49302323" }, "2": { "크기": 5, "md5": "39239329" } } }, "..." ], "프로젝트-BBBB": [ "..." ] }
다운로드 프로세스를 시작하려면 먼저 파일을 다운로드하려는 기간 동안 유효한 DNAnexus API 토큰을 생성하세요. 다음 환경 변수에 저장합니다.
DX_API_TOKEN=<여기에 API 토큰 삽입> 내보내기
API 토큰이 제공되지 않으면 다운로드 에이전트는 dx-toolkit에서도 사용되는 ~/.dnanexus_config/environment.json
을 찾습니다.
다운로드를 시작하려면:
dx-download-agent download exome_bams_manifest.json.bz2 Obtained token using environment Creating manifest database manifest.json.bz2.stats.db Required disk space = 1.2TB, available = 3.6TB Logging detailed output to: manifest.json.bz2.download.log Preparing files for download Downloading files using 8 threads Downloaded 11904/1098469 MB 124/11465 Parts (104.0 MB written to disk in the last 60s)
다운로드 진행 상황에 대한 지속적인 보고서가 화면에 기록됩니다. 데이터 전송을 시작하기 전에 전체 파일 목록에 충분한 디스크 공간이 있는지 확인합니다. 그렇지 않으면 오류가 보고되고 아무것도 다운로드되지 않습니다. 다운로드 속도는 네트워크 대역폭뿐만 아니라 컴퓨터의 IO 기능도 반영합니다.
다운로드 로그에는 오류가 발생할 경우 다운로드에 대한 자세한 정보가 포함되어 있습니다. 오류가 발생했는데 처리 방법을 이해하지 못하는 경우, 로그 파일을 첨부하여 [email protected]
으로 문의해 주시면 도와드리겠습니다.
dx-download-agent download
명령을 다시 실행해도 이후에 이동, 삭제 또는 수정된 이전에 다운로드한 파일은 다시 다운로드되지 않습니다. 이전에 다운로드한 파일의 변경 사항을 감지하고 다시 다운로드하도록 표시하려면 dx-download-agent inspect
(아래 설명 참조)를 실행하십시오. 자세한 내용은 다운로드한 파일 이동을 참조하세요.
별도의 터미널에서 기존 다운로드의 진행 상황을 쿼리할 수 있습니다.
dx-download-agent progress exome_bams_manifest.json.bz2
다운로드 상태에 대한 간략한 요약을 확인할 수 있습니다.
21.6 MB/sec 1184/27078 MB 18/327 Parts Downloaded and written to disk
다운로드한 파일의 무결성을 확인하려면 다음을 실행하세요.
dx-download-agent inspect exome_bams_manifest.json.bz2
이 명령은 파일 검사를 수행하고 MD5sum이 매니페스트와 일치하는지 확인합니다. 파일이 없거나 MD5sum이 일치하지 않는 경우 다운로드 에이전트는 영향을 받은 파일을 보고한 다음 dx-download-agent download
다시 실행하여 영향을 받은 파일을 다시 다운로드할 수 있습니다.
-num_threads
(정수): 파일을 다운로드하거나 검사할 때 사용할 최대 동시 스레드 수
예를 들어, 다음 명령은
dx-download-agent download -num_threads=20 exome_bams_manifest.json.bz2
파일의 일부를 병렬로 다운로드하는 20개의 스레드로 구성된 작업자 풀을 생성합니다. 언제든지 최대 20명의 작업자가 다운로드를 수행합니다. 다운로드 속도 제한은 이 숫자를 변경하여 어느 정도 제어할 수 있습니다.
다운로드된 부분에 대한 정보는 JSON 파일 형식과 추가 bytes_fetched
필드의 내용과 유사한 정보가 포함된 sqlite3 데이터베이스 파일에 유지됩니다.
테이블 이름: manifest_stats
필드(달리 지정하지 않는 한 모든 필드는 문자열입니다)
file_id
: 파일 부분의 파일 ID
project
: 파일 부분의 프로젝트 ID
name
: 파일 이름
folder
: DNAnexus의 파일이 포함된 폴더
part_id
(정수): 파일의 부품 ID
md5
: 부품 ID에 대한 md5sum
size
(integer) : 부품의 크기
block_size
(integer): 파일의 기본 블록 크기 (마지막 부분을 제외하면 size
와 같다고 가정)
bytes_fetched
(정수 <= size
): 다운로드된 총 바이트 수
bytes_fetched
더 대략적인 방식과 세분화된 방식으로 업데이트되는지 여부를 결정하는 것은 구현에 달려 있습니다. 예를 들어 bytes_fetched
부분 다운로드가 완료된 경우에만 업데이트할 수 있습니다. 이 경우 해당 값은 0
또는 size
값만 됩니다.
매니페스트에는 각 파일에 대한 4개의 필드( file_id
, project
, name
및 parts
가 포함되어 있습니다. 네 가지를 모두 지정하면 파일이 활성 상태이고 닫혀 있는 것으로 간주되어 다운로드할 수 있습니다. parts
필드가 생략되면 파일이 플랫폼에 설명됩니다. 대량 설명은 일괄적으로 많은 파일에 대해 이 작업을 효율적으로 수행하는 데 사용됩니다. 보관되었거나 닫히지 않은 파일은 다운로드할 수 없으며 오류가 발생합니다.
부품이 없는 DNAx 심볼릭 링크를 다운로드하는 것이 가능합니다. 심볼릭 링크의 필수 필드는 file_id
, project
및 name
입니다. 심볼릭 링크에는 다운로드가 끝날 때 확인되는 전역 MD5 체크섬이 있습니다.
자체 포함된 Go 바이너리 외에도 Dockerized 버전도 제공합니다. 로컬 폴더를 마운트하고 DX API 토큰을 제공해야 한다는 점을 제외하면 독립형 실행 파일과 매우 유사한 방식으로 사용할 수 있습니다.
현재 우리는 다음과 같은 이미지 태그를 제공합니다:
latest
- 마스터 브랜치의 가장 최근 빌드
0.5.11
, 0.5.12
, ... - 각 릴리스에 대한 전용 태그(0.5.11부터 시작)
- 마스터 브랜치의 각 커밋에 대한 개발 빌드
사용 예:
$ docker run -v $PWD:/workdir -w /workdir -e DX_API_TOKEN=$DX_API_TOKEN dnanexus/dxda:latest download -max_threads=20 manifest.json.bz2
어디:
$PWD
파일을 다운로드할 컴퓨터의 디렉터리 경로입니다.
DX_API_TOKEN
플랫폼에 액세스하기 위한 토큰입니다(빠른 시작 참조).
dx-download-agent
프록시로 지정하려면 HTTP_PROXY
환경 변수를 export HTTP_PROXY=hostname:port
와 같은 것으로 설정하십시오. HTTPS_PROXY
도 지원됩니다.
기본적으로 dx-download-agent
시스템에 설치된 인증서를 사용하여 보안 연결을 생성합니다. 시스템에 추가 TLS 인증서가 필요하고 dx-download-agent
시스템에 설치된 인증서를 사용하지 않는 것으로 나타나면 선호도에 따라 두 가지 옵션이 있습니다. 먼저 DX_TLS_CERTIFICATE_FILE
환경 변수를 상위 조직에서 요구하는 PEM 인코딩 TLS 인증서 파일의 경로로 설정합니다. 최후의 수단으로 DX_TLS_SKIP_VERIFY=true
설정하여 인증서 확인을 모두 피함으로써 안전하지 않게 연결할 수 있습니다. 테스트 목적으로만 사용하세요.
편의상 scripts/
디렉터리에 있는 create_manifest.py
파일은 다운로드 에이전트용 매니페스트 파일을 생성하는 한 가지 방법입니다. 이 스크립트를 사용하려면 dx-toolkit이 시스템에 설치되어 있고 DNAnexus 플랫폼에 로그인되어 있어야 합니다. 사용 방법의 예:
python3 create_manifest.py "프로젝트:/폴더" --recursive --output_file "myfiles.manifest.json.bz2"
여기에서는 Project
이름과 Folder Folder
에 있는 모든 파일에 대해 매니페스트가 반복적으로 생성됩니다.
이후에 filter_manifest.py
스크립트를 사용하여 매니페스트를 필터링할 수 있습니다. 예를 들어, 특정 폴더(예: Folder
)에 testcall
이 포함된 파일(예: /Folder/ALL.chr22._testcall_20190222.genotypes.vcf.gz
)을 캡처하려면 다음 명령을 실행할 수 있습니다.
$ python3 filter_manifest.py 매니페스트.json.bz2 '^/Folder.*testcall.*'
여기서 스크립트에 제공된 두 번째 인수는 전체 경로(폴더 + 파일 이름)에 대한 정규식입니다.
경우에 따라 테스트 목적으로 다운로드 매니페스트를 여러 매니페스트 파일로 분할하거나 다양한 환경에서 전체 데이터 세트의 여러 다운로드를 관리하는 것이 바람직할 수 있습니다. 파일을 분할하기 위해 scripts/
디렉터리에 추가 패키지가 필요하지 않은 간단한 Python 유틸리티를 제공합니다. 예를 들어 다음 명령을 실행합니다.
python3 scripts/split_manifest.py manifest.json.bz2 -n 100
프로젝트당 100개의 파일이 포함된 매니페스트 파일을 생성합니다. 예를 들어 manifest_001.json.bz2
.json.bz2에 총 300개의 파일이 있는 경우 이 명령의 출력은 manifest_002.json.bz2
과 같은 manifest_003.json.bz2
개의 파일을 생성합니다. 이러한 각 파일은 다운로드 에이전트와 독립적으로 사용할 수 있습니다.
이 저장소는 Go 모듈로도 직접 사용할 수 있습니다. cmd/dx-download-agent
디렉터리에 있는 dx-download-agent.go
파일은 사용 방법의 예입니다.
격리된 Docker 환경 내에서 소스를 개발하고 실험하려면 이 저장소의 Dockerfile이 좋은 시작이 될 수 있습니다.
성공적으로 다운로드한 후(선택적으로 다운로드 후 검사) 파일을 원하는 위치로 이동해도 안전합니다.
경고: 일반적으로 다운로드 중에는 파일을 이동하지 않는 것이 좋지만 특별한 경우에는 이동하는 것이 안전할 수 있습니다. 다운로드 에이전트는 파일의 어떤 부분이 다운로드되었는지, 다운로드되지 않았는지에 대한 경량 데이터베이스를 유지 관리하여 작동합니다. 주로 다음에서 작동합니다. 즉, 파일을 이동하더라도 디스크의 파일 무결성에 대한 다운로드 후 검사를 수행하는 inspect
하위 명령을 실행할 때까지 다운로드 에이전트가 이를 인식하지 못한다는 의미입니다. 검사 명령은 파일이 누락되었음을 확인하고 데이터베이스를 업데이트하며 다운로드 명령을 다시 실행하면 해당 파일을 다시 다운로드하려고 시도합니다. 따라서 완료된 파일을 이동하고 검사 하위 명령을 실행하지 않는 경우 다운로드 에이전트는 중단된 위치부터 계속되어야 합니다. 즉, 파일 다운로드가 아직 완료되지 않은 경우 파일을 이동할 위험이 있습니다. 이 경우 불완전한 파일을 이동하게 됩니다.
File 클래스의 객체만 다운로드할 수 있습니다.