本節簡單介紹Aspera安裝和使用,并給出利用SRR號批量下載FASTQ或SRA數據的方法,通過比較發現aspera的下載速度與prefetch相比有了質的飛躍
前言:
我們下載測序數據一般使用sra-tools的prefetch功能,通過SRR號從NCBI的SRA數據庫下載SRA文件,這種方式比較穩定,但下載速度有所限制且需要將SRA再轉化為FASTQ文件,這過程中又會消耗不少時間和算力。
一種替代方法是使用Aspera軟件,從EBI(European Bioinformatics Institute)的ENA(European Nucleotide Archive)數據庫直接下載FASTQ格式文件,免去了轉化格式的步驟,且下載速度有了質的提升,可以說是碾壓prefetch。其缺點是有時候不太穩定,受網絡影響速度波動大。
官網:https://www.ibm.com/products/aspera
1. Aspera的下載和安裝
① conda 安裝
這是最為簡單方便的方式,推薦使用:
conda install -c hcc aspera-cli
② 官網安裝包下載安裝
參照:Aspera:基因組數據高速下載利器,以NCBI和EBI數據下載為例
官網下載地址:https://www.ibm.com/aspera/connect/
首先需要進入上面的aspera 下載地址,獲取linux版本的下載鏈接,再運行以下代碼:
# 下載
wget https://d3gcli72yxqn2z.cloudfront.net/downloads/connect/latest/bin/ibm-aspera-connect_4.2.0.42_linux.tar.gz
# 解壓
tar xvf ibm-aspera-connect******.tar.gz
# 解壓后得到一個腳本文件,運行該腳本,即可完成自動安裝
bash ibm-aspera-connect*******.sh
# 所有安裝文件都在~/.aspera/connect目錄下,在 ~/.bashrc添加環境變量
export PATH=~/.aspera/connect/bin/:$PATH
# 使環境變量生效
source ~/.bashrc
2. 基本參數與使用
https://www.ibm.com/support/pages/downloading-data-ncbi-command-line#usage
① 使用示例:
下載SRR12207279_1.fastq.gz文件到當前文件夾:
ascp -vQT -l 500m -P33001 -k 1 -i \
~/.aspera/connect/etc/asperaweb_id_dsa.openssh \
era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/SRR122/079/SRR12207279/SRR12207279_1.fastq.gz ./
############### 主要使用參數 #################
-v 詳細模式
-Q 用于自適應流量控制,磁盤限制所需
-T 設置為無需加密傳輸
-l 最大下載速度,一般設為500m
-P TCP 端口,一般為33001
-k 斷點續傳,通常設為 1
-i 免密下載的密鑰文件
② 密鑰文件路徑
如果是安裝包安裝的方式,私鑰文件一般位于~/.aspera/connect/etc/asperaweb_id_dsa.openssh
如果是conda安裝的方式,先使用which ascp
命令查看ascp命令所在路徑:
再將bin及之后內容替換為
etc/asperaweb_id_dsa.openssh
如上圖中替換后,密鑰文件路徑就為
/home/gu/miniconda3/envs/share/etc/asperaweb_id_dsa.openssh
最后再
ll
查看確認一下密匙路徑:③ 從EBI獲取FASTQ文件下載地址
https://www.ebi.ac.uk/ena/browser/home中搜索GSE號等信息(如:GSE154290),找到所需的項目,Column Select勾選fastq_aspera及其他想要的信息,直接點擊復制Aspera下載地址,或者下載TSV文件,其中包含有FASTQ文件下載地址信息等
有了下載地址,其實就可以批量寫循環下載了:參見生信技能樹文章 使用ebi數據庫直接下載fastq測序數據的改進腳本
3. 利用SRR號批量下載FASTQ數據或SRA數據
在有了SRR號的情況下,還可以用下面的方法直接用腳本下載對應數據,而不用去EBI網站獲取鏈接
① 批量下載FASTQ文件
觀察FASTQ文件的Aspera下載地址:
era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/SRR122/079/SRR12207279/SRR12207279_1.fastq.gz
可以發現其命名是很有規律的,很容易想到可以編寫腳本批量循環下載數據,下面示范下載SRR12207279和SRR12207280這兩個數據:
-
首先獲取SRR號,導入到test路徑下(test可替換成自己的項目路徑)的idname文件,詳細參見RNA-seq入門實戰(一):上游數據下載、格式轉化和質控清洗
cat -A
命令檢查一下每行是否SRR開頭、$結尾:
編輯、運行以下腳本,代碼主要參考了
(DownLoad)Aspera——ascp下載SRA數據 - 知乎 (zhihu.com)
并加入了樣本編號為SRR+8位數的情況,且能自動根據SRR號的位數下載對應數據;運行前注意修改密匙存放路徑和自己的項目路徑(替換test目錄):
(linux命令和R語言差別真是有點大,查了半天資料才搞明白linux中的邏輯判斷語句的使用,艱難寫出下面的代碼.....)
vim ascp_fastq.sh
### ascp_fastq.sh腳本內容
echo -e "\n\n\n 000# ascp Download FASTQ !!! \n\n\n"
date
## 目錄設置
mkdir -p ~/test/raw/fq/
cd ~/test/raw/fq/
pwd
## 密匙路徑
openssh=/home/gu/miniconda3/envs/share/etc/asperaweb_id_dsa.openssh
cat ~/test/idname | while read id
do
num=`echo $id | wc -m ` #這里注意,wc -m 會把每行結尾$也算為一個字符
echo "SRRnum+1 is $num" #因此SRRnum + 1才等于$num值
#如果樣本編號為SRR+8位數 #
if [ $num -eq 12 ]
then
echo "SRR + 8"
x=$(echo $id | cut -b 1-6)
y=$(echo $id | cut -b 10-11)
echo "Downloading $id "
( ascp -QT -l 500m -P33001 -k 1 -i $openssh \
era-fasp@fasp.sra.ebi.ac.uk:vol1/fastq/$x/0$y/$id/ ./ & )
#如果樣本編號為SRR+7位數 #
elif [ $num -eq 11 ]
then
echo "SRR + 7"
x=$(echo $id | cut -b 1-6)
y=$(echo $id | cut -b 10-10)
echo "Downloading $id "
( ascp -QT -l 500m -P33001 -k 1 -i $openssh \
era-fasp@fasp.sra.ebi.ac.uk:vol1/fastq/$x/00$y/$id/ ./ & )
#如果樣本編號為SRR+6位數 #
elif [ $num -eq 10 ]
then
echo "SRR + 6"
x=$(echo $id |cut -b 1-6)
echo "Downloading $id "
( ascp -QT -l 500m -P33001 -k 1 -i $openssh \
era-fasp@fasp.sra.ebi.ac.uk:vol1/fastq/$x/$id/ ./ & )
fi
done
nohup bash ascp_fastq.sh >log_ascp_fastq 2>&1 &
- 運行結果如下,可以看到,在我的500M寬帶下使用Aspera,5.8G數據下載用時460s,平均速度約13mb/s,下載過程中最高峰值速度可達到近40mb/s,這速度和prefetch相比可以說是飛快了!
② 批量下載SRA文件(10x數據)
奇怪的是,如果是10x單細胞數據,ENA數據庫中每個數據存放的卻只有一個fastq.gz文件,如GSE117988項目,嘗試使用aspera下載其中的 SRR7722941數據后也確實只有一個fastq.gz文件:
而10x上游使用Cellranger軟件需要3個fastq文件...(參見生信技能樹 單細胞實戰(二) cell ranger使用前注意事項 )
沒辦法,只能繼續先下載SRA文件,再用fasterq-dump(--split-files --include-technical 參數)或fastq-dump、 parallel-fastq-dump(--split-files參數)轉成三個fastq文件。(如果有更好辦法,歡迎評論區留言討論)
- 首先觀察SRR7722941數據的SRA文件下載地址:
era-fasp@fasp.sra.ebi.ac.uk:/vol1/srr/SRR772/001/SRR7722941
- 可以發現其與FASTAQ文件下載地址相比,其實也就是其中的
fastq/
換成了srr/
而已,套用上述①中腳本稍微改動一下即可:
echo -e "\n\n\n 000# ascp Download SRA !!! \n\n\n"
date
mkdir -p ~/test/raw/sra/
cd ~/test/raw/sra/
pwd
openssh=/home/gu/miniconda3/envs/share/etc/asperaweb_id_dsa.openssh
cat ~/test/idname | while read id
do
num=`echo $id | wc -m `
echo "SRRnum+1 is $num"
#如果樣本編號為SRR+8位數 #
if [ $num -eq 12 ]
then
echo "SRR + 8"
x=$(echo $id | cut -b 1-6)
y=$(echo $id | cut -b 10-11)
echo "Downloading $id "
( ascp -QT -l 500m -P33001 -k 1 -i $openssh \
era-fasp@fasp.sra.ebi.ac.uk:vol1/srr/$x/0$y/$id/ ./ & )
#如果樣本編號為SRR+7位數 #
elif [ $num -eq 11 ]
then
echo "SRR + 7"
x=$(echo $id | cut -b 1-6)
y=$(echo $id | cut -b 10-10)
echo "Downloading $id "
( ascp -QT -l 500m -P33001 -k 1 -i $openssh \
era-fasp@fasp.sra.ebi.ac.uk:vol1/srr/$x/00$y/$id/ ./ & )
#如果樣本編號為SRR+6位數時 #
elif [ $num -eq 10 ]
then
echo "SRR + 6"
x=$(echo $id |cut -b 1-6)
echo "Downloading $id "
( ascp -QT -l 500m -P33001 -k 1 -i $openssh \
era-fasp@fasp.sra.ebi.ac.uk:vol1/srr/$x/$id/ ./ & )
fi
done
- 用上述腳本下載SRR7722941數據的SRA文件結果如下,下載完成1016M數據,用時79s,平均速度13mb/s:
注意,這里下載的SRA文件沒有.sra后綴,格式轉換前需要先改名,再用parallel-fastq-dump轉換為fastq.gz文件(否則parallel-fastq-dump會誤認為要下載該SRR數據 ),最終生成3個FASTQ文件:
(至于為什么選擇parallel-fastq-dump呢,請參見fastq-dump、fasterq-dump和parallel-fastq-dump處理SRA文件的速度比較 - 簡書 (jianshu.com))
mv SRR7722941 SRR7722941.sra
parallel-fastq-dump -t 12 -O ./ --split-files --gzip -s SRR7722941.sra
- 最后再來比較一下相同網絡條件下(500M寬帶)使用prefetch命令的下載速度:同樣下載1016M數據,prefetch用時195min,平均速度只有90kb/s,花費的時間是Aspera的近150倍。。。。。。(不過如果是后臺同時下載多個文件,差距應該不至于那么大...)
time prefetch -p -O ./ SRR7722941
從以上可看出,相同網絡狀態下aspera的下載速度與prefetch相比有了質的提升,簡直是碾壓般的存在,因此在網絡狀況較好的情況下最好優先選擇aspera下載吧
參考資料
Downloading data from NCBI via the command line (ibm.com)
使用ebi數據庫直接下載fastq測序數據的改進腳本 (qq.com)
Aspera下載安裝使用 - 簡書 (jianshu.com)
從NCBI-SRA和EBI-ENA數據庫下載數據 - 簡書 (jianshu.com)
Aspera:基因組數據高速下載利器,以NCBI和EBI數據下載為例 (qq.com)
(DownLoad)Aspera——ascp下載SRA數據 - 知乎 (zhihu.com)