留在 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
是否适用于您正在做的事情,或者实施中是否存在错误。
我正在尝试让 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
是否适用于您正在做的事情,或者实施中是否存在错误。