runjob使用文档说明

目录:

软件介绍

软件说明

runjob是一款python语言编写的用于多任务管理和编排的软件,可用于在linux主机上管理本地服务器SGE集群阿里云BatchCompute环境中运行的任务。提供了一种方便高效的任务管理和资源控制方式,能实时的监控和反馈任务状态,并对任务定制化管理,整合了生物信息分析应用场景和需求,更能方便生信人员进行任务的运行和管理。软件运行占用的cpu和内存资源约为0 ~ 0.1%

runjob最新版本为v2.10.2,总共包含5个命令工具:

  • runbatch : 提供了shell命令任务运行工具,支持本地服务器SGE集群阿里云BatchCompute环境运行。

  • runsge : 命令功能和runbatch一样,为早期版本使用的命令。

  • runjob : 提供了以job文件形式定义的任务和任务依赖关系之后的运行方式,支持支持本地服务器SGE集群运行环境。

  • qs : 提供了简易的本地服务器SGE集群运行环境的任务查看功能。

  • qcs : 提供了阿里云BatchCompute环境的任务查看、删除功能。

runbatchqcs命令管理在阿里云BatchCompute环境任务,runsgerunjobqs命令管理在本地服务器SGE集群运行环境任务。

软件特性

runjob为每个任务创建了一个任务对象,在内部维护了一个运行时任务队列,并根据用户定义的任务依赖关系,创建出任务依赖的有向无环图DAG(Directed acyclic graph)对象。可灵活控制并行运行的任务量,并及时根据任务依赖关系运行新的任务。

主要特性
  • 支持本地任务、SGE集群任务、阿里云BatchCompute任务的管理。

  • 每个任务都唯一对应一个日志文件,记录着任务的全部输出和任务运行状态。

  • 任务运行失败时可以选择是否将任务重新提交到任务队列。

  • 程序中断时重新运行,会自动跳过运行成功的任务,只运行失败或还未运行的任务。

  • 程序被kill或者终止的情况,会自动清理由程序创建出来的任务,避免计算资源的浪费。

  • 在shell脚本中的任务也支持为每行命令定义运行时使用的cpu和内存资源。

  • 支持通过参数选择只想要运行的部分任务而不是全部任务,部分运行的任务也能自动跳过已经运行成功的任务。

  • 支持自定义任务运行前或任务运行结束后的initcall_back功能。

  • ……

主要模块对象
  • class JobQueue()

    封装了运行中的任务队列,用于控制和记录任务运行。

  • class Job()

    封装了提交任务的对象,记录着任务的命令、依赖关系、资源、状态等信息,提供了任务检查,任务输出等方法。

  • class ShellJob()

    类似于Job对象,提供了shell脚本中每行命令的任务对象的解析和封装。

  • class Jobfile()/Shellfile()

    封装了任务文件输入的对象,提供了用户输入任务的相关属性和方法。

  • class DAG()

    封装了任务依赖的对象,记录着Job对象的依赖关系和依赖处理方法。

  • class Config()

    封装了配置文件和参数相关的对象,用于参数和配置文件的解析和输出。

  • class qsub()

    封装了本地任务或SGE集群任务的处理对象,提供了任务检查,投递,状态监控,日志输出,异常处理相关方法。

  • class RunSge()

    封装了本地任务、SGE集群任务、阿里云BatchCompute任务的处理对象,提供了任务检查,投递,状态监控,日志输出,异常处理相关方法。

  • class Cluster()

    封装了阿里云BatchCompute任务管理对象,提供了阿里云连接,集群创建,任务添加等相关方法。

  • class Task()

    封装了阿里云任务对象,提供了云主机实例选取,任务提交,OSS挂载等相关方法。

软件安装

runjob安装通过pip安装即可,可从github下载源码,使用pip install进行安装,兼容python2python3

git clone https://github.com/yodeng/runjob.git
pip install ./runjob/

或者:

git clone https://github.com/yodeng/runjob.git
cd ./runjob
python setup.py install

安装时会自动下载安装相关软件依赖包,安装后使用runjob --version命令查看当前版本,最新版本为v2.10.2

软件依赖

runjob使用python语言编写,支持python2python3,推荐版本为python >=2.7.10, <3.10

