CSIC   Universidad de Valencia

empty empty empty empty empty
empty
Inicio
Fotos
Hardware
Uso
  -guia
  -cert
  -GridFtp
empty empty  

Guía rápida de uso

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

Ahora, ejecutaremos un comando remoto en el CE:

lcg2ui:~> globus-job-run lcg2ce.ific.uv.es:2119/jobmanager-fork /bin/hostname
lcg2ce.ific.uv.es

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

#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
 
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); 
  } 
 
  write(STDOUT_FILENO,msg_stdout,strlen(msg_stdout)); 
  write(STDERR_FILENO,msg_stderr,strlen(msg_stderr)); 
 
  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).

# EJECUTABLE
Executable = "prueba.sh";

# SALIDAS ESTANDARES
StdOutput = "std.out";
StdError = "std.err";

# FICHEROS DE ENTRADA
InputSandbox = {"prueba.sh","prueba","texto.txt"};

# FICHEROS DE SALIDA
OutputSandbox = {"std.out","std.err"};

# QUE EL DESTINO NOS PERMITA TRABAJOS DE AL MENOS 2 MINUTOS DE CPU
Requirements = other.GlueCEPolicyMaxCPUTime > 2;

# SELECCIONAMOS AQUEL DESTINO QUE TENGA MAS CPUS LIBRES
rank = other.GlueCEStateFreeCPUs;

Podemos ahora ver que granjas del GRID aceptarían nuestro trabajo. De paso nos sirve para comprobar la validez de nuestro fichero jdl.

lcg2ui:~> edg-job-list-match --vo ific --rank prueba.jdl
 
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: 
 
                   *CEId*                             *Rank* 
 
 lcg2ce.ific.uv.es:2119/jobmanager-lcgpbs-infinite      95 
 lcg2ce.ific.uv.es:2119/jobmanager-lcgpbs-long          95 
 lcg2ce.ific.uv.es:2119/jobmanager-lcgpbs-short         95 
*************************************************************************** 
 

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 
 
 
********************************************************************************************* 

El trabajo ha sido enviado y aceptado para su ejecución. Podemos comprobar el estado con el comando edg-job-status:

lcg2ui:~> edg-job-status https://lcg2rb.ific.uv.es:9000/gwBXd4F-tzAn_AoAu-Fcpw 
 
************************************************************* 
BOOKKEEPING INFORMATION: 
 
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:

lcg2ui:~> edg-job-get-output https://lcg2rb.ific.uv.es:9000/gwBXd4F-tzAn_AoAu-Fcpw 
 
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 
 
********************************************************************************* 
 
 

En el directorio indicado tendremos los dos ficheros de salida, std.out y std.err

empty empty empty empty empty


Guía rápida de uso
Last Updated September 22, 2005
gogmaster@ific.uv.es
© IFIC & ICMOL 2002