S3RemoteProviderにstay_on_remote=True
を設定することは可能ですが、特定の要件を持つ珍しい使用法です。
stay_on_remote=True
パラメータは、XRootDのようなバックエンドを対象としており、データが存在する場所でリモート処理が可能です。このようなシナリオでは、コマンドをリモートバックエンドに送り、データを移動させずにデータを処理します。これは、XRootDシステムを使用する標準的な方法です。
ほとんどの場合、SnakemakeがS3格納された入力に対して動作するコマンドを実行するには、ジョブを実行するマシンにデータを転送する必要があるため、stay_on_remote
を省略するか、False
に設定する必要があります。 False
の場合、Snakemakeは自動的にオブジェクトをダウンロードし、ルールを実行し、ジョブがそれ以上依存していないときにオブジェクトのローカルコピーを削除します。 stay_on_remote=True
に設定すると、S3上のファイルが残ってしまい、s3自身にアクセスできない場合は、入力を見つけたり使用しようとするとローカルコマンドが失敗したりします。
S3RemoteProvider
は、読み取りと書き込みのためのS3疑似URLを受け入れるコマンドを実行できるユースケース(s3://bucket-name/full/key/value/to/data
)のためのstay_on_remote=True
を許可します。これは、リモートシステム、またはs3://
の場所を受け入れるsamtoolsのようなものです。 stay_on_remote=True
の場合、指定されていない場合はプロトコルが自動的にファイルの先頭に追加されるため、S3プロバイダの場合は、入力ファイルの文字列にs3://
を明示的に含める必要はありません。例えば
、stay_on_remote=True
このようなsamtoolsで使用することができる:上記Snakefile
で
from snakemake.remote.S3 import RemoteProvider as S3RemoteProvider
S3 = S3RemoteProvider()
rule all:
input:
S3.remote("1000genomes/phase1/data/NA12878/exome_alignment/NA12878.mapped.illumina.mosaik.CEU.exome.20110411.bam", stay_on_remote=True)
output:
"out.txt"
run:
# samtools accepts s3:// paths, which are given when stay_on_remote=True
shell("samtools view {input} 20:1000-100000 > {output}")
、Snakemakeは{input}
ため、入力、を代入し、そしてsamtools
直接S3のオブジェクトに作用することができます。
Snakefile
を含めると、実行中のものにstay_on_remote
が適用されるかどうか、または実装にバグがあるかどうかを確認できます。
ありがとうございます!私は、入力/出力をダウンロードしてアップロードするだけの一貫したオプションに固執すると思います。 –