依赖的第三方python模块包有:

  • psutil

  • batchcompute

  • configparser

  • prettytable

使用pip install进行安装时,会自动下载和安装相关依赖包。

软件使用

runbatch阿里云批量计算

runbatch是将计算任务投递到本地服务器,SGE集群,阿里云批量计算云主机上运行的API,可用于本地计算资源不足的情况下,利用云计算资源来进行任务分析。使用的是阿里云BatchComputer大规模并行批处理作业的分布式云服务,利用batchcompute接口,runbatch自行管理任务并发和依赖、计算资源申请、作业调度。数据持久化采用的OSS对象存储。

runbatch参数配置

输入命令runbatch --help可查看参数配置,各参数介绍如下:

参数 描述
-h/--help 打印帮助信息并退出
-q/--queue 使用SGE集群运行任务时指定的节点队列名,默认["all.q"]
-m/--memory 任务使用的内存资源申请,默认1,单位G
-c/--cpu 任务使用的cpu资源申请,默认1个cpu
-wd/--workdir 任务提交时的工作目录,默认为当前目录
-N/--jobname 任务提交的任务名称,默认为"job"+当前pid号
-lg/--logdir 任务运行时,各任务的日志输出文件夹。
-om/--out-maping 使用batchcompute云服务时可用,若需要将输出结果保存,须指定保存的OSS路径
-n/--num 允许同时运行的最大任务数,默认为全部任务
-s/--startline shell脚本中,从第几行开始运行,默认第0行
-e/--endline shell脚本中,从第几行开始运行,默认最后一行
-g/--groups shell脚本中,指定行数为一个组,作为一个单独的任务,默认1行
-d/--debug 程序输出日志级别debug,默认info级别
-l/--log 程序输出日志文件,默认屏幕输出
-r/--retry 任务运行失败之后,重新投递次数,默认0,即不进行重投
--init 所有任务开始之前运行的命令。若有命令,则命令需要用引号引用。init命令默认强制本地运行
--call-back 所有任务结束之后运行的命令。若有命令,则命令需要用引号引用。call-back命令默认强制本地运行
--mode 指定任务运行方式,可选[sge,local,localhost,batchcompute],默认为sge投递。batchcompute代表阿里云上投递,local和localhost代表本地运行,sge代表SGE集群运行
--access-key-id OSS访问id,当使用阿里云投递时使用,若不传入该参数,会从配置文件中读取,传入时,会覆盖配置文件中的指定
--access-key-secret OSS访问密钥,当使用阿里云投递时使用,若不传入该参数,会从配置文件中读取,传入时,会覆盖配置文件中的指定
--region 当使用阿里云投递时,指定的云主机所在区域,默认BEIJING
-ivs/--retry-ivs 任务错误后,重投的等待时间,单位秒,默认2秒
-ini/--ini 程序运行的配置文件,当使用阿里云投递时,可以传入指定配置文件。默认配置文件路径为:$HOME/.runjobconfig或软件安装路径下的runjobconfig文件,默认路径可通过runbatch -config查看
-config/--config 打印配置文件和参数信息并退出
--strict 强拆退出模式,一旦有一个任务运行错误,则销毁全部正在运行的任务,并退出程序
-v/--version 打印当前软件版本并退出
-j/--jobfile 指定需要运行的shell脚本文件,脚本中每一行命令即作为一个任务投递
shell任务格式

runbatch批量投递任务,会将shell脚本中的每一行命令作为一个任务并行投递到计算资源中。

shell脚本格式如下:

echo hello // -c 1 -m 1 --mode sge -q all.q
echo word
wait
echo end
  • 每一行会作为一个任务进行投递,每个任务支持任务资源限定,不限定资源则使用参数传入的资源。

  • wait会阻塞当前任务投递过程,同时参数--num也会限定当前最大运行的任务数。

  • 需要注释的行可使用"#"

任务使用资源
  • shell任务通过参数--cpu--memory限定程序运行的资源申请。

  • 脚本中每行任务也可以通过//符号来表示本任务的资源申请,后面可以添加该行任务的参数选项,用以覆盖runbatch参数配置中的部分选项,方便更精细的设置任务运行参数,可添加的参数如下表所示,错误的参数则无法被识别到。

