跳转至

HISAT2 — 低内存 RNA-seq 剪接比对工具


一句话说明

HISAT2 是基于 HGFM(Hierarchical Graph FM)索引的 RNA-seq 比对工具,内存需求仅 8GB(STAR 要 30GB),特别适合内存有限的服务器环境。


安装与配置

# 方法1:conda 安装(推荐)
conda install -c bioconda hisat2  # 从 bioconda 安装

# 方法2:直接下载预编译版本
wget https://cloud.biohpc.swmed.edu/index.php/s/oTtGWbWjaxsQ2Ho/download -O hisat2.zip
unzip hisat2.zip  # 解压即可使用

# 验证安装
hisat2 --version  # 当前最新 2.2.1

# 下载预构建的人类基因组索引(推荐,省去自己构建的时间)
wget https://genome-idx.s3.amazonaws.com/hisat2/grch38.tar.gz
tar -xzf grch38.tar.gz  # 解压即可使用

核心用法

构建索引

# 构建基本索引
hisat2-build \
  -p 16 \            # 使用 16 个线程
  ref.fa \           # 参考基因组 FASTA
  hisat2_index       # 索引前缀名

# 构建包含 SNP 和剪接位点信息的索引(推荐)
# 先从 GTF 提取剪接位点和外显子信息
hisat2_extract_splice_sites.py genes.gtf > splice_sites.txt   # 提取剪接位点
hisat2_extract_exons.py genes.gtf > exons.txt                 # 提取外显子

hisat2-build \
  -p 16 \
  --ss splice_sites.txt \   # 已知剪接位点
  --exon exons.txt \        # 已知外显子
  ref.fa \
  hisat2_index_with_ss      # 带注释的索引

基本比对

# 双端 RNA-seq 比对
hisat2 \
  -p 16 \                    # 16 线程
  --dta \                    # 为下游 StringTie 组装优化输出
  -x hisat2_index \          # 索引前缀
  -1 R1.fq.gz \              # Read 1
  -2 R2.fq.gz \              # Read 2
  | samtools sort -@ 4 -o aligned.bam  # 排序输出 BAM

samtools index aligned.bam   # 建 BAM 索引

# 单端比对
hisat2 -p 16 --dta -x hisat2_index -U reads.fq.gz \
  | samtools sort -o se_aligned.bam

进阶用法

# 链特异性文库比对(dUTP 法,最常见)
hisat2 -p 16 --dta \
  --rna-strandness RF \      # RF = dUTP 法(Read 1 反义链,Read 2 正义链)
  -x hisat2_index \
  -1 R1.fq.gz -2 R2.fq.gz \
  | samtools sort -o stranded.bam

# 输出未比对的读段(用于后续分析)
hisat2 -p 16 --dta \
  -x hisat2_index \
  -1 R1.fq.gz -2 R2.fq.gz \
  --un-conc-gz unmapped_%.fq.gz \  # 未比对的双端读段
  | samtools sort -o aligned.bam

# 下游 StringTie 组装转录本
stringtie aligned.bam \
  -G genes.gtf \             # 参考注释引导组装
  -o assembly.gtf \          # 组装结果
  -p 16                      # 线程数

常见问题与踩坑

问题1:链特异性参数选错

原因:不同建库方法的 strandness 不同
解决:dUTP 法用 --rna-strandness RF(双端)或 R(单端);不确定时先跑 infer_experiment.py(RSeQC)检测

问题2:比对率低于预期

原因:索引没有包含剪接位点信息
解决:用 hisat2_extract_splice_sites.py 提取剪接位点并构建带注释的索引

问题3:下游 StringTie 结果异常

原因:比对时没加 --dta 参数
解决--dta(downstream transcriptome assembly)会调整比对策略,用 StringTie 时必须加

问题4:内存溢出

原因:使用了带 SNP 信息的大索引
解决:不需要 SNP 感知比对时,用基本索引即可(约 8GB 内存)


速查卡片

命令/参数用途
hisat2-build ref.fa prefix构建索引
hisat2 -x idx -1 R1 -2 R2双端比对
hisat2 -x idx -U reads单端比对
--dta为 StringTie 优化输出
--rna-strandness RFdUTP 链特异性(双端)
--rna-strandness RdUTP 链特异性(单端)
--known-splicesite-infile提供已知剪接位点
--novel-splicesite-outfile输出新发现的剪接位点
-k 5每条读段最多报告 5 个比对
--un-conc-gz输出未比对的双端读段