DNAnexus からの大量のファイルのダウンロードを管理する CLI ツール
注: これはこのツールの初期バージョンであり、さまざまな設定でテスト中です。 このツールがあなたのアプリケーションに適しているかどうかを確認したい場合は、DNAnexus までお問い合わせください。
dx-download-agent
の使用を開始するには、リリース ページから最新のコンパイル済みバイナリをダウンロードします。 ダウンロード エージェントは 2 つのファイルを受け入れます。
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 トークンを生成します。 次の環境変数に保存します。
import 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
(整数): パーツのサイズ
block_size
(整数): ファイルのプライマリ ブロック サイズ (最後の部分を除くsize
と等しいと想定)
bytes_fetched
(integer <= size
): ダウンロードされた合計バイト数
bytes_fetched
より粗い方法と細かい方法で更新されるかどうかは、実装次第です。 たとえば、 bytes_fetched
、パーツのダウンロードが完了した場合にのみ更新できます。この場合、その値は0
またはsize
の値のみになります。
マニフェストには、ファイルごとに 4 つのフィールド ( file_id
、 project
、 name
、およびparts
が含まれています。 4 つすべてが指定されている場合、ファイルはライブで閉じられているとみなされ、ダウンロードできるようになります。 parts
フィールドを省略した場合、ファイルはプラットフォーム上に記述されます。一括記述は、多くのファイルに対してこれをバッチで効率的に行うために使用されます。アーカイブされているファイルや閉じられていないファイルはダウンロードできず、エラーが発生します。
部分のない DNAx シンボリック リンクをダウンロードすることができます。シンボリック リンクの必須フィールドは、 file_id
、 project
、およびname
です。シンボリック リンクにはグローバル MD5 チェックサムがあり、ダウンロードの最後にチェックされることに注意してください。
自己完結型の Go バイナリとは別に、Dockerized バージョンも提供しています。ローカル フォルダーをマウントし、DX API トークンを提供する必要があることを除いて、スタンドアロンの実行可能ファイルと非常によく似た方法で使用できます。
現在、次のイメージタグが提供されています。
latest
- master ブランチの最新のビルド
0.5.11
、 0.5.12
、 ... - 各リリースの専用タグ (0.5.11 以降)
- master ブランチ上の各コミットの開発ビルド
使用例:
$ 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
システムにインストールされている証明書を使用していないように見える場合は、優先順に 2 つのオプションがあります。 まず、 DX_TLS_CERTIFICATE_FILE
環境変数を、親組織が必要とする PEM エンコードされた TLS 証明書ファイルのパスに設定します。最後の手段として、 DX_TLS_SKIP_VERIFY=true
を設定して証明書の検証をすべて回避することで、安全でない接続を行うことができます。これはテスト目的でのみ使用してください。
便宜上、 scripts/
ディレクトリ内のcreate_manifest.py
ファイルは、ダウンロード エージェントのマニフェスト ファイルを作成する 1 つの方法です。 このスクリプトを使用するには、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.*'
ここで、スクリプトに指定される 2 番目の引数は、パス全体 (フォルダー + ファイル名) の正規表現です。
場合によっては、テスト目的でダウンロード マニフェストを複数のマニフェスト ファイルに分割したり、異なる環境間でデータ セット全体の複数のダウンロードを管理したりすることが望ましい場合があります。 ファイルを分割するために、 scripts/
ディレクトリに追加のパッケージを必要としない単純な Python ユーティリティが提供されています。 たとえば、次のコマンドを実行します。
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
という名前の 3 つのファイルが作成されます。 これらの各ファイルは、ダウンロード エージェントで独立して使用できます。
このリポジトリは、Go モジュールとして直接使用することもできます。 cmd/dx-download-agent
ディレクトリ内のdx-download-agent.go
ファイルは、その使用方法の一例です。
分離された Docker 環境内でソースを開発および実験するには、このリポジトリの Dockerfile が良いスタートとなる可能性があります。
ダウンロードが成功したら (および必要に応じてダウンロード後の検査も)、ファイルを目的の場所に安全に移動できるはずです。
警告:一般に、ダウンロード中にファイルを移動しないことをお勧めしますが、特定の特殊なケースではファイルを移動しても安全な場合があります。ダウンロード エージェントは、ファイルのどの部分がダウンロードされ、ダウンロードされていないのかについての軽量データベースを維持することによって機能します。それは主にオフに動作します。 これは、ファイルを移動したとしても、ディスク上のファイルの整合性についてダウンロード後のチェックを実行するinspect
サブコマンドを実行するまで、ダウンロード エージェントはそれを認識しないことを意味します。 Inspection コマンドは、ファイルが欠落していることを認識し、データベースを更新し、ダウンロード コマンドを再発行すると、ファイルの再ダウンロードを試行します。 したがって、完了したファイルを移動し、inspect サブコマンドを実行しない場合、ダウンロード エージェントは中断したところから続行する必要があります。 ただし、ファイルのダウンロードがまだ完了していない場合、ファイルの移動には危険があります。 この場合、不完全なファイルを移動したことになります。
ファイルクラスのオブジェクトのみをダウンロードできます。