参数 描述
-m/--memory 该行任务申请使用的内存资源,在sge模式和batchcomputer模式下生效。
-c/--cpu 该行任务申请使用的cpu资源,在sge模式和batchcomputer模式下生效。
-q/--queue 该行任务可投递的SGE集群节点队列,多个队列用空白隔开,只在sge模式下生效。
-n/--jobname 该行任务投递的任务名称,在sge模式和batchcomputer模式下生效,不要以数字开头。
-om/--out-maping 该行任务投递时,需要保存的数据OSS路径,只在batchcompute下生效。
--mode 该行任务运行的方式,可选的有["sge", "local", "localhost", "batchcompute"]
  • localhost运行的任务不需要指定运行资源。

  • 阿里云计算模式时,会根据指定资源自动选取合适的实例云主机。

  • runbatch主程序中断或被kill掉时,会自动清空正在运行的任务,避免计算资源浪费产生多余的计算费用

任务依赖关系
  • shell任务支持简单的任务依赖,每条任务独立进行运行,没有依赖。

  • 对于有依赖关系的任务,可以通过wait关键字进行任务依赖限定,当碰到单行的wait时,会阻塞任务投递过程,等待任务全部运行完成之后才会投递后面行的任务。

callback和init
  • runbatch支持任务初始化init和任务完成之后的call_back。命令通过--init "cmd1"--call-back "cmd2",执行的命令需要用“”,若多行命令可写到shell脚本中通过"sh /path/your/scripts.sh"传入。

  • init任务和call_back任务都是localhost本地运行,使用本机环境变量和路径。

  • call_back可用于任务分析完成之后结果汇总,回传,或者结果发送等应用场景,在任务分析完成之后主动发送结果,不需要额外单独开发被动轮询接口。

runsge集群和本地任务

runsgerunbatch的副本命令,和runbatch一样的配置和使用,参数和帮助可直接参照runbatch阿里云批量计算,通常对于集群和本地任务管理用runsge命令,对于阿里云批量计算任务用runbatch命令。

runsge参数配置

输入命令runsge --help可查看参数配置,各参数介绍如下:

参数 描述
-h/--help 打印帮助信息并退出
-q/--queue 使用SGE集群运行任务时指定的节点队列名,默认["all.q"]
-m/--memory 任务使用的内存资源申请,默认1,单位G
-c/--cpu 任务使用的cpu资源申请,默认1个cpu
-wd/--workdir 任务提交时的工作目录,默认为当前目录
-N/--jobname 任务提交的任务名称,默认为"job"+当前pid号
-lg/--logdir 任务运行时,各任务的日志输出文件夹。
-om/--out-maping 使用batchcompute云服务时可用,若需要将输出结果保存,须指定保存的OSS路径
-n/--num 允许同时运行的最大任务数,默认为1000
-s/--startline shell脚本中,从第几行开始运行,默认第0行
-e/--endline shell脚本中,从第几行开始运行,默认最后一行
-g/--groups shell脚本中,指定行数为一个组,作为一个单独的任务,默认1行
-d/--debug 程序输出日志级别debug,默认info级别
-l/--log 程序输出日志文件,默认屏幕输出
-r/--retry 任务运行失败之后,重新投递次数,默认0,即不进行重投
--init 所有任务开始之前运行的命令。若有命令,则命令需要用引号引用。init命令默认强制本地运行
--call-back 所有任务结束之后运行的命令。若有命令,则命令需要用引号引用。call-back命令默认强制本地运行
--mode 指定任务运行方式,可选[sge,local,localhost,batchcompute],默认为sge投递。batchcompute代表阿里云上投递,local和localhost代表本地运行,sge代表SGE集群运行
--access-key-id OSS访问id,当使用阿里云投递时使用,若不传入该参数,会从配置文件中读取,传入时,会覆盖配置文件中的指定
--access-key-secret OSS访问密钥,当使用阿里云投递时使用,若不传入该参数,会从配置文件中读取,传入时,会覆盖配置文件中的指定
--region 当使用阿里云投递时,指定的云主机所在区域,默认BEIJING
-ivs/--retry-ivs 任务错误后,重投的等待时间,单位秒,默认2秒
-ini/--ini 程序运行的配置文件,当使用阿里云投递时,可以传入指定配置文件。默认配置文件路径为:$HOME/.runjobconfig或软件安装路径下的runjobconfig文件,默认路径可通过runbatch -config查看
-config/--config 打印配置文件和参数信息并退出
--strict 强拆退出模式,一旦有一个任务运行错误,则销毁全部正在运行的任务,并退出程序
-v/--version 打印当前软件版本并退出
-j/--jobfile 指定需要运行的shell脚本文件,脚本中每一行命令即作为一个任务投递
shell任务格式

