继续使用远程S3 RemoteProvider

时间:2017-06-27 16:56:36

标签: snakemake

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

提前感谢您的帮助!

1 个答案:

答案 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}") 替换为Snakefiles3://1000genomes/phase1/[...]可以直接作用于S3对象。

如果您添加了{input},我们可以尝试查看samtools是否适用于您正在执行的操作,或者是否存在实施中的错误。