echo java.ext.dirs_找寻gvcf失败的原因

最近走我整理和搭建好的:最新版针对RNA-seq数据的GATK找变异流程, 如果样本样品是正常运行,会输出:

920M Nov 9 02:07 SRR2016956_gatk.gvcf

12M Nov 9 02:07 SRR2016956_gatk.gvcf.idx

5.5M Nov 9 00:25 SRR2016956_recal.bai

9.0G Nov 9 00:25 SRR2016956_recal.bam

840K Nov 9 00:09 SRR2016956_recal.table

6.2M Nov 8 23:48 SRR2016956_rmd_split.bai

因为我只想保留recal后的bam和call出来的gvcf文件,但是发现有些样本根本就走不通这个流程,就需要debug了。

6.6G Nov 15 08:33 SRR2016955_rmd.bam

6.5M Nov 15 08:33 SRR2016955_rmd.bam.bai

0 Nov 15 08:33 SRR2016955_rmd_split.bai

0 Nov 15 08:33 SRR2016955_rmd_split.bam

134 Nov 15 10:32 SRR2016955_rmd_split_add.bam

也就是说错在:

time $gatk SplitNCigarReads -R $GENOME \

-I ${sample}_rmd.bam \

-O ${sample}_rmd_split.bam

这个步骤非常耗费时间,需要至少100min,所以需要一些技巧来调试。首先需要查看日志,因为GATK的日志非常多,所以需要对比查看,然后我发现运行错误的样本,多了下面的信息:

htsjdk.samtools.util.RuntimeIOException: Attempt to add record to closed writer.

at htsjdk.samtools.util.AbstractAsyncWriter.write(AbstractAsyncWriter.java:57)

at htsjdk.samtools.AsyncSAMFileWriter.addAlignment(AsyncSAMFileWriter.java:53)

at org.broadinstitute.hellbender.utils.read.SAMFileGATKReadWriter.addRead(SAMFileGATKReadWriter.java:21)

at org.broadinstitute.hellbender.tools.walkers.rnaseq.OverhangFixingManager.writeReads(OverhangFixingManager.java:358)

at org.broadinstitute.hellbender.tools.walkers.rnaseq.OverhangFixingManager.flush(OverhangFixingManager.java:338)

at org.broadinstitute.hellbender.tools.walkers.rnaseq.SplitNCigarReads.closeTool(SplitNCigarReads.java:196)

at org.broadinstitute.hellbender.engine.GATKTool.doWork(GATKTool.java:1052)

at org.broadinstitute.hellbender.cmdline.CommandLineProgram.runTool(CommandLineProgram.java:139)

at org.broadinstitute.hellbender.cmdline.CommandLineProgram.instanceMainPostParseArgs(CommandLineProgram.java:191)

at org.broadinstitute.hellbender.cmdline.CommandLineProgram.instanceMain(CommandLineProgram.java:210)

at org.broadinstitute.hellbender.Main.runCommandLineProgram(Main.java:163)

at org.broadinstitute.hellbender.Main.mainEntry(Main.java:206)

at org.broadinstitute.hellbender.Main.main(Main.java:292)

非常感谢前辈们愿意花费十几至二十几分钟写自己的疑惑然后跟开发者公开讨论让我们后学者可以快速解决bug

原来是临时目录问题

I figured out the issue (at least for me). It stems from where SplitNCigarReads is writing the temporary files. For me, it's writing them to the cluster which has very limited disk space. When I redirected this using --TMP_DIR /my/scratch/space everything went smoothly.

The part that still confuses me is that I had already set export _JAVA_OPTIONS=-Djava.io.tmpdir=/my/scratch/space. This is not getting picked up by SplitNCigarReads in GATK4 as I would have expected. After much experimenting I started with a clean environment and simply set --TMP_DIR /my/scratch/space only which worked.

This seems a bit "buggy" to me and it would be great if the GATK development team could look into it and pass Djava.io.tmpdir to --TMP_DIR if possible.

这个时候,就必须回过头看看另外一个:虽然不知道为什么但是我可以解决这个bug,但它就是被解决了 因为那个时候不知道,所以就糊里糊涂的解决了问题而已,但是现在遇到了类似的问题,仍然是很头疼!

那个时候同样的也是 —TMP_DIR 捣鬼,所以我才会在运行GATK命令的时候设置这个 java.io.tmpdir ,通过下面的方式:

java -Djava.io.tmpdir=/path/to/tmpdir

但是现在就是进退两难了,因为加上这个参数,命令提交到服务器就被kill,如果不加上这个参数,我们的临时目录又没有空间让我运行这个gatk命令。

首先需要简单了解一些java

java -version:查看JDK版本

whereis java

which java (java执行路径)

echo $JAVA_HOME

echo $PATH

其中java可以操作的参数非常多,这次我们遇到的就是 java.io.tmpdir, 默认的临时文件路径!

java.version

Java运行时环境版本

java.vendor

Java运行时环境供应商

java.vendor.url

Java供应商的 URL

java.home

Java安装目录

java.vm.specification.version

Java虚拟机规范版本

java.vm.specification.vendor

Java虚拟机规范供应商

java.vm.specification.name

Java虚拟机规范名称

java.vm.version

Java虚拟机实现版本

java.vm.vendor

Java虚拟机实现供应商

java.vm.name

Java虚拟机实现名称

java.specification.version

Java运行时环境规范版本

java.specification.vendor

Java运行时环境规范供应商

java.specification.name

Java运行时环境规范名称

java.class.version

Java类格式版本号

java.class.path

Java类路径

java.library.path

加载库时搜索的路径列表

java.io.tmpdir

默认的临时文件路径

java.compiler

要使用的 JIT 编译器的名称

java.ext.dirs

一个或多个扩展目录的路径

os.name

操作系统的名称

os.arch

操作系统的架构

os.version

操作系统的版本

file.separator

文件分隔符(在 UNIX 系统中是“/”)

path.separator

路径分隔符(在 UNIX 系统中是“:”)

line.separator

行分隔符(在 UNIX 系统中是“/n”)

user.name

用户的账户名称

user.home

用户的主目录

user.dir

用户的当前工作目录

其实临时文件并不是一直报错

因为HPC是一百多人一起使用,虽然说临时文件夹有几百个G,但是也架不住人多。

过两天再运行同样的程序居然就ok了,让我也很郁闷。

最后友情宣传生信技能树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值