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
环境的任务查看、删除功能。
runbatch
和qcs
命令管理在阿里云BatchCompute
环境任务,runsge
、runjob
、qs
命令管理在本地服务器
和SGE集群
运行环境任务。
软件特性
runjob
为每个任务创建了一个任务对象,在内部维护了一个运行时任务队列,并根据用户定义的任务依赖关系,创建出任务依赖的有向无环图DAG(Directed acyclic graph)
对象。可灵活控制并行运行的任务量,并及时根据任务依赖关系运行新的任务。
主要特性
支持本地任务、SGE集群任务、阿里云BatchCompute任务的管理。
每个任务都唯一对应一个日志文件,记录着任务的全部输出和任务运行状态。
任务运行失败时可以选择是否将任务重新提交到任务队列。
程序中断时重新运行,会自动跳过运行成功的任务,只运行失败或还未运行的任务。
程序被kill或者终止的情况,会自动清理由程序创建出来的任务,避免计算资源的浪费。
在shell脚本中的任务也支持为每行命令定义运行时使用的cpu和内存资源。
支持通过参数选择只想要运行的部分任务而不是全部任务,部分运行的任务也能自动跳过已经运行成功的任务。
支持自定义任务运行前或任务运行结束后的
init
或call_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
进行安装,兼容python2
和python3
。
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
语言编写,支持python2
和python3
,推荐版本为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集群和本地任务
runsge
是runbatch
的副本命令,和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_begin
和job_end
代表了一个任务的开始和结束name
定义任务的名字host
指定任务运行的方式,本地运行或是sge投递,默认由–mode参数指定sched_options
定义sge运行的任务qsub
投递参数,本地运行模式下无效cmd_begin
和cmd_end
指定任务的运行的命令order ... after ...
定义了任务的依赖关系,多个依赖,任务名空白隔开即可order ... before ...
表示后面任务依赖前面任务#
开头为注释
流程进度查看
任务状态和任务运行进度可以通过查看输出日志文件或者通过qs
命令进行查看,可参考qs集群和本地任务查看。
qs集群和本地任务查看
qs
命令用于快速查看由runjob
或runbatch
投递管理的任务状态,主要有4种查看用法。
直接查看
直接输出qs
命令,可查看当前SGE集群或本地服务器各用户分别运行的任务数。
SGE集群环境下,输出集群中个用户运行的任务数,jobs表示总任务数,run表示正在运行中的任务,queue表示排队中的任务数。
非SGE集群环境,则会统计当前服务器中各用户的相关进程数。process
表示总进程数,R
表示处在run状态的进程数,S
表示处在sleep状态的进程数,D
表示dead状态的进程数,Z
表示zombie状态的进程,RES
表示用户使用的总的实际内存,VIRT
表示用户使用的总的虚拟内存。
日志文件查看
qs
命令传入runjob
或runbatch
输出的日志文件,即可分析该日志文件中全部任务的任务状态。
日志文件夹查看
qs
命令传入runjob
或runbatch
输出的文件夹,即可分析该日志文件夹中全部任务的任务状态。
任务文件查看
qs
命令传入runjob
的流程job文件,即可查看该流程中全部任务的运行状态
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
命令即可查看当前阿里云计算任务
第一列表示用户名
第二列表示任务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
镜像制作后须修改tag
为localhost:5000/${imageid}:${version}
docker
镜像须上传到OSS镜像仓库
OSS对象存储相关配置
ossSrc
: OSS存储bucket,例如:oss://xxxx/
mountPath
: OSS存储挂载的本地路径, 例如: /share/oss/
access_key_id
: OSS存储的访问ID
access_key_secret
: OSS存储的访问密钥
参数和配置文件查看
runbatch
和qcs
命令都使用了配置文件,可以通过--config
打印和查看程序运行导入的参数文件路径和各参数的配置值。
配置文件还可以通过命令参数-ini/--ini
传入,会优先查找参数配置文件,然后查找$HOME/.runjobconfig
,最后查找安装目录下的runjobconfig
文件。
使用示例
runbatch阿里云批量计算使用示例
分别基于阿里云实例自定义镜像和集运docker镜像进行说明
1. 基于阿里云实例镜像运行
1.1. 镜像构建
镜像构建须联系管理员,分配一台阿里云主机,在该主机上部署相关软件流程环境,并创建镜像。
1.2. 配置文件和任务执行
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
的某个路径中
例如有一个任务:
现有一个数据库文件,存放在/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. 配置文件和任务执行
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镜像运行时,
Cluster
的ImageId
填写默认的img-ubuntu
即可。
上述配置完成后,任务运行和投递和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. 使用说明
上述示例中
jobA
和jobB
两个任务并发到SGE集群运行,jobC
任务会等待jobA
和jobB
运行完成之后进行投递,由于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