Kraken2 安装:四种方式,总有一款适合你
嗯,到了实操环节了。Kraken2 的安装其实不复杂,但它支持的部署方式挺多的。我个人习惯根据项目环境选方案:如果是自己的笔记本或服务器,用 Bioconda 最快;如果是 HPC 集群,源码编译更可控;要是 Docker 环境,那直接用镜像就完事了。
下面我把四种主流方式都走一遍,你按自己的场景对号入座就行。
源码编译:从零打造你的 Kraken2
说实话,源码编译是四种方式里最折腾的,但也是我最推荐的——如果服务器归你管的话。为什么?因为你可以自己控制编译参数。我在项目里遇到过一个需求:需要让 Kraken2 支持大内存访问模式,Bioconda 包默认没开,只能自己编。
准备工作很简单,你需要一个 C++11 以上的编译器。GCC 4.8 起步,我建议 GCC 8 以上,省得碰见奇奇怪怪的编译警告。直接看命令:
# 1. 下载源码(以 v2.1.3 为例)
git clone https://github.com/DerrickWood/kraken2.git
cd kraken2
# 2. 查看一下源码目录,你主要看 src/ 这个目录
ls -la src/
# 3. 编译安装,默认安装到当前目录下的 kraken2/ 里
./install_kraken2.sh ./
# 4. 验证编译产物
ls -lh ./kraken2
ls -lh ./kraken2-build
注意:这个脚本会同时编译 kraken2、kraken2-build、kraken2-inspect 三个程序。
# 启用 GCC 8 环境(适用于 RHEL/CentOS 6/7)
scl enable devtoolset-8 bash
# 然后重新运行 install_kraken2.sh
你想想看,这种场景下如果自己不会编译,那就只能干瞪眼。
高级玩法:静态编译。如果你需要把编译好的 Kraken2 传到没有编译环境的机器上,可以试试静态链接。在源码目录下执行:
# 先装好 zlib 静态库
yum install zlib-static
# 或者 apt install zlib1g-dev
# 手动编译静态版本
cd src
g++ -static -o kraken2 kraken2.cc kraken2_functions.cc kraken2_utilities.cc -lz -lpthread
strip kraken2
编译出来的二进制文件直接拷走就能跑,不用管目标机器有没有运行时库。这个技巧我在做容器镜像时经常用。
Bioconda 安装:一行命令的快乐
讲真的,我最初接触 Kraken2 时就是用 Bioconda 装的。原因是——懒。而且 conda 环境隔离特别干净,给师兄师弟搭 demo 环境的时候,一条命令下去啥都有了。
# 1. 确保已安装 conda(Miniconda 或 Anaconda 都行)
conda --version
# 2. 添加 bioconda 频道(顺序很重要!)
conda config --add channels defaults
conda config --add channels bioconda
conda config --add channels conda-forge
# 3. 创建专用环境(我个人习惯用独立的 conda env)
conda create -n kraken2_env kraken2
# 4. 激活环境
conda activate kraken2_env
# 5. 验证
which kraken2
kraken2 --version
避坑指南:Bioconda 的包版本可能比 GitHub 仓库慢一个两个小版本。我曾经在做生产流程升级时发现 Bioconda 还没更新到 v2.1.3,只好切到 src 编译。这个要注意,生产环境要提前确认包版本。
还有一个细节:conda 安装的 Kraken2 默认编译参数是通用的,不会针对你的 CPU 优化指令集(比如 AVX2、FMA)。如果你追求极致性能,建议还是源码编译。
把几种安装方式的环境要求做个对比:
| 安装方式 | 环境要求 | 步骤复杂度 | 适用场景 |
|---|---|---|---|
| 源码编译 | GCC ≥ 4.8、CMake、zlib-dev | ⭐⭐⭐ 中等(需处理依赖) | HPC、定制优化、离线环境 |
| Bioconda | Conda ≥ 4.6、网络通畅 | ⭐ 简单(一键安装) | 个人笔记本、快速原型 |
| Docker | Docker ≥ 19.03、至少 2G 磁盘 | ⭐ 简单(pull 即可) | 生产流水线、CI/CD、共享平台 |
Docker 部署:拿来就用的终极方案
有些生产环境或集群环境下,你没法随便装软件,改环境变量更是要审批。这时候 Docker 部署就派上用场了。说白了,就是把整个 Kraken2 装进一个"盒子"里,拿到哪都能跑。
我用的最多的是 staphb/kraken2 这个官方镜像。StaphB 团队维护的质量不错,更新也挺及时。
# 1. 拉取镜像
docker pull staphb/kraken2:latest
# 2. 简单测试
docker run --rm staphb/kraken2:latest kraken2 --version
# 3. 挂载本地数据库并运行(常用方式)
docker run --rm \
-v /path/to/local/db:/database \
-v /path/to/input:/data \
staphb/kraken2:latest \
kraken2 --db /database --report /data/report.txt /data/reads.fasta
注意:Docker 容器内默认工作目录是 /data,所以输入输出路径都要以 /data 开头,或者你用绝对路径挂载。
/kraken2/database 还是 /data?不同镜像的约定不太一样。我曾经在一个裸机集群上直接用了 staphb/kraken2 镜像,结果数据库路径死活找不到,后来发现它的数据库默认装在了 /kraken2 目录下,必须手动挂载。嗯,从那以后我每次用 Docker 都先用 --entrypoint bash 进去看一眼目录结构:docker run --rm -it --entrypoint bash staphb/kraken2:latest
ls /
# 看看到底目录叫啥
exit
验证安装:不能光看版本号
装完了怎么确认它能用?光看版本号还不够。我的标准流程是三步走:
- 看版本号:确认可执行文件路径正确。
- 跑内置测试:Kraken2 源码目录下自带测试数据集。
- 测一条真实数据:从 NCBI 随便扒几条序列试试。
咱们来走一遍完整的验证流程:
# 1. 版本号验证
kraken2 --version
# 期望输出:Kraken version 2.1.3(具体版本号以你装的为准)
# 2. 检查子命令是否齐全
kraken2-build --help | head -5
kraken2-inspect --help | head -5
# 3. 用源码自带的 test 数据快速验证
# 先建个最小测试数据库(只有 3 个物种)
kraken2-build --download-taxonomy --db test_db --skip-finished
# 你会发现很快就建完了,不用等几个小时
# 4. 运行分类测试
echo -e ">seq1\nACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT" | \
kraken2 --db test_db --fasta-input /dev/stdin
# 期望看到类似输出:
# 1 sequences classified
# 分类结果会显示 unclassified 或某个 taxid
注意:如果你没用 --fasta-input 参数,Kraken2 会默认输入格式是 --fastq-input,拿 fasta 作为输入会直接报错。这个坑我踩过。
time 命令跑一遍 1000 条 reads 的分类,记录几次运行的耗时。如果第一次跑得很慢,而第二次突然变快了——说明系统内存足够大,第二次已经被缓存了。这个指标可以用来判断你的服务器内存是否足够大,这跟后面要讲的数据库选择直接相关。# 性能摸底小测试(选做)
time kraken2 --db test_db --report /dev/null --threads 4 test_1000.fasta
好了,走到这一步,你的 Kraken2 已经可以正常工作了。我个人的经验是:Bioconda 最适合快速上手,Docker 最适合环境迁移,源码编译最适合折腾。挑一个适合你的方式,装上了就赶紧用起来。毕竟生物信息学的核心不是装软件——是分析数据。