一句话概述:MEGAHIT是宏基因组短读长组装的速度之王(内存友好),metaSPAdes在中小数据集上组装质量最高(但内存消耗大),Flye是长读长宏基因组组装的首选——大数据集用MEGAHIT,小数据集用metaSPAdes,长读长用Flye。
核心知识点速查表
| 概念 | 说明 |
|---|
| MEGAHIT | 内存高效的宏基因组组装(白话:快而省内存的拼图工具) |
| metaSPAdes | 高质量宏基因组组装(白话:慢但拼得更好) |
| Flye | 长读长(meta)基因组组装(PacBio/ONT) |
| contig | 组装出的连续序列片段 |
| N50 | 50%的组装序列长度≥此值(越大越好) |
| de Bruijn图 | 短读长组装的核心数据结构 |
一、三大工具对比
| 特性 | MEGAHIT | metaSPAdes | Flye(meta模式) |
|---|
| 数据类型 | Illumina短读长 | Illumina短读长 | PacBio/ONT长读长 |
| 速度 | ★最快 | 慢 | 中等 |
| 内存需求 | ★低(~20GB) | 高(~200GB) | 中(~50GB) |
| N50 | 好 | ★最高 | ★最高(长读长) |
| 组装完整性 | 好 | ★更好 | ★最好(长读长) |
| 大数据(>100GB) | ★推荐 | 可能OOM | 推荐(长读长) |
| 嵌合体 | 较少 | 较少 | 可能较多 |
| 混合组装 | 否 | 是(★) | 否(但可polish) |
| 适用场景 | 大数据集/常规 | 小数据集/高质量 | 长读长数据 |
二、安装
# === 安装 ===
conda install -c bioconda megahit # MEGAHIT
conda install -c bioconda spades # SPAdes(含metaSPAdes)
conda install -c bioconda flye # Flye
conda install -c bioconda quast # 组装评估
conda install -c bioconda metaquast # 宏基因组组装评估
三、组装实操
3.1 MEGAHIT(大数据集首选)
# === MEGAHIT 宏基因组组装 ===
megahit \
-1 sample_R1.fq.gz \ # 正向读段
-2 sample_R2.fq.gz \ # 反向读段
-o megahit_output \ # 输出目录
-t 16 \ # 线程数
--min-contig-len 500 \ # 最短contig长度(500bp)
--k-list 21,29,39,59,79,99,119,141 \ # k-mer列表(多k-mer策略)
--memory 0.5 # 使用50%的可用内存
# 多样本共组装(co-assembly)
megahit \
-1 s1_R1.fq.gz,s2_R1.fq.gz,s3_R1.fq.gz \ # 多样本R1
-2 s1_R2.fq.gz,s2_R2.fq.gz,s3_R2.fq.gz \ # 多样本R2
-o coassembly \
-t 16 --min-contig-len 1000
# 输出: megahit_output/final.contigs.fa
# === metaSPAdes 宏基因组组装 ===
metaspades.py \
-1 sample_R1.fq.gz \ # 正向读段
-2 sample_R2.fq.gz \ # 反向读段
-o metaspades_output \ # 输出目录
-t 16 \ # 线程数
-m 200 \ # 最大内存(GB) ★重要
-k 21,33,55,77,99,127 # k-mer列表
# 混合组装(短读长+长读长)
spades.py --meta \
-1 R1.fq.gz -2 R2.fq.gz \ # 短读长
--nanopore long_reads.fq.gz \ # ONT长读长
-o hybrid_assembly \
-t 16 -m 200
# 输出: metaspades_output/scaffolds.fasta(推荐用这个)
# 输出: metaspades_output/contigs.fasta
3.3 Flye(长读长宏基因组)
# === Flye 长读长宏基因组组装 ===
flye \
--nano-raw ont_reads.fq.gz \ # ONT原始读长(--nano-hq用于HQ)
--meta \ # ★宏基因组模式
--out-dir flye_output \ # 输出目录
--threads 16 \ # 线程数
--min-overlap 3000 # 最小重叠长度
# PacBio HiFi
flye \
--pacbio-hifi hifi_reads.fq.gz \ # PacBio HiFi读长
--meta \
--out-dir flye_hifi \
--threads 16
# 输出: flye_output/assembly.fasta
# 输出: flye_output/assembly_info.txt(组装统计)
四、组装质量评估
# === QUAST评估 ===
quast \
megahit_output/final.contigs.fa \ # MEGAHIT结果
metaspades_output/scaffolds.fasta \ # metaSPAdes结果
-o quast_comparison \ # 输出目录
-t 8 \ # 线程数
--min-contig 500 \ # 最短contig
-l "MEGAHIT,metaSPAdes" # 标签
# === 关键指标 ===
# N50: 越大越好(通常>5kb为好)
# 总长度: 组装出的总碱基数
# contig数: 越少越好(碎片少)
# 最大contig: 越长越好
# L50: 需要多少条最长的contig才能覆盖50%
# === 宏基因组评估(MetaQUAST) ===
metaquast \
megahit_output/final.contigs.fa \
-o metaquast_output \
--max-ref-number 50 \ # 最多参考基因组数
-t 8
# === 回比评估(覆盖度) ===
# 用读段回比到组装结果
bowtie2-build assembly.fa assembly_idx
bowtie2 -x assembly_idx -1 R1.fq.gz -2 R2.fq.gz -p 8 | samtools sort -o mapped.bam
samtools flagstat mapped.bam # 看回比率(>80%为好)
五、面试高频考点
| 条件 | 选择 | 原因 |
|---|
| 数据>50GB | MEGAHIT | metaSPAdes可能OOM |
| 数据<20GB | metaSPAdes | 组装质量更好 |
| 内存<64GB | MEGAHIT | 内存友好 |
| 需要混合组装 | metaSPAdes | 支持短+长读长 |
| 常规宏基因组 | MEGAHIT | 速度和质量平衡好 |
Q2: 什么是N50?怎么解读?
- N50是衡量组装质量的核心指标
- 含义:把所有contig从长到短排列,累计长度达到总长度50%时那条contig的长度
- 白话:如果组装结果是一堆拼图碎片,N50就是"中等偏大的碎片有多大"
- 宏基因组N50通常1-50kb,基因组N50可达数Mb
Q3: 共组装(co-assembly)和单样本组装怎么选?
- 共组装:多样本合并后一起组装(增加测序深度,检测低丰度物种)
- 单样本组装:每个样本独立组装(保留样本特异性)
- 一般推荐:共组装(更完整),但如果样本差异很大则单样本更好
六、常见报错
| 报错 | 原因 | 解决 |
|---|
MEGAHIT: exit code 255 | 内存不足 | 增加--memory或减少数据 |
metaSPAdes: Error allocating | 超过内存限制 | 增加-m值或用MEGAHIT |
Flye: Not enough reads | 读长数据太少 | 需要更多长读长数据 |
N50=0或很小 | 组装质量差 | 检查数据质量/增加数据量 |
| 组装大小异常大 | 大量冗余/嵌合体 | 检查是否有污染 |
速查表
# === 组装速查 ===
# MEGAHIT(快速/大数据)
megahit -1 R1.fq.gz -2 R2.fq.gz -o out -t 16 --min-contig-len 500
# metaSPAdes(高质量/小数据)
metaspades.py -1 R1.fq.gz -2 R2.fq.gz -o out -t 16 -m 200
# Flye(长读长)
flye --nano-raw reads.fq --meta --out-dir out --threads 16
# 评估
quast assembly.fa -o quast_out -t 8
# 选择: 大数据→MEGAHIT | 小数据→metaSPAdes | 长读长→Flye
# 指标: N50(越大越好) | contig数(越少越好) | 回比率(>80%)