2017-06-27 7 views
0

私はsnakemakeをS3に直接読み書きするようにしようとしています。 S3RemoteProviderを使用して、パラメータstay_on_remote = Trueを持つことができるかどうかは誰にも知られていますか?このパラメータをTrueに設定すると、snakemakeが入力を見つけることができないように見えます。私もXRootD RemoteProviderを使用しようとしましたが、S3と通信できないようです。これを行う別の方法がありますか?リモートS3 RemoteProviderに滞在

ご協力いただきありがとうございます。

答えて

0

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が適用されるかどうか、または実装にバグがあるかどうかを確認できます。

+0

ありがとうございます!私は、入力/出力をダウンロードしてアップロードするだけの一貫したオプションに固執すると思います。 –

関連する問題