海量作业
作业组
为了便于管理海量的作业,可以对作业定义作业组。
作业组的名字是类似于Linux的路径名的树状结构,如作业组 /test ,而 /test/1 和 /test/2 都属于 /test
需要注意的是作业组是全局的,创建者是这个作业组的拥有者,作业组拥有者可以对这个作业组及其子组内的所有作业进行控制(哪怕这个作业是其他人提交的,拥有者也能进行控制)。如果您不想作业被别人控制,请确保提交到的作业组从/开始拥有者都是自己。
创建作业组
- 显式创建作业组:
bgadd /test
- 使用bsub提交作业时指定一个不存在的作业组,则作业组会被隐式创建:
bsub -g /test
查看作业组
-
bjgroup /test
最后一列就是作业组的拥有者,请注意拥有者也是层次继承的。
删除作业组
-
bgdel /test
- 集群已经配置自动清理空的隐式创建的作业组
控制作业组作业
- 有了作业组以后就可以对一组作业进行控制了
- 查看指定作业组的作业:
bjobs -g /test
- 终止指定作业组的所有作业:
bkill -g /test 0
作业序列
作业序列是一系列作业,这些作业执行相同的操作和资源要求,但是输入输出文件不同。这些作业共享同一个作业ID,并可以通过索引来区分每个子作业。
bsub 使用 -J "arrayName[indexList, ...]" 参数命名并创建一个作业序列,也可以理解为一个作业数组,中括号里面就是数组的下标,可以是一维数组也可以是多维数组。indexList = start[-end[:step]] 下标的起始、结束和步长均可指定。
作业调度系统提供了两个运行时变量 %I 和 %J,%I 为子作业的索引值,%J 为作业ID,一般用于输入输出文件名中;以及运行时环境变量 LSB_JOBINDEX
例如
- 提交一个有10个子作业的作业:
bsub -J "myArray[1-10]" myJob
- 每个子作业定义不同的输入输出文件:
bsub -J "myArray[1-10]" -i "input.%I" -o "output.%I" myJob
- 假设jobid是123,针对单个子作业操作:
bkill 123[1];对整个作业序列操作:bkill 123