wget - クラスタ内の複数のノードから複数のファイルをダウンロードします。

wget - クラスタ内の複数のノードから複数のファイルをダウンロードします。

こんにちは。正確には、279個のファイルを一度にダウンロードしようとしています。それぞれはBAMサイズです(〜90GB)。私が作業しているクラスタには複数のノードがあり、幸いにも一度に複数のインスタンスを割り当てることができます。

このような状況では、wgetバッチファイル(バラより以下の例)独立した実行のために各ダウンロードを別々のノードに割り当てます。

バッチファイル.txt

<https_link_1> -O DNK07.bam
<https_link_2> -O mixe0007.bam
<https_link_3> -O IHW9118.bam
.
.

原則として、これにより速度が速くなるだけでなく、実行失敗も防止できます。なぜなら、この実行の停止時間は24時間であり、すべてのファイルを1台のコンピュータにダウンロードするのに十分長くないからです。

私のBASHスクリプトは次のとおりです。

#!/bin/bash
#
#SBATCH --nodes=279 --ntasks=1 --cpus-per-task=1
#SBATCH --time=24:00:00
#SBATCH --mem=10gb
#
#SBATCH --job-name=download
#SBATCH --output=sgdp.out
##SBATCH --array=[1-279]%279
#
#SBATCH --partition=<partition_name>
#SBATCH --qos=<qos_type>
#
#SBATCH --account=<user_account>

#NAMES=$1
#d=$(sed -n "$SLURM_ARRAY_TASK_ID"p $NAMES)

wget -i sgdp-download-list.txt

ご覧のとおり、私はarray job(動作しているかどうかわからない)使用を検討しています。あるいは、279個のノードを割り当てることを検討しており、SLURMが各ダウンロードを別々のノードに送信するのに十分スマートであることを願っています(わかりません... .. .)。効果的な方法を知っているなら、どんな提案でも歓迎します。よろしくお願いします!

ベストアンサー1

wgetSLURMにリストとして送信できるように、コマンドを複数のコマンドに展開します。

while IFS= read -r url; do 
  printf 'wget "%s"\n' "$url"
done < sgdp-download-list.txt > wget.sh

または、最初にコマンドが欠落しているリストがある場合(あなたの例で提案されているように)、以下を使用してくださいsgdp-download-list.txtwgetwget

sed 's/^/wget /' sgdp-download-list.txt > wget.sh

その後、wget.sh課題として提出してください。

おすすめ記事