本地Snakemake作业分组及批量样本处理存储问题求助
Snakemake批量处理SRA样本的存储与管道问题
我正在构建一个Snakemake流程,用prefetch从SRA下载大量fastq文件并生成bam文件。少量样本能正常运行,但本地批量处理100个样本时遇到存储瓶颈——流程会先下载所有fastq文件,再执行后续步骤。
我的流程里,最终bam文件之前的所有步骤都标记为temporary(),分析完成后fastq文件会被自动删除,后续不会有存储问题。如果能每次处理10个样本,删除临时输出后再下载新的fastq文件,就能解决当前的存储问题。
我试过两种方法,但都没成功:
- 对作业分组并分配10核,原本以为会先处理完10个样本的全流程再处理第11个,但分组功能在本地环境不生效
- 尝试用pipe方法:把prefetch规则的output从
temporary()改为pipe()。prefetch与fasterq-dump的管道操作在Snakemake外能正常运行,但在Snakemake中执行时出现「group错误」,看起来是fasterq-dump在文件下载完成前就尝试读取。
以下是我测试pipe方法的Snakemake代码片段:
rule prefetch: input: output: pipe(os.path.join(config['all_path']['sra_down'], "{srasample}/{srasample}.sra")) wildcard_constraints: srasample="|".join(list(config['fastq_sra_HE'].values())) params: sraID="{srasample}", srapath=expand(config["all_path"]["sra_down"]) shell: "prefetch {params.sraID} -O {params.srapath}" rule fasterqdump: input: os.path.join(config['all_path']['sra_down'], "{srasample}/{srasample}.sra") output: r1=temporary(os.path.join(config['all_path']['sra_down'], "{srasample}_1.fastq")), r2=temporary(os.path.join(config['all_path']['sra_down'], "{srasample}_2.fastq")) wildcard_constraints: srasample="|".join(list(config['fastq_sra_HE'].values())), r=["1","2"] params: sraID=os.path.join(config['all_path']['sra_down'], "{srasample}"), srapath=expand(config["all_path"]["sra_down"]) shell: "fasterq-dump {params.sraID} -O {params.srapath}"
报错信息如下:
2024-11-21T16:14:51 fasterq-dump.2.11.3 err: invalid accession '/disco2/tiago/worldpops/SRR204016' fasterq-dump quit with error code 3 [Thu Nov 21 13:14:52 2024] Error in group ffb6a5f4-6dee-447e-9a2e-2dea42295399: jobs: rule fasterqdump: jobid: 3 output: /disco2/tiago/worldpops/SRR204016_1.fastq, /disco2/tiago/worldpops/SRR204016_2.fastq rule prefetch: jobid: 4 output: /disco2/tiago/worldpops/SRR204016/SRR204016.sra (pipe) Shutting down, this might take some time.
恳请各位提供解决该问题的方法。
内容的提问来源于stack exchange,提问作者TiagoRibeiro
相关产品推荐
相关产品推荐

