留在 Remote S3 RemoteProvider 上

Stay on Remote S3 RemoteProvider

我正在尝试让 snakemake 直接读写 S3。有谁知道是否可以使用 S3RemoteProvider 并设置参数 stay_on_remote=True?当我将此参数设置为 True 时,snakemake 似乎无法找到我的输入。我还尝试使用 XRootD RemoteProvider,但它似乎无法与 S3 通信。还有其他方法吗?

在此先感谢您的帮助!

可以在 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 允许 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 是否适用于您正在做的事情,或者实施中是否存在错误。