runsge批量投递任务,会将shell脚本中的每一行命令作为一个任务并行投递到计算资源中。

shell脚本格式如下:

echo hello // -c 1 -m 1 --mode sge -q all.q
echo word
wait
echo end
  • 每一行会作为一个任务进行投递,每个任务支持任务资源限定,不限定资源则使用参数传入的资源。

  • wait会阻塞当前任务投递过程,同时参数--num也会限定当前最大运行的任务数。

  • 需要注释的行可使用"#"

任务使用资源
  • shell任务通过参数--cpu--memory限定程序运行的资源申请。

  • 脚本中每行任务也可以通过//符号来表示本任务的资源申请,后面可以添加该行任务的参数选项,用以覆盖runsge参数配置中的部分选项,方便更精细的设置任务运行参数,可添加的参数如下表所示,错误的参数则无法被识别到。

参数 描述
-m/--memory 该行任务申请使用的内存资源,在sge模式和batchcomputer模式下生效。
-c/--cpu 该行任务申请使用的cpu资源,在sge模式和batchcomputer模式下生效。
-q/--queue 该行任务可投递的SGE集群节点队列,多个队列用空白隔开,只在sge模式下生效。
-n/--jobname 该行任务投递的任务名称,在sge模式和batchcomputer模式下生效,不要以数字开头。
-om/--out-maping 该行任务投递时,需要保存的数据OSS路径,只在batchcompute下生效。
--mode 该行任务运行的方式,可选的有["sge", "local", "localhost", "batchcompute"]
  • localhost运行的任务不需要指定运行资源。

  • 阿里云计算模式时,会根据指定资源自动选取合适的实例云主机。

任务依赖关系
  • shell任务支持简单的任务依赖,每条任务独立进行运行,没有依赖。

  • 对于有依赖关系的任务,可以通过wait关键字进行任务依赖限定,当碰到单行的wait时,会阻塞任务投递过程,等待任务全部运行完成之后才会投递后面行的任务。

callback和init
  • runsge支持任务初始化init和任务完成之后的call_back。命令通过--init "cmd1"--call-back "cmd2",执行的命令需要用“”,若多行命令可写到shell脚本中通过"sh /path/your/scripts.sh"传入。

  • init任务和call_back任务都是localhost本地运行,使用本机环境变量和路径。

  • call_back可用于任务分析完成之后结果汇总,回传,或者结果发送等应用场景,在任务分析完成之后主动发送结果,不需要额外单独开发被动轮询接口。

runjob任务调度

runjob是早期开发的用于SGE集群和本地任务投递、调度、监控的API。用于管理类似于sjm任务格式的job任务,基于python语言实现了其功能,完全兼容sjm的job输入文件,并结合实际生物信息应用场景,做了很多使用优化。

由于job文件格式简单且容易理解,因此在生信流程管理运行中也比较常用。runjob读取job输入文件,根据文件中指定的job格式规则,将任务分发到本地服务器或sge集群运行。

主要特点
  • 每个任务对应一个唯一的日志文件,记录了任务运行的输出和状态。

  • 实时的任务日志和状态监控记录,维护了动态的运行时的任务队列。

  • 某个任务失败报错可重新投递运行。

  • 程序运行中断,重新执行只需要和第一次运行的命令一样即可,不需要进行改动。

  • 每次程序运行会自动跳过已经运行成功的任务。

  • 程序中断或被杀掉时,可以自动清理正在运行中的任务,避免计算资源的浪费和流程运行步骤的不确定。

  • 可实时查看当前流程运行到那些步骤以及其运行状态,掌握任务进度。

  • 支持只运行job文件中指定任务名匹配的任务,能快速识别和根据依赖关系自动投递指定任务。

  • ……

参数说明

输入命令runjob --help可查看参数配置,各参数介绍如下:

