我试图让snakemake直接读写到S3。有谁知道是否可以使用 S3RemoteProvider 并设置参数 stay_on_remote=True?当我将此参数设置为 True 时,snakemake 似乎无法找到我的输入。我也尝试使用 XRootD RemoteProvider,但它似乎无法与 S3 对话。还有另一种方法可以做到这一点吗?
在此先感谢您的帮助!
我试图让snakemake直接读写到S3。有谁知道是否可以使用 S3RemoteProvider 并设置参数 stay_on_remote=True?当我将此参数设置为 True 时,snakemake 似乎无法找到我的输入。我也尝试使用 XRootD RemoteProvider,但它似乎无法与 S3 对话。还有另一种方法可以做到这一点吗?
在此先感谢您的帮助!
可以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
适用于您正在做的事情,或者实施中是否存在错误。