第二章 环境搭建:安装GATK、Java及相关工具

工欲善其事,必先利其器。做变异检测质控,第一步就是把环境搭利索了。

我记得刚开始带项目时,组里有个同事装GATK装了三天没跑通,后来发现是Java版本不对。这种坑,咱们今天一次性填平。

2.1 整明白我们需要什么

别急着下载。先搞清楚我们的工具链长什么样。我习惯画个简单的依赖关系图,这样脑子清楚。

下面这张图,概括了环境搭建的核心组件和它们之间的关系:

GATK 变异检测质控——环境搭建核心组件 操作系统(Linux / macOS) Java 运行时(JDK 8 / 11 / 17) GATK 核心程序 samtools / bcftools Picard(部分含于GATK) R / Python 脚本 注意 Java版本不匹配 是最大陷阱

说白了,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 为例):

  1. 更新包索引:
    sudo apt update
  2. 安装 OpenJDK 11:
    sudo apt install openjdk-11-jdk -y
  3. 验证安装:
    java -version
    正确输出应包含类似 openjdk version "11.0.18" 的信息。
  4. 设置 JAVA_HOME 环境变量(重要!):

    很多工具会读取 JAVA_HOME。不设的话,GATK 可能找不到 Java。编辑 ~/.bashrc 或 ~/.zshrc,添加:

    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
    export PATH=$JAVA_HOME/bin:$PATH
    然后执行 source ~/.bashrc 使其生效。
小技巧: 如果你的机器上同时装了多个 Java 版本,可以用 sudo update-alternatives --config java 切换默认版本。
避坑指南: 我曾经遇到过用 conda 安装的 Java 与系统 Java 冲突,导致 GATK 启动报错。建议统一用系统级 OpenJDK,别混装多个管理器里的 Java。

2.3 下载与配置 GATK

GATK 的官方发布页面在 Broad Institute 的 GitHub 上。下载方式有两种:

  • 方式一:直接下载预编译 jar 包(推荐)
  • 方式二:从源码编译(不推荐,耗时且容易出依赖问题)

我每次都是直接下载 jar。方法如下:

  1. 获取下载链接:

    访问 GATK 官方 GitHub Releases 页面,找到最新稳定版(比如 4.4.0.0)。复制 gatk-4.4.0.0.zip 的链接。

  2. 用 wget 下载到服务器:
    wget https://github.com/broadinstitute/gatk/releases/download/4.4.0.0/gatk-4.4.0.0.zip
  3. 解压:
    unzip gatk-4.4.0.0.zip
    cd gatk-4.4.0.0
  4. 验证安装:
    ./gatk --help
    应该能看到各个模块的列表。
核心概念: GATK 目录下有个 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"
避坑指南(关于内存): 我曾经在一个 32G 内存的服务器上跑 GATK 的 HaplotypeCaller,结果系统卡死。检查发现 GATK 默认只用了 2G 内存。对于全基因组数据分析,建议至少分配 8-16G,用环境变量 GATK_JAVA_OPTS="-Xmx16g" 来控制。不要设得超过物理内存的 80%,否则容易导致系统使用交换空间,反而更慢。

2.6 快速检查清单

环境搭好后,我习惯用这个清单快速过一遍:

  1. Java 版本: java -version → 显示 11.x 或 8.x
  2. JAVA_HOME: echo $JAVA_HOME → 指向正确的 JDK 路径
  3. GATK 可执行: ./gatk --list → 显示工具列表
  4. samtools: samtools --version → 正常显示版本
  5. bcftools: bcftools --version → 正常显示版本
  6. 磁盘空间: df -h → 确保有足够空间处理 BAM/VCF 文件(每个样本至少预留 50G)

嗯,整个环境搭建流程就是这样。别嫌麻烦,这一步做扎实了,后面几十章的实战才能跑得顺。我见过太多人花两天装环境,结果因为 Java 版本不对,所有分析都得重来。所以,稳一点,不亏。