3.5. Jobs con dependencia

El scheduler SGE permite definir dependencia entre jobs. Este permite, por ejemplo, determinar que un job B iniciara únicamente cuando el job A acabara. Es útil cuando hay dependencia de los resultados. La dependencia no esta limitada a un solo job, puede ser una lista de jobs.

Regresando al ejemplo anterior del Job Array con blastx, se podría imaginar que la lista de las secuencias sea el resultado de un proceso anterior. El script siguiente, aunque muy simple, sirve como base para dividir las secuencias y genera la lista. En caso real, el flujo de los datos podría ser mucho más complejo..

#!/bin/bash

#$ -n SplitFile
	
# el archivo original de 100 secuencias sera dividido en 100 archivos..
rm -rfv Split
mkdir Split
cd Split
seqretsplit -auto -sequence $HOME/archivoOriginal.fna

# Generamos la lista
cd
find $HOME/Split -name "*.fasta" > $HOME/lista-secuencias.txt
      

Este script se lanzara primero. Se tomara en cuenta su numero de JOBID. Y se mandara luego el jobs de Blast, con la condición de dependencia, utilizando la opción -hold_jid.

$ qsub split.sh 
Your job 63 ("SplitFile") has been submitted
$ qsub -hold_jid 63 blastarray.sh 
Your job-array 64.1-100:1 ("ArrayBlast") has been submitted
$ qstat
job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID 
-----------------------------------------------------------------------------------------------------------------
     63 0.55500 SplitFile  jerome       qw    02/17/2016 19:14:51                                    1        
     64 0.00000 ArrayBlast jerome       hqw   02/17/2016 19:15:06                                    1 1-100:1
      

El job 64 tiene un estado hqw. El "h" significa que esta Hold, en espera de ser liberado. En este caso, sera cuando el job 63 acabe.

Warning

Es importante notar que si el job 63 falla o esta cancelado, el job 64 entrara para correr. Se debe de implementar un sistema de verificación dentro de los jobs con dependencia.