Aspera——碾壓prefetch命令的存在, 利用SRR號批量高效下載FASTQ或SRA數據

本節簡單介紹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)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容