我正在尝试让snakemake直接读取和写入S3。有谁知道是否可以使用S3RemoteProvider并且参数stay_on_remote = True?当我将此参数设置为True时,它看起来不像snakemake可以找到我的输入。我也尝试使用XRootD RemoteProvider,但它似乎无法与S3对话。还有另一种方法吗?
提前感谢您的帮助!
答案 0 :(得分:1)
可以在S3RemoteProvider上设置stay_on_remote=True
,但这是一种不常见的用法,具有特定要求。
stay_on_remote=True
参数适用于XRootD之类的后端,其中可以在数据所在的远程执行处理:在这种情况下,将命令分派到远程后端以对数据执行某些操作而不移动周围的数据。这是使用XRootD系统的标准方法。
在大多数情况下,为了让Snakemake运行命令以对S3存储的输入执行操作,必须将数据传输到执行作业的计算机,因此{@ 1}}应省略或设置为{{ 1}}。当它为stay_on_remote
时,Snakemake将自动下载对象,运行规则,然后在没有更多作业依赖它时删除对象的本地副本。如果你设置了False
,那么会将文件保留在S3上,导致任何本地命令在尝试查找或使用输入时失败 - 除非他们可以自己访问s3。
False
允许stay_on_remote=True
用于您能够运行接受S3伪URL以进行读写(S3RemoteProvider
)的命令的用例。这可以是远程系统,也可以是接受stay_on_remote=True
位置的samtools。如果s3://bucket-name/full/key/value/to/data
,则协议将自动添加到文件中(如果未指定),因此对于S3提供程序,您不需要在输入文件字符串中明确包含s3://
。
例如,stay_on_remote=True
可以与samtools一起使用,如下所示:
s3://
在上面的stay_on_remote=True
中,Snakemake将输入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
,s3://1000genomes/phase1/[...]
可以直接作用于S3对象。
如果您添加了{input}
,我们可以尝试查看samtools
是否适用于您正在执行的操作,或者是否存在实施中的错误。