参数 描述
-h/--help 打印帮助信息并退出
-n/--num 同时运作的最大任务数,默认 1000
-j/--jobfile 输入的job流程任务文件
-i/--injname 只运行job文件中匹配任务名的任务,多个匹配用空白隔开,默认全部任务
-s/--start 只运行job文件中从指定行开始后面的任务,默认第0行
-e/--end 只运行job文件中从指定行之前的任务,默认最后一行
-r/--retry 某个任务运行失败会自动重新投递任务,默认投递3次。
-ivs/--retry-ivs 任务错误后,重投的等待时间,单位秒,默认2秒
-m/--mode 任务运行在本地还是在SGE集群,可选则sge,local,localhost,非集群环境自动进行本地运行。目前只支持sge和本地,后续可能会更新增加阿里云运行
-nc/--noclean 流程中断退出或被杀掉时,选择是否情况投递上和正在运行的任务,默认自动清理。
--strict 当流程中有一个任务重投运行--retry次数依然报错的时候,不再进行后续任务投递
-d/--debug 程序运行日志级别debug,默认info
-l/--log 程序运行时输出的日志文件,默认屏幕输出
-v/--version 打印软件版本并退出
job输入文件格式说明

runjob输入的job文件格式和sjm兼容,格式规范如下:

log_dir /path/to/logdir

job_begin
    name jobA
    host localhost
    sched_options -q all.q -l vf=1g,p=1
    cmd_begin
        echo hello from job jobA
    cmd_end
job_end

job_begin
    name jobB
    sched_options -q all.q -l vf=1g,p=1
    cmd_begin
        echo hello from job jobB
    cmd_end
job_end

job_begin
    name jobC
    sched_options -q all.q -l vf=1g,p=1
    cmd_begin
        echo hello from job jobC
    cmd_end
job_end

...

order jobC after jobA jobB
# order jobB after jobA
# order jobC after jobA
# order jobA before jobC
  • log_dir指定流程运行的任务输出日志文件夹

  • job_beginjob_end代表了一个任务的开始和结束

  • name定义任务的名字

  • host指定任务运行的方式,本地运行或是sge投递,默认由–mode参数指定

  • sched_options定义sge运行的任务qsub投递参数,本地运行模式下无效

  • cmd_begincmd_end指定任务的运行的命令

  • order ... after ...定义了任务的依赖关系,多个依赖,任务名空白隔开即可

  • order ... before ...表示后面任务依赖前面任务

  • #开头为注释

流程进度查看

任务状态和任务运行进度可以通过查看输出日志文件或者通过qs命令进行查看,可参考qs集群和本地任务查看

qs集群和本地任务查看

qs命令用于快速查看由runjobrunbatch投递管理的任务状态,主要有4种查看用法。

直接查看

直接输出qs命令,可查看当前SGE集群或本地服务器各用户分别运行的任务数。

qs1

SGE集群环境下,输出集群中个用户运行的任务数,jobs表示总任务数,run表示正在运行中的任务,queue表示排队中的任务数。

qs2

非SGE集群环境,则会统计当前服务器中各用户的相关进程数。process表示总进程数,R表示处在run状态的进程数,S表示处在sleep状态的进程数,D表示dead状态的进程数,Z表示zombie状态的进程,RES表示用户使用的总的实际内存,VIRT表示用户使用的总的虚拟内存。

日志文件查看

qs命令传入runjobrunbatch输出的日志文件,即可分析该日志文件中全部任务的任务状态。

qs3

日志文件夹查看

qs命令传入runjobrunbatch输出的文件夹,即可分析该日志文件夹中全部任务的任务状态。

qs4

任务文件查看

qs命令传入runjob的流程job文件,即可查看该流程中全部任务的运行状态

qs5

qcs阿里云任务管理

qcs命令是用于查看和删除runbatch/runsge投递到阿里云上任务的API。通过阿里云batchcompute接口连接阿里云资源并查看相关信息。支持用户区分,能查看不同用户的阿里云任务,但只能删除本用户的任务。

参数介绍

输入命令qcs --help可查看参数配置,各参数介绍如下:

