抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前言,如何把数据从百度云上下载到linux服务器上

可以直接通过pip下载:pip install bypy -y

第一次使用时需要随便输入一个命令以激活授权界面,如输入 bypy info

然后打开提示的连接

Untitled

将复制的内容粘贴到终端后回车,等待即可。

登陆成功后会提示如下信息

Untitled

登录百度网盘(我的应用数据/bypy/你的文件名/*/文件)

有多个文件建议十个放到一个文件夹里,这样下载出错方便排查

Untitled

我写了一个脚本可以自动安装download.sh

1
2
3
4
5
6
7
bypy downdir /RAW-NCBI/0/ ./0/
bypy downdir /RAW-NCBI/1/ ./1/
bypy downdir /RAW-NCBI/2/ ./2/
bypy downdir /RAW-NCBI/3/ ./3/
bypy downdir /RAW-NCBI/4/ ./4/
bypy downdir /RAW-NCBI/5/ ./5/
bypy downdir /RAW-NCBI/6/ ./6/

因为我有74个文件,因此分成了7组进行下载

在你想存储的文件夹里输入

1
nohup bash [download.sh](http://download.sh) > temp.txt &

(nohup是在Linux中永久运行的命令,&和其他方式均会因为终端退出而中断。>把下载的过程信息存储到temp.txt,&并放在后台运行,这样下载文件的任务就会自动放到后台了)

A.安装

1
2
3
git clone https://github.com/franciscozorrilla/metaGEM.git
cd metaGEM
bash env_setup.sh

1.找不到env_setup.sh路径

env_setup.sh放在了metaGEM/workflow/scripts/env_setup.sh

但是env_setup.sh里面所有的文件路径是在metaGEM/workflow/下面的,所以要把env_setup.sh复制到metaGEM/workflow/下面运行

详解env_setup.sh文件(提取其中关键部分)(已安装anaconda)

1
2
3
4
5
6
7
8
conda create -n mamba mamba -c conda-forge #创建新环境下载maba
conda activate mamba #进入mamba环境
mamba env create --prefix ./envs/metagem -f envs/metaGEM_env.yml && source activate envs/metagem && pip install --user memote carveme smetana #创建metaGEM环境
mamba env create --prefix ./envs/metawrap -f envs/metaWRAP_env.yml #创建metaWRAP环境
mamba env create --prefix ./envs/prokkaroary -f envs/prokkaroary_env.yml #创建prokkaroary环境
#不重要(后面会讲到):
download-db.sh && source deactivate && source activate mamba#下载GTDB-tk database (~25 Gb)数据集(丢失download-db.sh文件无法下载)
wget https://data.ace.uq.edu.au/public/CheckM_databases/checkm_data_2015_01_16.tar.gz #下载CheckM(275MB) 数据集

因为conda install 下载速度很慢,所以脚本里使用了mamba方式进行下载。使用方法为下载mamba包,然后在此环境下进行下载,如 mamba install requests

上述文件中mamba env create为创建新环境的语句,-f后面的.yml文件为导出的conda标准环境文件,–prefix 为新创建环境的路径

2.在安装metagem时以下界面卡住

Untitled

在正常加载时,以下界面至少卡住了20h以上,因此排除网络问题

我们看一下对应的metaGEM_env.yml文件内容

该文件为conda标准创建环境的文件格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
name: metagem
channels:
- conda-forge
- bioconda
- defaults
dependencies:
- bedtools>=2.29.2
- bwa>=0.7.17
- concoct>=1.1.0
- diamond>=2.0.6
- fastp>=0.20.1
- gtdbtk>=1.4.0
- maxbin2>=2.2.7
- megahit>=1.2.9
- metabat2>=2.15
- r-base>=3.5.1
- r-gridextra>=2.2.1
- r-tidyverse
- r-tidytext
- samtools>=1.9
- snakemake>=5.10.0,<5.31.1

name指的是创建环境的名称,channels指的是下载通道,其中这个conda-forge是比较重要的一个,其是一个用于托管和发布科学计算、数据分析和机器学习的Python 包的社区项目。在conda-forge通道中,您可以找到为conda构建但尚未成为官方Anaconda发行版一部分的包。有一些Python库不能用简单的conda install安装,因为除非应用conda-forge,否则它们的通道是不可用的。根据我的经验,pip比conda更适合研究不同的通道源。例如,如果你想安装python-constraint,你可以通过pip install来安装,但是要通过cond 来安装。您必须指定通道- conda-forge

我在网上看到有人说用forge走的是外网,因此很慢导致加载卡住,因此,我把channels全部注释掉(默认没有channels项)然后测试,依然失败。

注:如果安装出现了Solving environment: failed with initial frozen solve. Retrying with flexible solve 错误

解决博客

1
2
conda update -n base conda
conda update --all

即可解决

在后面的测试中,我发现metawrap和prokkaroary的安装

Untitled

于是我们把后面的大于等于去掉在进行测试,等了一个小时也没有结果也失败了。

于是我们用土办法,创建环境然后一个一个手动输入加载

1
2
3
4
5
conda create -p ./envs/metagem python=3.10
conda info --env
conda activate /home/gc/metaGEM-master/workflow/envs/metagem
conda install -c conda-forge bedtools bwa concoct diamond fastp gtdbtk maxbin2 megahit metabat2 r-base r-gridextra r-tidyverse r-tidytext samtools snakemake=5.10.0 -y
pip install --user memote carveme smetana

或者以下脚本

因为我每次下载都会报错JASON错误,网上一查是因为缓存的问题,因此我在每一个软件包安装之后会清理缓存,暂时我对这个问题没有很好的解决方法,如果没有这个问题的同学可以删除所有conda clean -i -y 语句,当然保留也没有任何问题。其次bioconda:: 这里面的库都是用bioconda 通道下载的,因此安装时要加上这个语句,不加的话很多包安装不上去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#conda create -p ./envs/metagem python=3.10 -y
#conda activate ./envs/metagem
conda clean -i -y
conda install bioconda::bedtools -y
conda clean -i -y
conda install bioconda::bwa -y
conda clean -i -y
conda install bioconda::concoct -y
conda clean -i -y
conda install bioconda::diamond -y
conda clean -i -y
conda install bioconda::fastp -y
conda clean -i -y
conda install bioconda::gtdbtk -y
conda clean -i -y
conda install bioconda::maxbin2 -y
conda clean -i -y
conda install bioconda::megahit -y
conda clean -i -y
conda install bioconda::metabat2 -y
conda clean -i -y
conda install bioconda::r-base -y
conda clean -i -y
conda install bioconda::r-gridextra -y
conda clean -i -y
conda install bioconda::r-tidyverse -y
conda clean -i -y
conda install bioconda::r-tidytext -y
conda clean -i -y
conda install bioconda::samtools -y
conda clean -i -y
conda install bioconda::snakemake=5.10.0 -y
pip install --user memote carveme smetana

B.执行metaGEM.sh

dataset文件夹中的子目录中存放paierd-end的fastq数据,如下所示。MetGEM 将基于dataset文件夹中存在的子文件夹读取示例 ID,并将这些 ID 提供给 Snakefile 作为作业提交的通配符。

我的运行文件树如下图所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
├── colab
│ └── assemblies
├── config.yaml
├── dataset
│ ├── L1EFG190305--AM43
│ ├── L1EFG190306--AM51
│ ├── L1EFG190309_L1EFG190309--AM61
│ ├── L1EFG190324--AW1
│ ├── L1EFG190325--AW2
│ ├── L1EFG190326--AW3
│ └── L1EFG190327--AW4
├── envs
│ ├── metagem
│ ├── metaGEM_env_long.yml
│ ├── metaGEM_env.yml
│ ├── metaWRAP_env.yml
│ ├── prokkaroary
│ └── prokkaroary_env.yml
├── env_setup.sh
├── metaGEM.sh
├── rules
│ ├── kallisto2concoctTable.smk
│ ├── maxbin_single.smk
│ ├── metabat_single.smk
│ ├── Snakefile_experimental.smk.py
│ └── Snakefile_single_end.smk.py
├── scripts/
└── Snakefile

Untitled

使用fastp质量过滤reads

每个样本提交一个质量过滤工作,每个过滤工作有2个CPU和20GB 内存,最大运行时间为2小时

1
bash metaGEM.sh -t fastp -j 2 -c 2 -m 20 -h 2

1.报错找不到路径

Untitled

更改config/config.yaml 文件第一行的执行路径即可

如果还是找不到路径则在Snakefile中第一行更改config的路径

如果还是读取不到,则把config.yaml 文件复制到当前文件夹下

2.报错Error parsing number of cores (–cores, -c, -j): must be integer, empty, or ‘all’.

第一种情况snakemake版本过高,降低到5.10.0即可解决

第二种情况未执行pip install –user memote carveme smetana

3.报错找不到分析的数据

在snakefile文件中,我们可以看到第16/17行表示在dataset文件夹下,每一个文件名下面有两个同名加_R1,_R2的文件夹,因此我们要现将文件进行标准化操作,

Untitled

以下是我们的原始文件数据

Untitled

我们要把他们进行分类,并且进行改名操作,因此我写了一个自动化分类脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
dataset_path="/home/gc/bash_all/0" #标准数据的文件夹
path_name="z"
tar_path="/home/gc/metaGEM-master/workflow/dataset" #目标dataset文件夹
temp=0
for file in `ls ${dataset_path}/`
do
echo ${file}
if (($temp==0))
then
mid_temp=$file
temp=1
else
#命令执行处
#echo ${mid_temp:0:-16}
#!!!注意这里,因为我的文件里面后16个字符是固定的,需要替换成如下格式,因此我们把字符串截到16${mid_temp:0:-16},如果你的文件后缀不一样,请按照需要更改所有'16'的地方
mkdir ${tar_path}/${mid_temp:0:-16}
mv ${dataset_path}/${mid_temp:0:-16}.R1.raw.fastq.gz ${tar_path}/${mid_temp:0:-16}/${mid_temp:0:-16}_R1.fastq.gz
mv ${dataset_path}/${mid_temp:0:-16}.R2.raw.fastq.gz ${tar_path}/${mid_temp:0:-16}/${mid_temp:0:-16}_R2.fastq.gz
temp=0
fi
done

4.提交任务后,nohup.out提示sbatch: error: s_p_parse_file: unable to status file /etc/slurm-llnl/slurm.conf: No such file or directory, retrying in 1sec up to 60sec

(有的同学会提示/bin/sh: sbatch: command not found 之类的,这是没有安装slurm导致的看到有一篇文章写到需要这样安装https://www.thegeekdiary.com/sbatch-command-not-found/)

Distribution Command
Debian apt-get install slurm-client
Ubuntu apt-get install slurm-client
Kali Linux apt-get install slurm-client
Fedora dnf install slurm
OS X brew install slurm
Raspbian apt-get install slurm-client

配置slurm有问题,slurm是一个linux服务器中的集群管理和作业调度系统,是项目里很关键的一点,因此要好好学习这里的配置信息

先看看文件

1
ls -l /etc/slurm/

报错没有此文件,表明还没有安装slurm

  • 弯路(后面还有未解决的报错)

    (失败的教程)

    https://blog.csdn.net/r1141207831/article/details/125272108

    先从https://www.schedmd.com/这里下载,选择对应的版本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #编译安装前需安装gcc
    yum -y install gcc
    #接着解压安装
    tar -jxvf slurm-16.05.11.tar.bz2
    cd /root/slurm-16.05.11
    ./configure
    make
    make install
    #安装成功!

    在make和make install时出现

    Untitled

    Ld 返回的1退出状态错误是以前错误的结果。有一个更早的错误ーー对‘hdf5各种方法的未定义引用造成的,因此我猜测是linux版本与slurm版本不同造成的,因此我找了一个适用于Ubuntu20.04 的slurm安装教程

    最全slurm安装包列表如下https://src.fedoraproject.org/lookaside/extras/slurm/

    a、安装必要文件

    1
    2
    sudo su
    apt-get install make hwloc libhwloc-dev libmunge-dev libmunge2 munge mariadb-server libmysqlclient-dev -y

    b、启动启动munge服务

    1
    2
    3
    systemctl enable munge   // 设置munge开机自启动
    systemctl start munge // 启动munge服务
    systemctl status munge // 查看munge状态

    c、编译安装slurm

    1
    2
    3
    4
    5
    6
    7
    # 将slurm-21.08.6.tar.bz2源码包放置在/home/fz/package目录下
    cd /home/fz/package
    tar -jxvf slurm-21.08.6.tar.bz2
    cd slurm-21.08.6/
    ./configure --prefix=/opt/slurm/21.08.6 --sysconfdir=/opt/slurm/21.08.6/etc
    make -j16
    make install

    在make时发现缺少hdf5包

    Untitled

    我又尝试使用spack高效的包管理器安装hdf5

    https://hpc.pku.edu.cn/_book/guide/soft_env/spack.html(教程)

    但是报错如下,只能进行手动下载编译

    Untitled

    官网下载hdf5

    https://support.hdfgroup.org/ftp/HDF5/releases/

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    sudo tar -xvf hdf5-1.8.21.tar.gz #执行解压

    cd hdf5-1.8.21/ #sudo tar -xvf hdf5-1.8.21.tar.gz #执行解压
    #依次执行
    sudo ./configure --prefix=/usr/local/hdf5
    sudo make #会有很多五颜六色的警告,忽略掉,
    sudo make check
    sudo make install
    #安装成功后,在安装目录/usr/local下出现hdf5文件夹,打开后再切换到该目录下
    cd /usr/local/hdf5/share/hdf5_examples/c
    sudo ./run-c-ex.sh
    #执行命令
    sudo h5cc -o h5_extend h5_extend #如果显示错误,则安装:
    sudo apt install hdf5-helpers
    sudo apt-get install libhdf5-serial-dev
    #再执行
    sudo h5cc -o h5_extend h5_extend.c #直到执行后没有错误显示
    #执行命令
    sudo ./h5_extend
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    sudo tar -xvf hdf5-1.8.21.tar.gz #执行解压

    cd hdf5-1.8.21/ #sudo tar -xvf hdf5-1.8.21.tar.gz #执行解压
    #依次执行
    sudo ./configure --prefix=/usr/local/hdf5
    sudo make #会有很多五颜六色的警告,忽略掉,
    sudo make check
    sudo make install
    #安装成功后,在安装目录/usr/local下出现hdf5文件夹,打开后再切换到该目录下
    cd /usr/local/hdf5/share/hdf5_examples/c
    sudo ./run-c-ex.sh
    #执行命令
    sudo h5cc -o h5_extend h5_extend #如果显示错误,则安装:
    sudo apt install hdf5-helpers
    sudo apt-get install libhdf5-serial-dev
    #再执行
    sudo h5cc -o h5_extend h5_extend.c #直到执行后没有错误显示
    #执行命令
    sudo ./h5_extend

    Untitled

    装完hdf5后继续make slurm

    没有报错!!!完成安装

    Untitled

    完成安装,下面进行配置

    d、启动数据库

    后面是无限的hostname报错,我又重新找了一个教程,这个环境被污染了,如果使用另一个教程装slurm会冲突,但是这个又卸载不干净,于是重做了系统,在另一个教程上面成功了

正确的教程如下

来自https://wxyhgk.com/article%2Fubuntu-slurm(这个文章讲的太好了)

安装与配置

1
2
3
4
#安装slurm
sudo apt install slurm-wlm slurm-wlm-doc -y
#检查是否安装成功
slurmd --version

配置slurm

配置文件是放在 /etc/slurm-llnl/ 下面的,使用命令

1
sudo vi /etc/slurm-llnl/slurm.conf

填写如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
ClusterName=cool
ControlMachine=master
#ControlAddr=
#BackupController=
#BackupAddr=
#
MailProg=/usr/bin/s-nail
SlurmUser=root
#SlurmdUser=root
SlurmctldPort=6817

SlurmdPort=6818
AuthType=auth/munge
#JobCredentialPrivateKey=
#JobCredentialPublicCertificate=
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd
SwitchType=switch/none
MpiDefault=none
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
ProctrackType=proctrack/pgid
#PluginDir=
#FirstJobId=
ReturnToService=0
#MaxJobCount=
#PlugStackConfig=
#PropagatePrioProcess=
#PropagateResourceLimits=
#PropagateResourceLimitsExcept=
#Prolog=
#Epilog=
#SrunProlog=
#SrunEpilog=
#TaskProlog=
#TaskEpilog=
#TaskPlugin=
#TrackWCKey=no
#TreeWidth=50
#TmpFS=
#UsePAM=
#
# TIMERS
SlurmctldTimeout=300
SlurmdTimeout=300
InactiveLimit=0
MinJobAge=300
KillWait=30
Waittime=0
#
# SCHEDULING
SchedulerType=sched/backfill
#SchedulerAuth=
#SelectType=select/linear
#PriorityType=priority/multifactor
#PriorityDecayHalfLife=14-0
#PriorityUsageResetPeriod=14-0
#PriorityWeightFairshare=100000
#PriorityWeightAge=1000
#PriorityWeightPartition=10000
#PriorityWeightJobSize=1000
#PriorityMaxAge=1-0
#
# LOGGING

SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurm-llnl/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurm-llnl/slurmd.log
JobCompType=jobcomp/none
#JobCompLoc=
#
# ACCOUNTING
#JobAcctGatherType=jobacct_gather/linux
#JobAcctGatherFrequency=30
#
#AccountingStorageType=accounting_storage/slurmdbd
#AccountingStorageHost=
#AccountingStorageLoc=
#AccountingStoragePass=
#AccountingStorageUser=
#
# COMPUTE NODES

PartitionName=master Nodes=master Default=NO MaxTime=INFINITE State=UP
#NodeName=master State=UNKNOWN
NodeName=master Sockets=2 CoresPerSocket=16 ThreadsPerCore=1 State=UNKNOWN

上面的代码中的

ControlMachine=master

PartitionName=master Nodes=master Default=NO MaxTime=INFINITE State=UP
#NodeName=master State=UNKNOWN
NodeName=master Sockets=2 CoresPerSocket=16 ThreadsPerCore=1 State=UNKNOWN

标红标绿 的地方需要修改,这两部分是是需要修改的,其他的别动。

  • 红色部分修改

    使用 hostname 命令可以查看到你的名字,然后把你的到的名字替换上面的 master

  • 绿色部分修改

    这部分稍微有点复杂,首先来解释各个名字的意思

    Sockets 代表你服务器cpu的个数

    CoresPerSocket 代表每个cpu的核数

    ThreadsPerCore 代表是否开启超线程,如果开启了超线程就是2,没有开启就是1

    使用vi [cxc.sh](http://cxc.sh/) 写以下脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash
    cpunum=`cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l`
    echo "CPU 个数: $cpunum";
    cpuhx=`cat /proc/cpuinfo | grep "cores" | uniq | awk -F":" '{print $2}'`
    echo "CPU 核心数:$cpuhx" ;
    cpuxc=`cat /proc/cpuinfo | grep "processor" | wc -l`
    echo "CPU 线程数:$cpuxc" ;

    if [[ `expr $cpunum\*$[cpuhx*2] ` -eq $cpuxc ]];
    then
    echo "开启了超线程"
    else
    echo "未开启超线程"
    fi

    然后使用命令 bash [cxc.sh](http://cxc.sh/) 运行脚本,看看线程数是不是核心数的两倍,如果是就开启了,没有就没开启。

    完成上面的之后吧对应的数字填写上去就可以了。

完成上述所有的设置之后就能启动服务了shell

1
2
sudo systemctl enable slurmctld --now
sudo systemctl enable slurmd --now

查看slurm队列信息

1
sinfo

Untitled

如果这部分是 idle 就说明是可以的,如果不是 idle 请看这个

如果还是解决不了

比如是drain 其意思是用尽资源 解决文章

sinfo -R 报错Low socket***core***thre

那么直接把Sockets=2 CoresPerSocket=16 这两个参数减少,比如说除以2,留出一定的资源给系统使用,问题就解决了

确定目前队列里没有程序时,执行下列语句就好了(NodeName是上面设置的)

1
scontrol update NodeName=m1 State=idle

至此就已经安装完成了

到这里配置slurm就已经结束了

5.提交后sbatch: error: Batch job submission failed: No partition specified or system default partition

这个错误也是排查了好久,排查到这个文章

1
2
3
4
[username@master1 ~]# sbatch example.sh --partition computeq #Note that ordering matters here!
sbatch: error: Batch job submission failed: No partition specified or system default partition
[username@master1 ~]# sbatch --partition=computeq example.sh
Submitted batch job 114499

猜测是运行顺序错误导致的问题,于是我们到metaGEM.sh 中排查一下,核心的运行语句如下

1
echo "nohup snakemake all -j $njobs -k --cluster-config ../config/cluster_config.json -c 'sbatch  -A {cluster.account} -t {cluster.time} --mem {cluster.mem} -n {cluster.n} --ntasks {cluster.tasks} --cpus-per-task {cluster.n} --output {cluster.output}' &"|bash; break;;

可以看到在后面的sbatch里面没有关于–partition的语句,于是我们手动添加,partition后面的名字就是前面我们设置的主机名

1
--partition=你的主机名
1
sbatch --partition=的主机名 -A {cluster.account} -t {cluster.time} --mem {cluster.mem} -n {cluster.n} --ntasks {cluster.tasks} --cpus-per-task {cluster.n} --output {cluster.output}

代码中搜索sbatch 有三个地方需要添加,添加后即可正常运行

然后我们运行文章开头的语句

-j 任务数量

-c 每个任务CPU数量

-m 每个任务分配的内存大小

-h 每个任务运行的时间

注:注意CPU过大也不行

1
bash metaGEM.sh -t fastp -j 5 -c 4 -m 20 -h 20

然后我们输入squeue 查看刚才提交的任务

Untitled

到这里我们的环境配置完毕

评论