用於管理從 DNAnexus 下載大量檔案的 CLI 工具
注意:這是該工具的早期版本,正在各種設定中進行測試。 如果您有興趣了解此工具是否適合您的應用,請聯絡 DNAnexus。
若要開始使用dx-download-agent
,請從發布頁面下載最新的預編譯二進位。 下載代理接受兩個檔案:
manifest_file
:BZ2 壓縮的 JSON 清單文件,至少描述以下下載信息,例如:
{“項目-AAAA”:[ {“id”:“檔案-XXXX”,“名稱”:“foo”,“資料夾”:“/路徑/到”,“零件”:{“1”:{“大小”: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
此命令將對文件執行檢查並確保其 MD5 和與清單相符。如果檔案遺失或 MD5sum 不匹配,下載代理程式將報告受影響的文件,然後您可以再次執行dx-download-agent download
來重新下載受影響的文件。
-num_threads
(整數):下載或檢查檔案時使用的最大並發執行緒數
例如,命令
dx-download-agent download -num_threads=20 exome_bams_manifest.json.bz2
將建立一個包含 20 個執行緒的工作池,這些執行緒將並行下載部分檔案。 任何時間最多有 20 個工作人員執行下載。 透過改變這個數字可以在一定程度上控制下載的速率限制。
有關已下載哪些部分的資訊維護在 sqlite3 資料庫檔案中,該檔案包含與 JSON 檔案格式中的內容類似的資訊以及附加的bytes_fetched
欄位。
表名稱: manifest_stats
字段(除非另有說明,所有字段均為字串)
file_id
:檔案部分的檔案 ID
project
:文件部分的項目 ID
name
:檔案名稱
folder
: 包含 DNAnexus 上文件的資料夾
part_id
(整數):文件的部分 ID
md5
:零件 ID 的 md5sum
size
(整數):零件的尺寸
block_size
(整數):檔案的主區塊大小(假定等於除最後一部分之外的size
)
bytes_fetched
(integer <= size
): 下載的總位元組數
由實作來決定是否以更粗粒度或更細粒度的方式更新bytes_fetched
。 例如,只有當部分下載完成時,才能更新bytes_fetched
。在這種情況下,它的值將僅為0
或size
的值。
此清單包含每個檔案的四個欄位: file_id
、 project
、 name
和parts
。如果指定了所有四個文件,則假定該文件處於活動狀態並已關閉,可供下載。如果省略parts
字段,則該文件將在平台上進行描述。批量描述用於高效地批量處理許多文件。已存檔或未關閉的檔案無法下載,並且會觸發錯誤。
可以下載 DNAx 符號鏈接,該鏈接沒有部件。符號連結的必填欄位為file_id
、 project
和name
。請注意,符號連結具有全域 MD5 校驗和,在下載結束時進行檢查。
除了獨立的 Go 二進位檔案之外,我們還提供 Docker 化版本。它的使用方式與獨立可執行檔非常相似,但需要掛載本機資料夾並提供 DX API 令牌。
目前,我們提供以下圖像標籤:
latest
- master 分支的最新版本
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
中的所有檔案建立清單。
隨後可以使用filter_manifest.py
腳本過濾清單。 例如,如果您想要擷取特定資料夾(例如Folder
)中包含testcall
(例如/Folder/ALL.chr22._testcall_20190222.genotypes.vcf.gz
),您可以執行下列命令:
$ python3 filter_manifest.py manifest.json.bz2 '^/Folder.*testcall.*'
其中給腳本的第二個參數是整個路徑(資料夾+檔案名稱)的正規表示式。
在某些情況下,可能需要將下載清單拆分為多個清單檔案以用於測試目的或管理跨不同環境的整個資料集的多次下載。 為了分割文件,我們提供了一個簡單的Python實用程序,不需要在scripts/
目錄中添加額外的套件。 例如,執行命令:
python3 scripts/split_manifest.py manifest.json.bz2 -n 100
將建立清單文件,其中每個項目包含 100 個文件。 例如,如果 manifest.json.bz2 中總共有 300 個文件,則此指令的輸出將建立三個文件,名稱為: manifest_001.json.bz2
、 manifest_002.json.bz2
和manifest_003.json.bz2
。 這些文件中的每一個都可以與下載代理一起獨立使用。
此儲存庫也可以直接用作 Go 模組。 在cmd/dx-download-agent
目錄中, dx-download-agent.go
檔案是如何使用它的範例。
對於在隔離的 Docker 環境中開發和試驗原始程式碼,此儲存庫中的 Dockerfile 可能是一個好的開始。
成功下載(並可選擇檢查下載後)後,應該可以安全地將文件移動到您所需的位置。
警告:一般來說,我們建議不要在下載過程中移動文件,但在某些特殊情況下移動文件可能是安全的。和尚未下載,這就是它主要運作於。 這意味著,即使您移動文件,下載代理也不會意識到這一點,直到您執行inspect
子命令來執行下載後檢查磁碟上的文件完整性。檢查命令將注意到檔案遺失,更新資料庫,並且當您重新發出下載命令時嘗試再次下載它們。 因此,如果您移動已完成的檔案並且不執行檢查子命令,下載代理程式應從中斷處繼續。 話雖如此,如果檔案下載尚未完成,則移動檔案存在危險。 在這種情況下,您將移動不完整的文件。
只能下載 File 類別的物件。