参数 描述
-h/--help 打印帮助信息并退出
-t/--top 显示当前用户的前多少个任务,默认前10个任务
-a/--all 显示当前用户的全部阿里云任务
-n/--name 根据任务名过滤显示任务
-u/--user 显示指定用户名的任务,默认当前用户名
-r/--region 阿里云连接的区域,默认北京
-d/--delete 删除指定任务id的任务,只能删除当前用户的任务
-j/--job 打印指定任务id的详细任务信息
--access-key-id 连接阿里云使用的访问id,若不传入该参数,会从配置文件中读取,传入时,会覆盖配置文件中的指定
--access-key-secret 连接阿里云使用的密钥,若不传入该参数,会从配置文件中读取,传入时,会覆盖配置文件中的指定
-ini/--ini 程序运行的配置文件,默认配置文件路径为:$HOME/.runjobconfig或软件安装路径下的runjobconfig文件,默认路径可通过runbatch -config查看
-config/--config 打印配置文件和参数信息并退出
-v/--version 打印当前软件版本并退出
使用说明
  • runbatch任务投递到阿里云服务器上运行时,会自动加上用户名信息,qcs利用任务的用户名信息区分不同用户的任务

  • 删除阿里云任务时,请确认是否确定删除。

  • 使用前须准备好配置文件$HOME/.runjobconfig,配置文件说明可参考配置文件说明

任务查看结果说明

输入qcs命令即可查看当前阿里云计算任务

qcs1

第一列表示用户名

第二列表示任务id

第三列表示任务名,为runbatch投递任务时指定的任务名

第四列表示任务创建时间

第五列表示任务开始运行时间

第六列表示任务运行结束时间

第七列表示任务运行时间

第八列表示任务运行状态,可能的状态有waiting/running/stopped/failed/finished

可通过qcs -j加任务id,查看某个任务的详细信息。

配置参数

配置参数说明

runjob对相关阿里云使用配置做了简化,当使用阿里云相关命令runbatch/qcs时,需要配置参数文件,可用配置参数如下:

[Cluster]
ImageId = img-ubuntu
InstanceType = 
system_disk = 
CidrBlock = 
VpcId = 

[Task]
timeout = 10800
stdoutlog = 
stderrlog = 
DOCKER_IMAGE = 
DOCKER_REGISTRY_OSS_PATH = 

[OSS]
ossSrc = 
mountPath = 
access_key_id = 
access_key_secret =

Cluster集群相关配置

  • ImageId : 使用的阿里云镜像,默认img-ubuntu,若使用自定义镜像,可咨询管理员。若使用docker环境,则用默认镜像即可

  • InstanceType : 使用的阿里云实例主机,runbatch会自动根据申请的内存和cpu资源选择合适主机,可以不填。

  • system_disk : 使用的阿里云实例主机对应的系统盘大小,默认40,单位为G。若使用docker环境,则可以不填

  • CidrBlock : 使用的vpn网段, 当实例主机需要进行网络数据传输时,可以传入。通常可以不填

  • VpcId : 使用的vpn网络id,当实例主机需要进行网络数据传输时,可以传入。通常可以不填

Task任务相关配置

  • timeout : 云主机任务运行最大时间,单位秒,超时则任务会返回错误,默认设置10800

  • stdoutlog :任务运行的标准输出保存位置,可传入一个oss路径文件夹,例如: oss://xxxx/xxx/logs/stdout/

  • stderrlog : 任务运行的标准错误输出保存位置,可传入一个oss路径文件夹,例如: oss://xxxx/xxx/logs/stderr/

  • DOCKER_IMAGE : 任务运行使用的docker镜像,必须以localhost开头,如使用docker镜像运行任务,则必须填写

  • DOCKER_REGISTRY_OSS_PATH : 任务运行使用的docker镜像对应的oss本地docker仓库地址,如使用docker镜像运行任务,则必须填写

  • docker镜像制作后须修改taglocalhost:5000/${imageid}:${version}

  • docker镜像须上传到OSS镜像仓库

OSS对象存储相关配置

  • ossSrc : OSS存储bucket,例如: oss://xxxx/

  • mountPath : OSS存储挂载的本地路径, 例如: /share/oss/

  • access_key_id : OSS存储的访问ID

  • access_key_secret : OSS存储的访问密钥

参数和配置文件查看

