1

我试图让snakemake直接读写到S3。有谁知道是否可以使用 S3RemoteProvider 并设置参数 stay_on_remote=True?当我将此参数设置为 True 时,snakemake 似乎无法找到我的输入。我也尝试使用 XRootD RemoteProvider,但它似乎无法与 S3 对话。还有另一种方法可以做到这一点吗?

在此先感谢您的帮助!

4

1 回答 1

3

可以stay_on_remote=True在 S3RemoteProvider 上进行设置,但它是具有特定要求的不常见用法。

stay_on_remote=True参数适用于 XRootD 等后端,其中可以在数据所在的位置远程执行处理:在这种情况下,将命令分派到远程后端以对数据执行某些操作,而无需四处移动数据。这是使用 XRootD 系统的标准方式。

在大多数情况下,为了让 Snakemake 运行命令以作用于 S3 存储的输入,需要将数据传输到执行作业的机器,因此stay_on_remote应省略或设置为False. 当它是 时False,Snakemake 将自动下载对象,运行规则,然后在没有更多作业依赖它时删除该对象的本地副本。如果您确实设置stay_on_remote=True了,那会将文件留在 S3 上,如果他们尝试查找或使用输入,则会导致任何本地命令失败——除非他们可以自己访问 s3。

S3RemoteProvider允许stay_on_remote=True您能够运行接受 S3 伪 URL 以进行读取和写入的命令的用例 ( ) s3://bucket-name/full/key/value/to/data。这可以是远程系统,也可以是接受s3://位置的类似 samtools 的系统。如果stay_on_remote=True,如果未指定,协议将自动添加到文件中,因此对于 S3 提供程序,您不需要显式包含s3://在输入文件字符串中。

例如,stay_on_remote=True可以像这样与 samtools 一起使用:

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}")

在上面的Snakefile中,Snakemake 将输入 , s3://1000genomes/phase1/[...], 替换为{input}, 并且samtools可以直接作用于 S3 对象。

如果您包括您的Snakefile,我们可以尝试查看是否stay_on_remote适用于您正在做的事情,或者实施中是否存在错误。

于 2017-06-28T21:14:15.367 回答