第二章 环境搭建:安装GATK、Java及相关工具
工欲善其事,必先利其器。做变异检测质控,第一步就是把环境搭利索了。
我记得刚开始带项目时,组里有个同事装GATK装了三天没跑通,后来发现是Java版本不对。这种坑,咱们今天一次性填平。
2.1 整明白我们需要什么
别急着下载。先搞清楚我们的工具链长什么样。我习惯画个简单的依赖关系图,这样脑子清楚。
下面这张图,概括了环境搭建的核心组件和它们之间的关系:
说白了,GATK 是用 Java 写的。Java 版本不对,GATK 直接罢工。我见过有人拿 Java 8 硬跑 GATK4,怪得很,有些工具能跑,有些就报错。所以,先把 Java 搞稳。
2.2 安装 Java
GATK 4.x 官方推荐 Java 8 或 Java 11。我个人建议用 Java 11,性能更好,而且未来兼容性也强。
检查系统是否已安装 Java:
java -version
如果显示「command not found」,那就是没装。如果版本太低,比如 Java 7 或更老,建议卸载重装。
安装步骤(以 Ubuntu 20.04 为例):
- 更新包索引:
sudo apt update - 安装 OpenJDK 11:
sudo apt install openjdk-11-jdk -y - 验证安装:
正确输出应包含类似java -versionopenjdk version "11.0.18"的信息。 - 设置 JAVA_HOME 环境变量(重要!):
很多工具会读取
JAVA_HOME。不设的话,GATK 可能找不到 Java。编辑~/.bashrc或~/.zshrc,添加:
然后执行export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATHsource ~/.bashrc使其生效。
sudo update-alternatives --config java 切换默认版本。
2.3 下载与配置 GATK
GATK 的官方发布页面在 Broad Institute 的 GitHub 上。下载方式有两种:
- 方式一:直接下载预编译 jar 包(推荐)
- 方式二:从源码编译(不推荐,耗时且容易出依赖问题)
我每次都是直接下载 jar。方法如下:
- 获取下载链接:
访问 GATK 官方 GitHub Releases 页面,找到最新稳定版(比如 4.4.0.0)。复制
gatk-4.4.0.0.zip的链接。 - 用 wget 下载到服务器:
wget https://github.com/broadinstitute/gatk/releases/download/4.4.0.0/gatk-4.4.0.0.zip - 解压:
unzip gatk-4.4.0.0.zip cd gatk-4.4.0.0 - 验证安装:
应该能看到各个模块的列表。./gatk --help
gatk 可执行脚本,它会自动调用 Java 并设置类路径。所以后续运行,只需要 ./gatk 工具名 就行。
2.4 安装辅助工具
GATK 不是孤岛。处理 BAM/SAM/CRAM 文件,需要 samtools;处理 VCF 文件,需要 bcftools。我建议一次性装齐。
安装 samtools 和 bcftools:
# Ubuntu / Debian
sudo apt install samtools bcftools -y
# macOS (Homebrew)
brew install samtools bcftools
验证:
samtools --version
bcftools --version
另外,Picard 工具集现在大部分功能已经集成到 GATK 里了,但如果你需要单独的 Picard(比如处理标记重复的旧版本流程),可以单独下载:
wget https://github.com/broadinstitute/picard/releases/download/2.27.5/picard.jar
java -jar picard.jar -h
PATH 环境变量里,或者在 ~/.local/bin 下做个软链接。这样后续写脚本时,直接输工具名就行,不用带全路径。
2.5 环境验证与常见问题
搭完环境,别急着跑数据。先跑个最小的测试,确认所有组件能正常协作。
我一般用 GATK 自带的测试数据:
# 运行一个简单的 PrintReads 测试
./gatk PrintReads \
-I src/test/resources/NA12878.chr17_69k_70k.dictFix.bam \
-O test_output.bam
# 如果没报错,说明 GATK 和 Java 都正常
# 再用 samtools 看看输出文件
samtools view test_output.bam | head -5
常见错误及对策:
| 错误信息 | 原因 | 解决办法 |
|---|---|---|
Exception in thread "main" java.lang.UnsupportedClassVersionError |
Java 版本太低 | 升级到 Java 11 |
Cannot run program "java" |
JAVA_HOME 未设置或设置错误 | 检查 echo $JAVA_HOME,重新设置环境变量 |
samtools: command not found |
samtools 未安装或不在 PATH 中 | 用 which samtools 检查,重新安装或添加路径 |
OutOfMemoryError |
分配给 Java 堆内存不足 | 增大内存:设置 export GATK_JAVA_OPTS="-Xmx16g" |
GATK_JAVA_OPTS="-Xmx16g" 来控制。不要设得超过物理内存的 80%,否则容易导致系统使用交换空间,反而更慢。
2.6 快速检查清单
环境搭好后,我习惯用这个清单快速过一遍:
- Java 版本:
java -version→ 显示 11.x 或 8.x - JAVA_HOME:
echo $JAVA_HOME→ 指向正确的 JDK 路径 - GATK 可执行:
./gatk --list→ 显示工具列表 - samtools:
samtools --version→ 正常显示版本 - bcftools:
bcftools --version→ 正常显示版本 - 磁盘空间:
df -h→ 确保有足够空间处理 BAM/VCF 文件(每个样本至少预留 50G)
嗯,整个环境搭建流程就是这样。别嫌麻烦,这一步做扎实了,后面几十章的实战才能跑得顺。我见过太多人花两天装环境,结果因为 Java 版本不对,所有分析都得重来。所以,稳一点,不亏。