runbatchqcs命令都使用了配置文件,可以通过--config打印和查看程序运行导入的参数文件路径和各参数的配置值。 配置文件还可以通过命令参数-ini/--ini传入,会优先查找参数配置文件,然后查找$HOME/.runjobconfig,最后查找安装目录下的runjobconfig文件。

使用示例

runbatch阿里云批量计算使用示例

分别基于阿里云实例自定义镜像和集运docker镜像进行说明

1. 基于阿里云实例镜像运行
1.1. 镜像构建

镜像构建须联系管理员,分配一台阿里云主机,在该主机上部署相关软件流程环境,并创建镜像。

1.2. 配置文件和任务执行
1.2.1 在集群上安装好runjob软件,配置好$HOME/.runjob.config配置文件,示例如下
[Cluster]
ImageId = img-ubuntu
InstanceType = 
system_disk = 
CidrBlock = 
VpcId = 


[Task]
timeout = 10800
stdoutlog = oss://xxxx/xxxx/logs/stdout/
stderrlog = oss://xxxx/xxx/logs/stderr/
DOCKER_IMAGE = 
DOCKER_REGISTRY_OSS_PATH = 


[OSS]
ossSrc = oss://xxxx/
mountPath = /share/oss/
access_key_id = xxxxx
access_key_secret = xxxxx
  • 配置文件中xxxx位置根据实际情况添加,本例中oss假设挂载到阿里云主机中的/share/oss/目录下,若分析流程中使用的数据库或者测试数据,也需要先上传到OSS的/share/oss/xxx/xxx的某个路径中

1.2.2 任务运行

例如有一个任务:

现有一个数据库文件,存放在/share/oss/dengyong/mytest.txt

需要在集群上运行任务,要求将数据文件中的内容读取出来,并写入到/share/oss/dengyong/output/out.mytext文件中

然后将/share/oss/dengyong/output/out.mytext该文件从oss上拷贝到本地主机

则集群上的/home/dengyong/test/test.sh脚本中内容为:

mkdir -p /share/oss/dengyong/output/   // -m 1 -c 1
wait
cat /share/oss/dengyong/mytest.txt > /share/oss/dengyong/output/out.mytext   // -m 1 -c 1 -om /share/oss/dengyong/output/

当前目录为/home/dengyong/test/使用命令如下:

runbatch -j test.sh --mode batchcompute --call-back "ossutil64 cp oss://xxxx/dengyong/output/out.mytext /home/dengyong/test/"

即可将任务投递到阿里云上,等待任务运行完成之后,会在OSS存储上生成一个/share/oss/dengyong/output/out.mytext文件,如果需要的话,使用

--call-back参数,通过ossutil64命令将OSS上的数据拷贝到本地服务器。

注:

  • 必须使用 -om参数,确保阿里云服务器程序运行完成之后,将数据回传到指定的OSS目录,该目录下的全部文件才能被持久化写入到OSS存储中

  • /home/dengyong/test/test.sh本实例中会投递两个任务,通过wait关键字定义依赖,先创建出文件夹,然后将数据重定向到输出文件。第二个任务中指定了-om,即保存到OSS上数据的路径。

  • /home/dengyong/test/test.sh也可以直接一行命令mkdir -p /share/oss/dengyong/output/ &&  cat /share/oss/dengyong/mytest.txt > /share/oss/dengyong/output/out.mytext // -m 1 -c 1 --om /share/oss/dengyong/output/

  • 每行命令中指定的//后面的参数也可以通过runbatch -m 1 -c 1 --om /share/oss/dengyong/output/传入

2. 基于docker镜像运行

由于使用阿里云服务器的场景通常是大量计算和流程分析。流程环境复杂,需要通过本地部署和安装流程环境,docker作为一种通用虚拟的环境封装形式,是十分适用的场景。

2.1. 镜像构建

环境部署可直接在本地docker虚拟机中进行,需要部署环境时,可以联系我开放账户和密码远程连接到北京集群的虚拟主机中,进行环境部署和部署测试。

测试完成后将虚拟主机打包成docker镜像,并上传到OSS私有仓库中,北京集群也已搭建了OSS的私有docker仓库,可通过docker push命令将镜像上传。

上传后需要在配置文件中添加DOCKER_IMAGE = DOCKER_REGISTRY_OSS_PATH = ,或者单独添加一个参数配置文件,通过runbatch --ini参数将配置文件传入

