Day3-记GWAS流程中的Tassel软件大坑

    首先,不要问我昨天的笔记哪里去鸟,我只能说GWAS的论文还没看完,等我看完总结好再发上来,见谅啦。


    刚到实验室,导师得知我之前在公司有分析人类WES数据的经验,于是放心地把GWAS流程交给我。
    很惭愧我对GWAS并不熟练,两天过去还是没有跑出一个完整的流程。学校的科研和公司相比,因为不追求效率,所以装软件遇到报错都需要自己处理,而不是招招手让IT解决。虽然很让人头疼,但是从某个角度上来说也是锻炼自己。
    昨晚到今天,我一直在处理GWAS流程中一个叫做Tassel软件的坑。它的主程序是一个调用java程序的perl脚本,我作为生物狗对perl很熟悉但对java可谓一问三不知。
    我参考了上的一篇教程,其中基因型填补步骤中Tassel软件的命令行如下:

perl /home/user/soft/tassel_v5/run_pipeline.pl \
-Xms512m -Xmx5g -importGuess test_final.vcf \
-LDKNNiImputationPlugin -highLDSSites 50 \
-knnTaxa 10 -maxLDDistance 100000000 \
-endPlugin -export test.imputed.vcf \
-exportType VCF

    我在运行后报错信息如下:

Exception in thread "main" java.lang.UnsupportedClassVersionError: net/maizegenetics/pipeline/TasselPipeline : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClassl(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

    在网上查找之后发现是java版本的问题,我使用java -version检查之后版本确实是1.8.0,百思不得其解。
    经过仔细检查后,我发现原来是因为java和javac版本不相符合,使用javac -version检查版本为1.7.0。
    遂下载1.8.0完整版本的java,修改~/.bashrc,这个东西修改环境变量时候经常会用到,不过改JAVA_HOME我还是第一次,需要对三个路径进行设置。
    在~/.bashrc添加具体内容如下:

export JAVA_HOME=/user/bin/jdk1.8.0_60
#上面这条要把下载的jdk路径给JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:.

    修改完毕source后使用which javawhich javac对刚才设置的环境变量进行检查,版本一致基本就解决问题了。
    后面还遇到的一个小坑,是因为我的vcf文件太大,会报java.lang.OutOfMemoryError: Java heap space的错,内存溢出。这个时候需要根据文件的大小适当调整Tassel指令中-Xms512m -Xmx5g的值。我比较偷懒,直接全部设置-Xms64g -Xmx64g,在资源有限的情况下最好还是合理分配~


    最后的最后,想要说一句,装软件报错卡进度确实让人心累,但卡的时间越久,当靠自己的力量去解决这些报错时,成就感就会越大。科研的路从来都不好走,摘取明珠的人必有坚持不懈的定力!

你可能感兴趣的:(Day3-记GWAS流程中的Tassel软件大坑)