zoukankan      html  css  js  c++  java
  • 集群任务管理系统SGE的简明教程

    集群管理工具(SGE, Sun Grid Engine), 用于从登陆节点上向计算节点进行任务投递

    SGE或者其他集群管理工作做的事情就是将用户投递的任务进行排队,然后将任务交给能够运行的计算节点执行,工作流程可以分为四步:

    1. 接受用户投放的任务
    2. 在任务运行以前,将任务放到一个存储区域
    3. 发送任务到一个执行设备,并监控任务的运行
    4. 运行结束写回结果并记录运行日志

    SGE的常用命令

    任务投递

    SGE中投递任务所用到的命令是qsub. 最简单的用法是下面这种,即,将要执行的命令通过标准输入的方式传递给qsub

    echo "ls -l " | qsub
    

    投递之后可以用qstat查看自己投递的任务的运行情况,如下图

     
    任务投递情况

    第一列是任务编号, 第二列是优先级,第三列是任务名字,在参数里没有特别说明的情况下,SGE会用任务的来源进行命令,STDIN表示来自于标准输入,第四列是用户名,第五列是运行状态("r"表示运行中), 第六列表示任务投递和开始时间,第七列是任务投递的节点第8列则是要申请的线程数?。在执行完成后会在家目录下生成"STDIN.e7883"和"STDIN.o7883", 其中7883就是任务编号, 前者存放标准错误输出, 后者存放标准输出, 因此"cat STDIN.o7883"的内容就是ls -l的内容。

    另一种方法是先写一个脚本然后投递,比如先编辑一个文件"ls.sh", 内容如下,然后用"qsub ls.sh"投递任务。

    ls -l
    

    跟之前一样,最后在家目录下产生了"ls.sh.exxxx"和"ls.sh.exxxx"两个文件


    当然实际时肯定没有那么简单,我们需要增加各种参数来调整qsub的行为,qsub -help可以看完整的参数,但是常用的为如下几个

    • -q xxx : 指定要投递到的队列,如果不指定的话,SGE会在用户可使用的队列中选择一个满足要求的队列。
    • -V: 将当前的环境变量传递到执行命令的节点中
    • cwd: 在当前目录下执行任务, sge的日志会输出到当前路径。 不增加该指令,所有投递的任务都会在家目录下执行
    • -l resource=value: 请求资源数, 例如 -l vf=25G -l h=node1 就是任务的预估内存要25G(内存估计的值应稍微大于真实的内存,内存预估偏小可能会导致节点跑挂), 申请在node1上运行
    • -S /bin/bash: 表示在bash环境下执行命令。默认tcsh.

    shell 是一种命令行程序, linux 用户可以通过 shell 与操作系统内核进行交互

    shell 分为好几种:sh,bash,csh,tcsh, 其中 tcsh 是 csh 的增强版,常用的两种 shell 就是 bash 和 tcsh。

    一般linux 默认shell 是 bash,但是IC公司用的较多的是 tcsh,二者的语法和内建命令相差较大,关于bash,网上资料非常多,这里主要记录 tcsh 的语法和基本命令。

    • -pe openmpi 4: 表示使用openmpi进行并行运算,且申请的线程是4,
    • -N 任务名: 手动执行任务的名字
    • -j y|n :是否将标准输入和标准输入合并成一个文件
    • -sync y|n: 是否等待任务结束,返回退出码
    • -o path: 指定标准输出的文件夹

    那么接下来就可以添加这些参数运行一些命令了,例如在命令行里投递一个比对任务

    echo "bowtie2 -p 8 -x index/ref -1 data/A_1.fq -2 data/A_2.fq | samtools sort > A.bam" | qsub -V -cwd -l vf=25G -S /bin/bash -pe openmpi 8 -N A.bt2
    

    这些参数除了在外部设置外,还可以在shell脚本里设置,如下

    #!/bin/bash
    #$ -S /bin/bash
    #$ -V
    #$ -cwd
    #$ -l vf=25G
    #$ -pe openmpi 8
    #$ -N a.bt2
    bowtie2 -p 8 -x index/ref -1 data/A_1.fq -2 data/A_2.fq | samtools sort > A.bam
    

      


    查询任务

    除了任务投递外,查询任务也是一个非常常用的命令,除了刚才直接用qstat查看,还有如下参数比较好用

    qstat -f        # 查看用户任务
    qstat -j jobId  # 按任务id查看
    qstat -explain a|c|A|E -j jobID # 查看任务任务并给出解释
    qstat -u user   # 按用户查看
    

    任务状态:

    • qw: 表示等待状态
    • hqw: 任务挂起等待中,待依赖的任务完成后执行
    • Eqw: 投递任务出错
    • r: 表示任务正在运行
    • s: 暂时挂起
    • dr: 节点挂了之后,删除任务就会出现这个状态,只有节点重启之后,任务才会消失

    删除任务

    任务删除也比较重要,毕竟偶尔会出现任务投递出错的情况

    qdel -j 1111   删除任务号为1111的任务
    

    其他命令

    • qrsh:与qsub相比,是交互式的投递任务,注意参数:-now yes|no默认设置为yes
      • 若设置为yes,立即调度作业,如果没有可用资源,则拒绝作业,任务投递失败,任务状态为Eqw。
      • 若设置为no,调度时如果没有可用资源,则将作业排入队列,等待调度。
      • 例子: qrsh -l vf=*G -q all.q -now no -w n *sh
    • qacct 从集群日志中抽取任意账户信息
    • qalter 更改已提交但正处于暂挂状态的作业的属性
    • qconf 为集群和队列配置提供用户界面
      • qconf -spl查看可用并行环境
    • qhold 阻止已提交作业的执行
    • qhost 显示SGE执行主机(即各个计算节点)的状态信息
      • qhost -j按照节点显示任务
      • qhost -F展示每个节点的资源
    • qlogin 启动telnet或类似的登录会话。
    Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

    案例:一个投递比对任务的简单脚本

    
    #!/bin/bash
    
    set -e
    set -u
    set -o pipefail
    
    threads=8
    index=index/hg19
    
    FQ_DIR="analysis/0-raw-data"
    ALIGN_DIR="analysis/2-read-align"
    LOG_DIR="analysis/log"
    TMP_DIR="analysis/tmp"
    
    mkdir -p ${ALIGN_DIR}
    mkdir -p ${LOG_DIR}
    mkdir -p ${TMP_DIR}
    
    tail -n+2 download_table.txt | cut -f 6 | while read id;
    do
        echo "
        bowtie2 --very-sensitive-local --mm -p $threads -x $index -U ${FQ_DIR}/$id.fastq.gz 2> ${LOG_DIR}/$id.bt2.log | 
        samtools sort -@ 2 -m 1G -T ${TMP_DIR}/${id} -o ${ALIGN_DIR}/${id}.sort.bam" | qsub -V -cwd -pe openmpi $threads -N ${id}_bt2 -q all.q -S /bin/bash
    done
    

    来源:
    https://baike.baidu.com/item/Telnet/810597?fr=aladdin

  • 相关阅读:
    scrum第二阶段项目冲刺04
    scrum第二阶段项目冲刺03
    scrum第二阶段项目冲刺02
    scrum第二阶段项目冲刺01
    团队项目02——疫情数据分析
    scrum第二阶段项目冲刺
    现阶段本组app与咸鱼的对比
    团队项目第一阶段成果——意见改进
    团队项目第一阶段成果——意见汇总
    文件的合并与分割
  • 原文地址:https://www.cnblogs.com/bio-mary/p/13225149.html
Copyright © 2011-2022 走看看