2.2. 配置文件和任务执行
2.2.1 在集群上安装好runjob软件,配置好$HOME/.runjob.config配置文件,示例如下
[Cluster]
ImageId = img-ubuntu
InstanceType = 
system_disk = 
CidrBlock = 
VpcId = 


[Task]
timeout = 10800
stdoutlog = oss://xxxx/xxxx/logs/stdout/
stderrlog = oss://xxxx/xxx/logs/stderr/
DOCKER_IMAGE = localhost:5000/testimage:latest
DOCKER_REGISTRY_OSS_PATH = oss://xxxx/dengyong/dockers


[OSS]
ossSrc = oss://xxxx/
mountPath = /share/oss/
access_key_id = xxxxx
access_key_secret = xxxxx
  • 配置文件中xxxx位置根据实际情况添加,本例中oss假设挂载到阿里云主机中的/share/oss/目录下,若分析流程中使用的数据库或者测试数据,也需要先上传到OSS的/share/oss/xxx/xxx的某个路径中。

  • 须填写上传到OSS仓库中的docker镜像名和镜像路径。

  • 使用docker镜像运行时,ClusterImageId填写默认的img-ubuntu即可。

2.2.2 任务运行

上述配置完成后,任务运行和投递和1.2.2中一致

runsge本地和SGE任务使用示例

runsge任务投递到SGE集群和在本地运行基本一样,只是改变运行参数为localhost即可,投递任务并行运行,通过参数控制同时运行的最大任务数,使用也不需要配置文件。

1. 使用示例

准备shell文件,文件中的每行命令会作为一个任务投递到计算资源中,示例如下:

echo hello
echo runjob
wait
sleep 30 // -m 1 --cpu 1 --mode localhost

使用命令runsge -j test.sh -m sge -l test.log  即可将任务投递到计算资源中。

2. 使用说明
  • 上述示例中第一行和第二行两个任务并发到SGE集群运行,第四行任务会等待第一、二行任务运行完成之后进行投递,由于后面参数指定了--mode localhost, 第四行任务会在本地运行。

  • 运行过程中可以通过查看test.log文件查看任务运行情况,或者通过qs test.log命令统计任务运行状态

  • runsge命令可以后台nohup挂起,避免意外中断.

  • 终止runsge进程,会中断投递,同时清空正在运行中的任务。

  • runsge支持--init--call-back,用于在任务运行前或运行完成后执行相关,在本地执行相关命令。

  • 使用runsge -m local命令即可将任务投递到本地服务器运行

runjob本地和SGE任务使用示例

runjob是job格式的任务文件投递到SGE或本地运行的命令

1. 使用示例

准备job任务文件,文件中的每个任务会根据依赖关系投递到计算资源中

log_dir /path/to/logdir

job_begin
    name jobA    
    sched_options -q all.q -l vf=1g,p=1
    cmd_begin
        echo hello from job jobA
    cmd_end
job_end

job_begin
    name jobB
    sched_options -q all.q -l vf=1g,p=1
    cmd_begin
        echo hello from job jobB
    cmd_end
job_end

job_begin
    name jobC
    host localhost
    sched_options -q all.q -l vf=1g,p=1
    cmd_begin
        echo hello from job jobC
    cmd_end
job_end


order jobC after jobA jobB

使用命令runjob -j test.job -m sge -l test.log 即可将任务投递到计算资源中。

2. 使用说明
  • 上述示例中jobAjobB两个任务并发到SGE集群运行,jobC任务会等待jobAjobB运行完成之后进行投递,由于jobC指定了host localhost,所以jobC会在本地运行。

  • 运行过程中可以通过查看test.log文件查看任务运行情况,或者通过qs test.log命令统计任务运行状态。

  • runjob命令可以后台nohup挂起,避免意外中断。

  • 终止runjob进程,会中断投递,同时清空正在运行中的任务。

  • 使用runjob -m local命令即可将test.job文件中的任务投递到本地服务器运行。

维护更新

维护更新

runjob是python语言编写的开源软件,目前持续维护中。

未来根据需要可能会更新更多功能,欢迎大家提供建议和意见。

e-mail: yodeng@tju.edu.cn