FlowMeta 是一个端到端的宏基因组学分析流水线,整合了 10 个处理步骤,从原始 FASTQ 文件到最终的物种丰度矩阵。
使用 fastp 对原始 FASTQ 文件进行质量控制,包括:
| 参数 | 默认值 | 说明 |
|---|---|---|
--fastp_length_required | 50 | 最小读长 |
--fastp_retries | 3 | 失败重试次数 |
--skip_integrity_checks | False | 跳过完整性检查 |
--batch 参数控制并行处理的样本数,默认为 2。每个样本使用 --threads 指定的线程数运行 fastp。
验证 fastp 输出文件的完整性,确保 FASTQ 文件未损坏。使用 pigz 进行压缩测试。
--check_result 参数。如果使用 --skip_integrity_checks,则即使指定 --check_result 也会跳过此步骤。
使用 Bowtie2 将序列比对到宿主参考基因组,去除宿主序列:
| 参数 | 默认值 | 说明 |
|---|---|---|
--host_retries | 3 | 失败重试次数 |
--suffix1 | _1.fastq.gz | R1 文件后缀 |
--suffix2 | _2.fastq.gz | R2 文件后缀 |
--very-sensitive 模式确保最大比对敏感度。调整 --threads 以匹配可用 CPU 核心数。
验证步骤 3 输出的 FASTQ 文件完整性,确保所有文件均正确生成。
从 BAM 文件中提取比对到宿主基因组的序列,用于后续分析:
| 参数 | 默认值 | 说明 |
|---|---|---|
--skip_host_extract | False | 跳过此步骤 |
mode | mapped_anypair | 提取模式 |
--skip_host_extract 可以节省时间。
将 Kraken2 数据库复制到共享内存(/dev/shm/),显著加速分类步骤:
| 参数 | 默认值 | 说明 |
|---|---|---|
--copy_db_to_shm | True | 启用缓存 |
--shm_path | /dev/shm/k2ppf | 缓存路径 |
--no_shm | - | 禁用缓存 |
df -h /dev/shm 检查可用空间。
使用 Kraken2 进行物种分类,可选运行 Bracken 丰度估计:
| 参数 | 默认值 | 说明 |
|---|---|---|
--kraken_retries | 3 | 失败重试次数 |
--enable_bracken_step7 | False | 步骤 7 运行 Bracken |
--batch | 2 | 并行样本数 |
--batch 设置为 1-2。每个样本使用 --threads 指定的线程数。
验证 Kraken2 报告文件的格式和内容完整性。
从 Kraken 报告中移除宿主相关分类(如人类),重新运行 Bracken:
| 参数 | 默认值 | 说明 |
|---|---|---|
--min_count | 4 | Bracken 最小计数 |
合并所有样本的结果为统一矩阵,便于下游分析:
| 参数 | 默认值 | 说明 |
|---|---|---|
--project_prefix | "" | 输出文件前缀 |
*.nohuman.kraken.mpa.std.txt 和 *.bracken。流水线启动时会检查这些文件是否存在。
run_merge_step 将为 None,流水线会在步骤 10 之前停止。
| 项目 | 最低要求 | 推荐配置 |
|---|---|---|
| 操作系统 | Linux / WSL | Ubuntu 20.04+, CentOS 7+, Rocky Linux 8+ |
| Python 版本 | ≥ 3.8 | 3.9 或 3.10 |
| 内存 | 32 GB | 128 GB+(大规模样本) |
| 存储 | SSD | NVMe SSD(加速 I/O) |
| CPU | 8 核心 | 32+ 核心(支持并行) |
| 共享内存 | ≥ 100 GB | ≥ 200 GB(标准数据库) |
# 方法 1:使用项目提供的 environment.yml
conda env create -f environment.yml
conda activate meta
# 方法 2:手动创建环境
conda create -n flowmeta python=3.10 -y
conda activate flowmeta
# 安装生物信息学工具
conda install -c bioconda fastp bowtie2 samtools kraken2 bracken -y
conda install -c conda-forge scipy pandas numpy pigz seqkit -y
# 验证安装
fastp --version
bowtie2 --version
samtools --version
kraken2 --version
bracken --version
python -c "import pandas, numpy; print('Python OK')"
# 方式 1:从 PyPI 安装(推荐)
pip install flowmeta
# 方式 2:从本地 wheel 文件安装
pip install dist/flowmeta-0.1.5-py3-none-any.whl
# 方式 3:开发模式安装
git clone https://github.com/SkinMicrobe/FlowMeta.git
cd FlowMeta
pip install -e .
# 验证安装
flowmeta_base --help
# 创建数据库目录
mkdir -p /mnt/db/kraken2
cd /mnt/db/kraken2
# 下载标准数据库(约 100GB)
wget https://benlangmead.github.io/aws-indexes/k2/k2_standard_20240112.tar.gz
tar -xzf k2_standard_20240112.tar.gz
# 验证数据库文件
ls k2_standard_20240112/
# 应包含:hash.k2d, opts.k2d, taxo.k2d, database.k2d, read_library.bin
# 创建索引目录
mkdir -p /mnt/db/bowtie2
cd /mnt/db/bowtie2
# 下载人类参考基因组
wget https://ftp.ncbi.nlm.nih.gov/genomes/all/\
GCA/000/001/405/GCA_000001405.28_GRCh38.p13/\
GCA_000001405.28_GRCh38.p13_genomic.fna.gz
# 可选:去除替代序列和补丁序列
seqkit grep -rvp "alt|PATCH" GCA_000001405.28_GRCh38.p13_genomic.fna.gz \
> GRCh38_noalt.fna
# 构建 Bowtie2 索引
bowtie2-build GRCh38_noalt.fna /mnt/db/bowtie2/GRCh38_noalt_as/GRCh38_noalt_as
# 验证索引文件
ls /mnt/db/bowtie2/GRCh38_noalt_as/
# 应包含:*.bt2 文件(6 个文件)
# 完整流水线运行
flowmeta_base \
--input_dir /mnt/data/flowmeta/01-raw \
--output_dir /mnt/data/flowmeta/results \
--db_bowtie2 /mnt/db/bowtie2/GRCh38_noalt_as/GRCh38_noalt_as \
--db_kraken /mnt/db/kraken2/k2_standard_20240112 \
--threads 32 \
--batch 2
# 这正是您之前运行的命令
flowmeta_base \
--input_dir /mnt/cephfs/s2z4/01-smooth/01-mg/01-raw \
--output_dir /mnt/cephfs/s2z4/01-smooth/01-mg \
--db_bowtie2 $db_bowtie2 \
--db_kraken $db_kraken \
--threads 32 \
--step 10 \
--batch 1
| 参数 | 默认值 | 说明 |
|---|---|---|
--input_dir | - | 原始 FASTQ 目录 |
--output_dir | - | 输出目录 |
--db_bowtie2 | - | Bowtie2 索引前缀 |
--db_kraken | - | Kraken2 数据库目录 |
--threads | 32 | 每进程线程数 |
--batch | 2 | 并行样本批次 |
--step | None | 从步骤 N 恢复 (1-10) |
--step_only | False | 仅运行指定步骤 |
--force | False | 强制重新运行 |
--project_prefix | "" | 步骤 10 输出前缀 |
--se | False | 单端测序模式 |
--skip_integrity_checks | False | 跳过完整性检查 |
--skip_host_extract | False | 跳过步骤 5 |
--no_shm | - | 禁用共享内存缓存 |
--fastp_length_required | 50 | fastp 最小读长 |
--enable_bracken_step7 | False | 步骤 7 运行 Bracken |
--min_count | 4 | Bracken 最小计数 |
FlowMeta 使用 .task.complete 文件标记每个样本的处理状态,支持断点续跑:
| 标记文件 | 位置 | 对应步骤 |
|---|---|---|
*.task.complete | 02-qc/ | 步骤 1: fastp 质控完成 |
*.task.complete | 03-hr/ | 步骤 3: 宿主去除完成 |
*.kraken.task.complete | 06-ku/ | 步骤 7: Kraken 分类完成 |
*.task.complete | 08-ku2/ | 步骤 9: 宿主过滤完成 |
--step N 从步骤 N 开始运行--force 强制重新运行所有样本.task.complete 文件可单独重新处理该样本| 问题 | 解决方案 |
|---|---|
| 如何从特定步骤恢复? | 使用 --step N 参数 |
| 如何强制重新运行某个步骤? | 使用 --step N --force |
| 共享内存缓存有什么作用? | 将 Kraken2 数据库复制到 /dev/shm/ 加速分类 |
| 如何处理单端测序数据? | 使用 --se 标志 |
| 如何跳过完整性检查? | 使用 --skip_integrity_checks |
| 步骤 10 依赖什么? | 需要步骤 9 的输出文件 |
| 如何增加并行处理的样本数? | 调整 --batch 参数 |
| 场景 | 优化方法 |
|---|---|
| Kraken2 分类慢 | 使用共享内存缓存 /dev/shm |
| 大量小文件 | 增加 --batch 值 |
| I/O 瓶颈 | 使用 NVMe SSD 存储 |
| 内存不足 | 减少 --batch 和 --threads |
| 需要快速结果 | 使用 --skip_integrity_checks |
如果 FlowMeta 对您的研究有帮助,请引用我们的代码仓库:
@software{flowmeta2025,
title = {FlowMeta: Automated End-to-End Metagenomic Profiling Pipeline},
author = {Zeng, Dongqiang},
year = {2025},
url = {https://github.com/SkinMicrobe/FlowMeta},
institution = {Southern Medical University}
}
🎉 祝您分析顺利!Happy Sequencing!