La ejecución de trabajos en la granja GOG ha de hacerse mediante el
uso de comandos GRID derivados de los proyectos GLOBUS, EDG (European Data
Grid), LCG (LHC Computing Grid) y EGEE (Enabling Grids for E-science in
Europe).
Primero hemos de logarnos en el UI (lcg2ui.ific.uv.es) con nuestra
cuenta de AFS.
Para comprobar que podemos funcionar en modo GRID correctamente, enviaremos
un comando simple al CE (ver glosario).
El primer paso consiste en obtener un proxy de nuestro certificado, que
en la practica es como 'logarse en el sistema':
lcg2ui:~> grid-proxy-init
Your identity: /C=ES/O=DATAGRID-ES/O=IFIC/CN=Fco. Javier Sanchez Martinez
Enter GRID pass phrase for this identity:
(tecleamos la password con la que esta codificada el certificado)
Creating proxy .............................. Done
Your proxy is valid until: Thu May 13 07:30:28 2004
Este comando quiere decir, contacta al gestor de trabajos en el CE en el
puerto 2119 y ejecuta el comando /bin/hostname. El resultado ha de ser
lcg2ce.ific.uv.es.
No debe emplearse este método para ejecutar trabajos. Es lícito usarlo para
comprobar que nuestro certificado es válido, pero para nada más. El sistema
necesita utilizar comandos similares para ejecutar nuestros trabajos, así que
si utilizamos este procedimiento para otros comandos impediremos que nuestros
trabajos o los de otros se ejecuten con normalidad.
Pasemos a algo más serio...
Escribamos con un editor de texto el programa del siguiente listado, al
que llamaremos prueba.c
int main(int argc, char *argv[])
{
char buf[BUFSIZ];
int fin,nchar;
char msg_stdout[]="Esta es la salida estandar\n";
char msg_stderr[]="Esta es la salida de errores\n";
if (argc < 2) {
fprintf(stderr,"Usage: %s input_file\n",argv[0]);
exit(1);
}
if ((fin=open(argv[1],O_RDONLY)) == -1) {
fprintf(stderr,"No se puede abrir el fichero %s\n",argv[1]);
exit(1);
}
nchar=read(fin, buf, sizeof(buf));
if (nchar > 0)
write(STDOUT_FILENO, buf, nchar);
exit(0);
}
Lo compilamos con:
lcg2ui:~> cc -o prueba prueba.c
Si la compilación es correcta no nos dirá nada.
El programa envía un mensaje a la salida estandar, otro a la salida de
errores y después lee los 1204 primeros caracteres de un fichero, cuyo
nombre le damos como argumento, y los envía también a la salida estandar.
Para correrlo en la granja, tendremos que enviar con el trabajo el ejecutable
de nuestro programa y el fichero de entrada. Cuando acabe el programa
deberemos recoger la salida estandar y la de errores. Además, usaremos un
script para correr el programa al que llamaremos prueba.sh:
#!/bin/sh
echo "Hola desde `hostname`"
echo "Yo soy `whoami`"
echo "Mi directorio actual es: `pwd`"
chmod +x prueba
./prueba texto.txt
echo "He acabado"
Con el editor de textos creamos un fichero llamado
texto.txt que será nuestro
fichero de entrada.
Si ejecutamos localmente nuestro script prueba.sh veremos cual es el
resultado en nuestra máquina. Ahora sólo hace falta enviarlo al GRID.
Para ello necesitamos un fichero adicional en el que le explicamos al
sistema de ejecución de trabajos los requerimientos de nuestro programa
y los ficheros de entrada y salida. A este fichero le llamaremos
prueba.jdl
(la extensión nos sirve para recordar que esta escrito en un lenguaje llamado
Job Description Language).
Selected Virtual Organisation name (from --vo option): ific
Connecting to host lcg2rb.ific.uv.es, port 7772
***************************************************************************
COMPUTING ELEMENT IDs LIST
The following CE(s) matching your job requirements have been found:
Vemos de la lista que existe un CE con distintas colas que aceptaría nuestro
trabajo. Lo enviamos:
lcg2ui:~> edg-job-submit --vo ific prueba.jdl
Selected Virtual Organisation name (from --vo option): ific
Connecting to host lcg2rb.ific.uv.es, port 7772
Logging to host lcg2rb.ific.uv.es, port 9002
*********************************************************************************************
JOB SUBMIT OUTCOME
The job has been successfully submitted to the Network Server.
Use edg-job-status command to check job current status. Your job identifier (edg_jobId) is:
- https://lcg2rb.ific.uv.es:9000/gwBXd4F-tzAn_AoAu-Fcpw
Status info for the Job : https://lcg2rb.ific.uv.es:9000/gwBXd4F-tzAn_AoAu-Fcpw
Current Status: Running
Status Reason: Job successfully submitted to Globus
Destination: lcg2ce.ific.uv.es:2119/jobmanager-lcgpbs-infinite
reached on: Tue May 18 10:41:35 2004
*************************************************************
Cuando el estado del trabajo sea DONE
podemos coger los ficheros de salida:
Retrieving files from host: lcg2rb.ific.uv.es ( for https://lcg2rb.ific.uv.es:9000/gwBXd4F-tzAn_AoAu-Fcpw )
*********************************************************************************
JOB GET OUTPUT OUTCOME
Output sandbox files for the job:
- https://lcg2rb.ific.uv.es:9000/gwBXd4F-tzAn_AoAu-Fcpw
have been successfully retrieved and stored in the directory:
/tmp/jobOutput/sanchezj_gwBXd4F-tzAn_AoAu-Fcpw