hit counter

Servicios y sistemas informáticos para Internet. Curso 2008-2009

Capítulo 7. Gestión de trabajos y datos en gLite

Tabla de contenidos

7.1. Introducción
7.2. Autenticación y autorización
7.3. Sistema de información
7.4. Gestión de trabajos
7.5. Gestión de datos
7.6. Trabajos con dependencias de datos

7.1. Introducción

Antes de empezar hay que conectarse a glite-tutor.ct.infn.it, la máquina donde se van a realizar las prácticas. La conexión debe ser ssh, por lo que es necesario utilizar un cliente que soporte este protocolo. En caso de que esta máquina esté caída, se puede realizar la conexión a glite-tutor2.ct.infn.it. El nombre de usuario y la contraseña serán suministradas por el profesor.

7.2. Autenticación y autorización

Los certificados han sido copiados a la cuenta de cada usuario previamente. Vamos a comprobarlo.

$> ls -l .globus
total 24
-rw-r--r--  1 gijon01 users 1757 Mar  3 09:21 GIJON01.p12
-rw-r--r--  1 gijon01 users 1054 Mar  3 09:21 usercert.pem
-r--------  1 gijon01 users  963 Mar  3 09:21 userkey.pem

El fichero con extensión p12 es el fichero PKCS12 que contiene el certificado X.509. Este fichero no es aceptado por el sistema de seguridad GSI (el utilizado por globus) por lo que es necesario dividirlo en dos ficheros con la clave pública y con la clave privada (usercert.pem y userkey.pem, respectivamente). Para realizar esa transformación sería necesario utilizar el comando openssl, pero no es necesario ya que esta tarea ha sido realizada con anterioridad.

Podemos inspeccionar nuestra clave pública.

$> grid-cert-info
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 142 (0x8e)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=IT, O=GILDA, CN=GILDA CA
        Validity
            Not Before: Mar  3 08:21:00 2009 GMT
            Not After : Apr  3 08:21:00 2009 GMT
        Subject: C=IT, O=GILDA, OU=Personal Certificate, L=GIJON, CN=GIJON01
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:bb:10:eb:84:0e:00:11:6d:3e:60:da:b2:3c:57:
                    e2:ad:ab:a2:21:3e:71:64:bc:9e:f9:a4:ed:73:1d:
                    07:b1:ed:57:b4:02:50:b9:4b:c1:fd:4f:34:04:b8:
                    9b:fc:3b:18:2f:85:09:d0:16:34:38:5a:49:80:3a:
                    49:01:19:ce:16:1d:dd:52:0b:55:ca:8a:65:52:05:
                    bf:55:e3:db:31:57:b6:a1:0f:82:07:d7:09:f6:d2:
                    c0:f8:e9:05:ee:f4:32:21:3c:b6:e0:f8:c1:7e:b1:
                    1d:fe:78:6e:43:1b:5c:3e:36:c2:81:18:02:a0:2f:
                    fc:18:00:d0:f1:e5:7c:7f:ff
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                F3:53:76:11:FE:06:3A:08:36:C2:F4:DC:BD:64:6C:C2:CA:C6:92:E6
            X509v3 Authority Key Identifier:
                keyid:79:60:F2:17:38:93:16:76:CF:7F:45:F9:D8:82:02:C3:75:1E:3C:EC
                DirName:/C=IT/O=GILDA/CN=GILDA CA
                serial:00

            X509v3 Subject Alternative Name:
                email:rusamentiaga@uniovi.es
    Signature Algorithm: md5WithRSAEncryption
        7e:fe:1d:6c:f6:af:d4:73:52:9b:84:5e:0a:3e:f8:17:c6:47:
        f8:28:8f:80:36:20:97:4c:6c:5b:1b:f7:cb:3c:d7:47:5e:8f:
        00:da:8b:13:c2:1b:f2:0d:f5:f6:25:d8:16:3b:10:8a:54:56:
        cf:e7:84:25:d9:25:c3:ba:5f:0f:82:08:c5:3f:a7:52:d3:91:
        3b:ae:64:18:82:d6:95:ac:1f:b0:0e:da:44:8c:9f:f9:85:62:
        07:84:7c:31:40:05:30:86:ea:6d:1f:3a:5b:50:93:fc:7d:80:
        7c:73:d3:43:db:d9:c0:71:e4:1d:43:c2:b8:62:50:62:b2:3a:
        33:44

El comando anterior, entre otras cosas, nos muestra por cuanto tiempo es válido el certificado y quién lo solicitó.

Nota

Si quieres seguir haciendo pruebas con gLite después de esta sesión de prácticas deberás hacerlo dentro del periodo de validez del certificado.

Una vez que hemos verificado que los certificados están instalados correctamente, vamos a crear un proxy.

$> voms-proxy-init --voms gilda
Cannot find file or dir: /home/gijon01/.glite/vomses
Enter GRID pass phrase:
Your identity: /C=IT/O=GILDA/OU=Personal Certificate/L=GIJON/CN=GIJON01
Creating temporary proxy .................................................. Done
Contacting  voms.ct.infn.it:15001 [/C=IT/O=INFN/OU=Host/L=Catania/CN=voms.ct.infn.it] "gilda" Done
Creating proxy ...................................................... Done
Your proxy is valid until Fri Mar  6 22:36:15 2009

Nota

La contraseña para crear el proxy será suministrada por el profesor.

El comando voms-proxy-init nos permite hacer el login al grid dentro de la organización virtual (VO) gilda. El proxy creado con voms-proxy-init es una extensión del proxy creado con grid-proxy-init que permite obtener atributos y permisos de la organización.

A continuación podemos inspeccionar los detalles del proxy.

$> voms-proxy-info -all
subject   : /C=IT/O=GILDA/OU=Personal Certificate/L=GIJON/CN=GIJON01/CN=proxy
issuer    : /C=IT/O=GILDA/OU=Personal Certificate/L=GIJON/CN=GIJON01
identity  : /C=IT/O=GILDA/OU=Personal Certificate/L=GIJON/CN=GIJON01
type      : proxy
strength  : 512 bits
path      : /tmp/x509up_u11144
timeleft  : 11:18:08
=== VO gilda extension information ===
VO        : gilda
subject   : /C=IT/O=GILDA/OU=Personal Certificate/L=GIJON/CN=GIJON01
issuer    : /C=IT/O=INFN/OU=Host/L=Catania/CN=voms.ct.infn.it
attribute : /gilda/Role=NULL/Capability=NULL
timeleft  : 11:18:08

La primera parte del comando anterior contiene la información del proxy y la segunda la información sobre gilda.

Tenemos a nuestra disposición otros comandos para eliminar el proxy.

$> voms-proxy-destroy
$> voms-proxy-info -all

Couldn't find a valid proxy.

Crea un nuevo proxy antes de continuar.

7.3. Sistema de información

El sistema de información se encarga de recopilar información sobre todos los elementos que componen el grid: elementos de computación, elementos de almacenamiento, brokers, etc. El comando principal que vamos a utilizar para obtener información del grid es lcg-infosites.

El comando lcg-infosites es un script en perl que realiza consultas LDAP al sistema de información. Se puede observar su contenido.

$> more `which lcg-infosites`
#!/usr/bin/perl
use Net::LDAP;
use Net::LDAP::Entry;

$ENV{PATH} = "$ENV{GLOBUS_LOCATION}/bin:$ENV{PATH}";
$ENV{LD_LIBRARY_PATH} = "$ENV{GLOBUS_LOCATION}/lib:$ENV{LD_LIBRARY_PATH}";

# GETTING THE EXTERNAL ARGUMENTS

for ($i = 0; $i<=$#ARGV; $i++){

    if ($ARGV[$i] =~ /^--vo$/) {
        for($j = $i + 1; $j <= $#ARGV; $j++) {

            last if ($ARGV[$j] =~ /^-/ || "$ARGV[$j]" eq "closeSE");
            last if ("$ARGV[$j]" eq "se" || "$ARGV[$j]" eq "ce" || "$ARGV[$j]" e
q "rb" || "$ARGV[$j]" eq "vobox");
            last if ("$ARGV[$j]" eq "all" || "$ARGV[$j]" eq "tag" || "$ARGV[$j]"
...           

Podemos utilizar el comando lcg-infosites para obtener información sobre los elementos de computación disponibles (clusters).

$> lcg-infosites --vo gilda ce
valor del bdii: glite-rb.ct.infn.it:2170
#CPU    Free    Total Jobs      Running Waiting ComputingElement
----------------------------------------------------------
   8       8       0              0        0    ce-edu.grid.acad.bg:2119/jobmanager-pbs-gilda
  24       2       0              0        0    ce.hpc.iit.bme.hu:2119/jobmanager-lcgpbs-gilda
  26      26       0              0        0    grid010.ct.infn.it:2119/jobmanager-lcgpbs-short
  26      26       0              0        0    grid010.ct.infn.it:2119/jobmanager-lcgpbs-infinite
  26      26       1              0        1    grid010.ct.infn.it:2119/jobmanager-lcgpbs-long
  14      14       1              0        1    gilda-01.pd.infn.it:2119/jobmanager-lcgpbs-gilda
  20      18       0              0        0    vega-ce.ct.infn.it:2119/jobmanager-lcgsge-gilda
  56      44       0              0        0    iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-short
  56      44       0              0        0    iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-infinite
  56      44       0              0        0    iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-long
   4       4       0              0        0    dgt01.ui.savba.sk:2119/jobmanager-lcgpbs-gilda
   6       6       1              0        1    gilda-ce.rediris.es:2119/jobmanager-lcgpbs-short
   6       6       0              0        0    gilda-ce.rediris.es:2119/jobmanager-lcgpbs-gilda
   6       6       1              0        1    gilda-ce.rediris.es:2119/jobmanager-lcgpbs-infinite
   6       6       0              0        0    gilda-ce.rediris.es:2119/jobmanager-lcgpbs-long
  16       4       0              0        0    gn0.hpcc.sztaki.hu:2119/jobmanager-lcgpbs-gilda

El resultado del comando contiene información sobre las colas a las cuales podemos enviar trabajos, el número de CPUs disponibles en cada una de ellas, y cuántos trabajos se están ejecutando en cada una.

Añadiendo la opción -v 2 podemos obtener información adicional sobre el sistema operativo instalado en cada elemento de computación y el tipo de CPUs.

$> lcg-infosites --vo gilda ce -v 2
valor del bdii: glite-rb.ct.infn.it:2170
RAMMemory    Operating System    System Version            Processor    Subcluster name
------------------------------------------------------------------------------------------------------------
  16384      ScientificCERNSLC  Beryllium                    Xeon                        ce-edu.grid.acad.bg
   2048           ScientificSL  Beryllium                     PIV                          ce.hpc.iit.bme.hu
   2048       Scientific Linux     SL                GenuineIntel                         grid010.ct.infn.it
    513  Scientific Linux CERN    SLC                        PIII                        gilda-01.pd.infn.it
   2048       Scientific Linux     SL                        Xeon                         vega-ce.ct.infn.it
   4096       Scientific Linux     SL                 Opteron 265                    iceage-ce-01.ct.infn.it
    513           ScientificSL     SL                          P4                          dgt01.ui.savba.sk
   1024           ScientificSL  Beryllium                PentiumD                        gilda-ce.rediris.es
      0                                                                                   gn0.hpcc.sztaki.hu

El mismo comando se puede utilizar también para obtener información sobre los elementos de almacenamiento.

$> lcg-infosites --vo gilda se
Avail Space(Kb) Used Space(Kb)  Type    SEs
----------------------------------------------------------
5368699         10              n.a     se-edu.grid.acad.bg
7420000         25218           n.a     se.hpc.iit.bme.hu
297850000       73371805        n.a     aliserv6.ct.infn.it
n.a             3198673         n.a     gilda-02.pd.infn.it
53770000        n.a             n.a     vega-se.ct.infn.it
62230000        1490830         n.a     iceage-se-01.ct.infn.it
98330000        n.a             n.a     dgt02.ui.savba.sk
952930000       n.a             n.a     gilda-se.rediris.es
1030000000      31              n.a     fn2.hpcc.sztaki.hu

También es posible obtener información sobre el elemento de almacenamiento más cercano a cada elemento de computación (definido por cada gestor de CE).

$> lcg-infosites --vo gilda closeSE
valor del bdii: glite-rb.ct.infn.it:2170
Name of the CE: ce-edu.grid.acad.bg:2119/jobmanager-pbs-gilda
        se-edu.grid.acad.bg

Name of the CE: ce.hpc.iit.bme.hu:2119/jobmanager-lcgpbs-gilda
        se.hpc.iit.bme.hu

Name of the CE: grid010.ct.infn.it:2119/jobmanager-lcgpbs-short
        aliserv6.ct.infn.it

Name of the CE: grid010.ct.infn.it:2119/jobmanager-lcgpbs-infinite
        aliserv6.ct.infn.it
...

No sólo podemos obtener información de gilda, también de otras organizaciones, como por ejemplo EUMed.

$> lcg-infosites --vo eumed ce --is  bdii.isabella.grnet.gr
valor del bdii: bdii.isabella.grnet.gr:2170
#CPU    Free    Total Jobs      Running Waiting ComputingElement
----------------------------------------------------------
  10      10       0              0        0    gridce.sns.it:2119/jobmanager-lcgpbs-grid
 170     123       0              0        0    grid001.ts.infn.it:2119/jobmanager-lcglsf-grid
 122     105       0              0        0    ce-01.roma3.infn.it:2119/jobmanager-lcgpbs-eumed
  59      12       0              0        0    grid-eo-engine04.esrin.esa.int:2119/jobmanager-lcgpbs-grid
1110     335       0              0        0    gridce2.pi.infn.it:2119/jobmanager-lcglsf-grid4
1110     335       0              0        0    gridce.pi.infn.it:2119/jobmanager-lcglsf-grid4
   8       8       0              0        0    ce-eugrid.eri.sci.eg:2119/jobmanager-lcgpbs-eumed
1110     335       0              0        0    gridce1.pi.infn.it:2119/jobmanager-lcglsf-grid4
  20      18       2              2        0    ce1.cnrst.magrid.ma:2119/jobmanager-lcgpbs-eumed
  24      24       0              0        0    ce01.grid.cynet.ac.cy:2119/jobmanager-lcgpbs-eumed
  61       3       0              0        0    ce01.isabella.grnet.gr:2119/jobmanager-pbs-eumed
   8       8       0              0     4444    ce02.grid.arn.dz:2119/jobmanager-lcgpbs-eumed
 254       0       0              0        0    grid012.ct.infn.it:2119/jobmanager-lcglsf-eumed
  27      26       1              1        0    ce.ulakbim.gov.tr:2119/jobmanager-lcgpbs-eumed
   4       4       2              0        2    ce01.grid.arn.dz:2119/jobmanager-lcgpbs-eumed
   8       8       0              0     444444  n001.grid.cs.um.edu.mt:2119/jobmanager-lcgpbs-eumed
   0       0       0              0     4444    gcce.mans.edu.eg:2119/jobmanager-lcgpbs-eumed
$> lcg-infosites --vo eumed se --is  bdii.isabella.grnet.gr
Avail Space(Kb) Used Space(Kb)  Type    SEs
----------------------------------------------------------
n.a             n.a             n.a     n002.grid.cs.um.edu.mt
1403508736      15783507968     n.a     grid-eo-engine04.esrin.esa.int
2750000000      7316            n.a     se.ulakbim.gov.tr
1403508736      15783507968     n.a     grid-eo-engine04.esrin.esa.int
25785188352     49401118720     n.a     gridsrm.ts.infn.it
149430000       n.a             n.a     se1.cnrst.magrid.ma
31140000        n.a             n.a     se02.grid.arn.dz
77197312        1386312704      n.a     storm-01.roma3.infn.it
858448384       4284134912      n.a     se01.isabella.grnet.gr
25785188352     49401118720     n.a     gridsrm.ts.infn.it
69015268        1995280         n.a     se.mans.edu.eg
n.a             1               n.a     se01.grid.arn.dz
77197312        1386312704      n.a     storm-01.roma3.infn.it
n.a             1242747         n.a     se01.grid.cynet.ac.cy
n.a             n.a             n.a     se-eugrid.eri.sci.eg

Nota

¿Quieres pasar de kilobytes a terabytes? Google es tu amigo.

La opción --is indica que queremos pedir información a un sistema de información distinto al establecido por defecto en la variable de entorno LCG_GFAL_INFOSYS.

$> echo $LCG_GFAL_INFOSYS
glite-rb.ct.infn.it:2170

Nota

Ejecuta lcg-infosites -h para obtener un listado de las opciones que permite este comando.

El comando lcg-info es similar al lcg-infosites. La diferencia es que con lcg-info se pueden listar sólo aquellos elementos que cumplan ciertos criterios.

Nota

Ejecuta lcg-info -h para ver todas las posibilidades que ofrece el comando.

En primer lugar podemos observar los atributos disponibles.

$> lcg-info --list-attrs
Attribute name      Glue object class     Glue attribute name

WorstRespTime       GlueCE                GlueCEStateWorstResponseTime
CEAppDir            GlueCE                GlueCEInfoApplicationDir
TotalCPUs           GlueCE                GlueCEInfoTotalCPUs
MaxRunningJobs      GlueCE                GlueCEPolicyMaxRunningJobs
CE                  GlueCE                GlueCEUniqueID
WaitingJobs         GlueCE                GlueCEStateWaitingJobs
MaxCPUTime          GlueCE                GlueCEPolicyMaxCPUTime
LRMSVersion         GlueCE                GlueCEInfoLRMSVersion
MaxTotalJobs        GlueCE                GlueCEPolicyMaxTotalJobs
CEStatus            GlueCE                GlueCEStateStatus
LRMS                GlueCE                GlueCEInfoLRMSType
CEVOs               GlueCE                GlueCEAccessControlBaseRule
AssignedJobSlots    GlueCE                GlueCEPolicyAssignedJobSlots
FreeCPUs            GlueCE                GlueCEStateFreeCPUs
...

La primera columna informa sobre el nombre del atributo simplificado. La segunda y tercera columna son el esquema y el atributo completo. Estos valores son un subconjunto de todos los posibles valores de la implementación LDAP del esquema GLUE.

Por ejemplo, para consultar el número de CPUs libres podríamos usar el siguiente comando.

$> lcg-info --list-ce --attrs FreeCPUs
- CE: ce-edu.grid.acad.bg:2119/jobmanager-pbs-dteam
  - FreeCPUs            8

- CE: ce-edu.grid.acad.bg:2119/jobmanager-pbs-gilda
  - FreeCPUs            8

- CE: ce-edu.grid.acad.bg:2119/jobmanager-pbs-ngedu
  - FreeCPUs            8
  
...

El software instalado en cada elemento de computación.

$> lcg-info --list-ce --attrs Tag | more
- CE: ce-edu.grid.acad.bg:2119/jobmanager-pbs-dteam
  - Tag                 LCG-2
                        LCG-2_1_0
                        LCG-2_1_1
                        LCG-2_2_0
                        LCG-2_3_0
                        LCG-2_3_1
                        LCG-2_4_0
                        LCG-2_5_0
                        LCG-2_6_0
                        LCG-2_7_0
                        GLITE-3_0_0
                        GLITE-3_0_1
                        GLITE-3_0_2
                        GLITE-3_1_0
                        R-GMA
                        MPI-START
                        MPICH
                        MPICH-1.2.7
                        MPI_SHARED_HOME
  
...

Las consultas se pueden hacer más complejas. Por ejemplo, podríamos querer saber cuántas CPUs hay libres en los elementos de computación que tengan instalado MPICH.

$> lcg-info --vo gilda --list-ce --query 'Tag=MPICH' --attrs 'FreeCPUs'
- CE: ce-edu.grid.acad.bg:2119/jobmanager-pbs-gilda
  - FreeCPUs            8

- CE: dgt01.ui.savba.sk:2119/jobmanager-lcgpbs-gilda
  - FreeCPUs            4

- CE: gilda-01.pd.infn.it:2119/jobmanager-lcgpbs-gilda
  - FreeCPUs            14

- CE: grid010.ct.infn.it:2119/jobmanager-lcgpbs-infinite
  - FreeCPUs            26

...

Hasta ahora hemos estado realizando consultas sobre los elementos de computación, pero también podemos hacerlo sobre los elementos de almacenamiento. Por ejemplo, podemos consultar el espacio disponible en los elementos de almacenamiento que soporten el protocolo gsiftp.

$> lcg-info --vo gilda --list-se --query 'Protocol=gsiftp' --attrs 'AvailableSpace'
- SE: aliserv6.ct.infn.it
  - AvailableSpace      297850000

- SE: dgt02.ui.savba.sk
  - AvailableSpace      98330000

- SE: gilda-02.pd.infn.it
  - AvailableSpace      0

- SE: gilda-se.rediris.es
  - AvailableSpace      952930000

...

Utilizando el comando lcg-info, determina la frecuencia de reloj (ClockSpeed) de las máquinas cuyo cluster sea gestionado por Sun Grid Engine (LRMS=sge).

7.4. Gestión de trabajos

En gLite, los trabajos se describen mediante un fichero de descripción en formato JDL (Job Description Language). Este fichero está basado en el formato de los ClassAd de Condor. En el fichero JDL se describen las características y los requisitos del trabajo. Posteriormente, el WMS (Workload Management System) se encarga de seleccionar el recurso adecuado para ejecutar el trabajo en función de la información descrita para ese trabajo.

Un fichero JDL consta de una secuencia de sentencias en el siguiente formato.

attribute = expression;

A continuación se va a crear un ejemplo sencillo de trabajo, pero antes vamos a organizar los directorios.

$> cd ~
$> mkdir glite
$> mkdir glite/hostname
$> cd glite/hostname

Ahora ya podemos crear el fichero de descripción del trabajo.

$> cat > hostname.jdl
Type = "Job";
JobType = "Normal";
Executable = "/bin/hostname";
StdOutput = "hostname.out";
StdError = "hostname.err";
OutputSandbox = {"hostname.err","hostname.out"};
Arguments = "-f";
ShallowRetryCount = 3;

El atributo Executable indica el nombre del programa que queremos ejecutar. Indicar el nombre del trabajo con un path absoluto significa que no queremos que se transfiera el programa ya que asumimos que está disponible en el nodo de ejecución. El atributo StdOutput y StdError indican el nombre del fichero donde se van a almacenar la salida estándar y la de error del programa. El atributo OutputSandbox indica los ficheros que queremos transferir de vuelta tras la ejecución del trabajo. En el fichero JDL, al igual que pasaba en Condor, también se pueden indicar requisitos y preferencias.

Nota

Puedes consultar la la documentación sobre JDL para ver todas las opciones disponibles y su significado.

Para poder enviar el trabajo debemos delegar nuestro proxy al servicio WMProxy. Este servicio (Workload Manager Proxy) proporciona acceso al WMS (Workload Management System) a través de una interfaz basada en servicios Web.

Antes de delegar el proxy vamos a comprobar que existe la variable $USER, ya que la utilizaremos como base para la delegación.

$> echo $USER
gijon01

A continuación realizamos la delegación del proxy.

$> glite-wms-job-delegate-proxy -d $USER

Connecting to the service https://gilda-wms-01.ct.infn.it:7443/glite_wms_wmproxy_server


================== glite-wms-job-delegate-proxy Success ==================

Your proxy has been successfully delegated to the WMProxy:
https://gilda-wms-01.ct.infn.it:7443/glite_wms_wmproxy_server

with the delegation identifier: gijon01

==========================================================================


Antes de enviar el trabajo es posible determinar los CEs que cumplen nuestros requisitos (los especificados en el fichero JDL)

$> glite-wms-job-list-match -d $USER hostname.jdl

Connecting to the service https://gilda-wms-01.ct.infn.it:7443/glite_wms_wmproxy_server


==========================================================================

                     COMPUTING ELEMENT IDs LIST
 The following CE(s) matching your job requirements have been found:

        *CEId*
 - iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-infinite
 - iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-long
 - iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-short
 - grid010.ct.infn.it:2119/jobmanager-lcgpbs-infinite
 - grid010.ct.infn.it:2119/jobmanager-lcgpbs-short
 - vega-ce.ct.infn.it:2119/jobmanager-lcgsge-gilda
 - ce-edu.grid.acad.bg:2119/jobmanager-pbs-gilda
 - gn0.hpcc.sztaki.hu:2119/jobmanager-lcgpbs-gilda
 - dgt01.ui.savba.sk:2119/jobmanager-lcgpbs-gilda
 - ce.hpc.iit.bme.hu:2119/jobmanager-lcgpbs-gilda
 - gilda-01.pd.infn.it:2119/jobmanager-lcgpbs-gilda
 - grid010.ct.infn.it:2119/jobmanager-lcgpbs-long

==========================================================================


También podemos observar el ranking de los CEs para nuestro trabajo.

$> glite-wms-job-list-match -a --rank hostname.jdl

Connecting to the service https://gilda-wms-01.ct.infn.it:7443/glite_wms_wmproxy_server

==========================================================================

                     COMPUTING ELEMENT IDs LIST
 The following CE(s) matching your job requirements have been found:

        *CEId*                                                   *Rank*

 - iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-infinite          52
 - iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-long              52
 - iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-short             52
 - grid010.ct.infn.it:2119/jobmanager-lcgpbs-infinite               26
 - grid010.ct.infn.it:2119/jobmanager-lcgpbs-short                  26
 - vega-ce.ct.infn.it:2119/jobmanager-lcgsge-gilda                  18
 - gn0.hpcc.sztaki.hu:2119/jobmanager-lcgpbs-gilda                  9
 - ce-edu.grid.acad.bg:2119/jobmanager-pbs-gilda                    8
 - dgt01.ui.savba.sk:2119/jobmanager-lcgpbs-gilda                   4
 - ce.hpc.iit.bme.hu:2119/jobmanager-lcgpbs-gilda                   1
 - gilda-01.pd.infn.it:2119/jobmanager-lcgpbs-gilda                 -1
 - grid010.ct.infn.it:2119/jobmanager-lcgpbs-long                   -1

==========================================================================

Por último, enviamos el trabajo.

$> glite-wms-job-submit -d $USER -o jobid hostname.jdl

Connecting to the service https://gilda-wms-01.ct.infn.it:7443/glite_wms_wmproxy_server


====================== glite-wms-job-submit Success ======================

The job has been successfully submitted to the WMProxy
Your job identifier is:

https://gilda-lb-01.ct.infn.it:9000/fAl3r9HXQ2aNKZAgMLOmbg

The job identifier has been saved in the following file:
/home/gijon01/glite/hostname/jobid

==========================================================================


Este comando retorna el identificador del trabajo que se utilizará para realizar acciones posteriores sobre el trabajo (por ejemplo monitorización). La opción -o jobid permite almacenar ese identificador en un fichero.

Mientras se ejecuta podemos consultar el estado del trabajo.

$> glite-wms-job-status -i jobid


*************************************************************
BOOKKEEPING INFORMATION:

Status info for the Job : https://gilda-lb-01.ct.infn.it:9000/fAl3r9HXQ2aNKZAgMLOmbg
Current Status:     Scheduled
Status Reason:      Job successfully submitted to Globus
Destination:        iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-long
Submitted:          Fri Mar  6 20:17:17 2009 CET
*************************************************************

$> glite-wms-job-status -i jobid


*************************************************************
BOOKKEEPING INFORMATION:

Status info for the Job : https://gilda-lb-01.ct.infn.it:9000/fAl3r9HXQ2aNKZAgMLOmbg
Current Status:     Running
Status Reason:      Job successfully submitted to Globus
Destination:        iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-long
Submitted:          Fri Mar  6 20:17:17 2009 CET
************************************************************

Espera a que el trabajo termine. Mientras tanto, puedes utilizar la opción -v 2 y -v 3 para obtener información adicional sobre el trabajo. Inspecciona los atributos.

$> glite-wms-job-status -i jobid


*************************************************************
BOOKKEEPING INFORMATION:

Status info for the Job : https://gilda-lb-01.ct.infn.it:9000/fAl3r9HXQ2aNKZAgMLOmbg
Current Status:     Done (Success)
Logged Reason(s):
    -
    - Job terminated successfully
Exit code:          0
Status Reason:      Job terminated successfully
Destination:        iceage-ce-01.ct.infn.it:2119/jobmanager-lcgpbs-long
Submitted:          Fri Mar  6 20:17:17 2009 CET
*************************************************************

Una vez que el trabajo haya terminado, recogemos los resultados con el siguiente comando.

$> glite-wms-job-output -i jobid --dir output

Connecting to the service https://gilda-wms-01.ct.infn.it:7443/glite_wms_wmproxy_server


================================================================================

                        JOB GET OUTPUT OUTCOME

Output sandbox files for the job:
https://gilda-lb-01.ct.infn.it:9000/fAl3r9HXQ2aNKZAgMLOmbg
have been successfully retrieved and stored in the directory:
/home/gijon01/glite/hostname/output

================================================================================


El comando glite-wms-job-output escribe los ficheros de salida (los indicados en el atributo OutputSandbox del JDL) en el directorio que le indiquemos. En este caso en el directorio output.

Comprobamos el resultado de la ejecución.

$> cat output/hostname.err
$> cat output/hostname.out
iceage-wn-14.ct.infn.it

Nota

Podemos cancelar la ejecución de un trabajo con el comando glite-wms-job-cancel -i jobid.

7.5. Gestión de datos

Las herramientas que nos permiten gestionar los datos se basan en el valor de ciertas variabled de entorno. Vamos a comprobar su valor.

$> echo $LCG_GFAL_INFOSYS; echo $LCG_CATALOG_TYPE; echo $LFC_HOST
glite-rb.ct.infn.it:2170
lfc
lfc-gilda.ct.infn.it

Cada organización tiene sus ficheros colgando del sistema de ficheros virtual sobre /grid. Podemos obtener un listado de los ficheros con el siguiente comando.

$> lfc-ls -l /grid/gilda
drwxr-xr-x   1 156      104                       0 Jun 13  2008 LFCApiJava
drwxrwxr-x   2 104      117                       0 Dec 02 10:48 MAGIC
drwxrwxr-x   2 104      104                       0 Aug 27  2008 MrBayes
drwxrwxr-x   1 104      104                       0 Sep 15 10:58 NOAH
drwxrwxr-x   1 124      104                       0 Jul 21  2008 aula_grid
drwxrwxr-x   0 124      104                       0 Jun 30  2008 aula_grid_11
drwxrwxr-x   3 152      104                       0 Jul 25  2008 balasko
drwxrwxr-x   3 137      104                       0 Jul 14  2008 cdg
drwxrwxr-x   2 129      104                       0 Jun 30  2008 clermont
drwxrwxr-x  27 101      104                       0 Feb 22 20:38 corsogrid
drwxrwxr-x   4 112      117                       0 Feb 26 10:08 emidio
drwxrwxr-x  43 126      104                       0 Mar 03 15:36 generated
drwxrwxr-x  19 418      104                       0 Sep 10 11:52 greifswald
drwxrwxr-x   9 102      104                       0 Jan 06 08:38 hermann
drwxrwxr-x   6 111      104                       0 Jun 30  2008 lTriPadova
drwxrwxr-x   1 155      104                       0 Jul 24  2008 messina
drwx------   1 126      104                       0 May 21  2008 nawouak
drwx------  12 114      104                       0 May 20  2008 novak
drwx------   0 137      104                       0 Jun 18  2008 salvo_21
drwxrwxr-x   2 120      104                       0 Sep 03  2008 sipos
drwx------  73 110      104                       0 May 22  2008 szalontai
drwxrwxr-x   8 101      104                       0 Jul 15  2008 trailers
drwxrwxr-x 244 120      104                       0 Mar 06 17:32 tutorials
drwxrwxr-x 124 101      104                       0 Feb 10 22:53 users
drwxrwxr-x   1 125      104                       0 Jun 08  2008 xiny

Para no tener que poner el path absoluto constantemente, podemos establecer una variable de entorno con el path sobre el que vamos a trabajar.

$> export LFC_HOME=/grid/gilda/tutorials
$> lfc-ls -l
-rw-rw-r--   1 332      104                      26 Jul 18  2008 CHANGEME
drwxrwxr-x  15 413      104                       0 Feb 24 16:53 CSC08
drwx------   2 731      104                       0 Feb 24 16:56 CesarDiaz
drwxrwxr-x   2 385      104                       0 Jul 29  2008 DeonDir
drwxrwxr-x   1 341      104                       0 Oct 03 18:07 Docking
drwxrwxr-x   1 104      104                       0 Jan 20 15:59 GridVideo
drwxrwxr-x   1 723      104                       0 Feb 24 14:33 ISIMA03
drwxrwxr-x   1 718      104                       0 Feb 24 15:00 ISIMA12
drwxrwxr-x   0 725      104                       0 Feb 24 15:13 ISIMA15
drwxrwxr-x   1 724      104                       0 Feb 24 14:52 ISIMA19
drwxrwxr-x   1 732      104                       0 Feb 24 16:48 JJM
drwxrwxr-x   6 104      104                       0 Mar 03 17:43 MrBayes
dr-----r-t   0 307      104                       0 Jul 16  2008 NewFolder
drwxrwxr-x   1 490      104                       0 Nov 02 01:14 YAST
drwxrwxr-x   1 609      104                       0 Dec 11 14:48 akos_test
drwxrwxr-x   2 197      104                       0 Jun 18  2008 albertSA
drwxrwxr-x   1 225      104                       0 Jul 01  2008 antonio
drwxrwxr-x   5 359      104                       0 Jul 26  2008 assaf
drwxrwxr-x   1 196      104                       0 Jun 18  2008 bazinski
drwxrwxr-x   5 544      104                       0 Nov 12 13:26 beersheva
drwxrwxr-x   2 727      104                       0 Feb 24 16:30 bogota14

...

Ahora las referencias a un path relativo se refieren al path establecido con la variable de entorno anterior.

Antes de crear ficheros vamos a crear un directorio que contenga nuestra información.

$> lfc-mkdir $USER

Este comando crea un directorio sobre /grid/gilda/tutorials. Vamos a comprobar que se ha creado correctamente.

$> lfc-ls -l /grid/gilda/tutorials | grep $USER
drwxrwxr-x   0 746      104                       0 Mar 07 10:19 gijon01

Hay un conjunto de comandos que nos permiten interactuar con los ficheros y directorios. Algunos de estos comandos son los siguientes.

  • lfc-chmod - Cambia los permisos de los ficheros y directorios.

  • lfc-chown - Cambia el dueño y el grupo de los ficheros y directorios.

  • lfc-delcomment - Borra comentarios asociados a ficheros y directorios.

  • lfc-getacl - Obtiene las listas de control de acceso (ACLs) asociadas a ficheros y directorios.

  • lfc-ln - Crea enlaces simbólicos a ficheros y directorios.

  • lfc-ls - Lista el contenido de un directorio.

  • lfc-mkdir - Crea un directorio.

  • lfc-rename - Cambia el nombre de un fichero o directorio.

  • lfc-rm - Borra un fichero o directorio.

  • lfc-setacl - Establece las listas de control de acceso (ACLs) asociadas a ficheros y directorios.

  • lfc-setcomment - Añade y reemplaza comentarios.

Nota

Se puede acceder a la ayuda de todos los comandos con man lfc-*.

A continuación vamos a crear un fichero para copiarlo a nuestro directorio. Antes creamos el directorio oportuno.

$> mkdir ~/glite/data
$> cd ~/glite/data
$> echo "Adios mundo cruel" > datos.txt

Para transferir ficheros e interactuar con los elementos de almacenamiento, gLite proporciona una serie de comandos adicionales denominados lcg_utils. Estas herramientas permiten tranferir ficheros desde los elementos de computación a los elementos de almacenamientos, nos permiten replicar y registrar ficheros, etc.

Para copiar un fichero vamos a utilizar el comando lcg-cr (Copy & Register). Este comando se encarga de subir un fichero local a un destino remoto y además registra el fichero en el catálogo de ficheros. El comando tiene la siguiente sintaxis.

lcg-cr [-v | --verbose] -d <destination_host> -l <logicalFileName> <src_file>

Primero nos hace falta saber los SEs disponibles.

$> lcg-infosites --vo gilda se
Avail Space(Kb) Used Space(Kb)  Type    SEs
----------------------------------------------------------
5368699         10              n.a     se-edu.grid.acad.bg
7420000         25218           n.a     se.hpc.iit.bme.hu
297850000       73371805        n.a     aliserv6.ct.infn.it
n.a             3198673         n.a     gilda-02.pd.infn.it
53770000        n.a             n.a     vega-se.ct.infn.it
62230000        1490830         n.a     iceage-se-01.ct.infn.it
98330000        n.a             n.a     dgt02.ui.savba.sk
952930000       n.a             n.a     gilda-se.rediris.es
1030000000      31              n.a     fn2.hpcc.sztaki.hu

Vamos a utilizar el que más espacio libre tenga disponible, en este caso fn2.hpcc.sztaki.hu.

$> lcg-cr -v -d fn2.hpcc.sztaki.hu -l lfn:/grid/gilda/tutorials/$USER/datos.txt file:$PWD/datos.txt
Using grid catalog type: lfc
Using grid catalog : lfc-gilda.ct.infn.it
Using LFN : /grid/gilda/tutorials/gijon01/datos.txt
SE type: SRMv2
Using SURL : srm://fn2.hpcc.sztaki.hu/dpm/hpcc.sztaki.hu/home/gilda/generated/2009-03-07/filece ...
Alias registered in Catalog: lfn:/grid/gilda/tutorials/gijon01/datos.txt
Source URL: file:/home/gijon01/glite/data/datos.txt
File size: 18
VO name: gilda
Destination specified: fn2.hpcc.sztaki.hu
Destination URL for copy: gsiftp://fn2.hpcc.sztaki.hu/fn2.hpcc.sztaki.hu:/storage/gilda/2009-03-07/ ...
# streams: 1
# set timeout to 0 seconds
           18 bytes      0.02 KB/sec avg      0.02 KB/sec inst
Transfer took 1010 ms
Destination URL registered in Catalog: srm://fn2.hpcc.sztaki.hu/dpm/hpcc.sztaki.hu/home/gilda/generated/ ...
guid:266f21e4-c479-40da-bc65-b13a1675b653

Fíjate en el resultado ofrecido por el comando anterior, contiene información muy interesante. El comando anterior realiza diversas tareas. En primer lugar transfiere el fichero local a un SE (fn2.hpcc.sztaki.hu). El SE tiene una interfaz SRM y le asigna al fichero subido un nombre SURL. También se realiza una asociación entre el SURL y un GUID que se ha generado para ese fichero. El guid es único para cada fichero. Por último, se realiza otra asociación entre el guid y el nombre lógico (se registra en el catálogo de ficheros), en este caso lfn:/grid/gilda/tutorials/gijon01/datos.txt. Desde el punto de vista del usuario, sólo el nombre lógico es importante, para realizar cualquier acceso al fichero necesita ese nombre. Internamente, un acceso a un fichero con ese nombre se transforma en un acceso al GUID, que a su vez se transforma en un acceso al SURL que está almacenado en un elemento de almacenamiento (SE). Por último, el acceso al SURL se transforma en un acceso al TURL, en el caso anterior gsiftp://fn2.hpcc.sztaki.hu/...

Comprobamos que se ha registrado correctamente.

$> lfc-ls -l $USER
-rw-rw-r--   1 746      104                      18 Mar 07 11:05 datos.txt
$> lfc-ls -l /grid/gilda/tutorials/$USER
-rw-rw-r--   1 746      104                      18 Mar 07 11:05 datos.txt

glite define un fichero grid como aquel que está almacenado en el SE y que está registrado en el catálogo de ficheros.

Un fichero lógico puede hacer referencia a un localización física o a varias en caso de que esté replicado. Vamos a comprobar las localizaciones físicas a las que hace referencia nuestro fichero utilizando el comando lcg-lr.

$> lcg-lr lfn:/grid/gilda/tutorials/$USER/datos.txt
srm://fn2.hpcc.sztaki.hu/dpm/hpcc.sztaki.hu/home/gilda/generated/2009-03-07/filecef87 ...

gLite nos permite replicar ficheros entre varios SEs. El objetivo es múltiple, por un lado un trabajo accederá al fichero en el SE más cercano, además en caso de que un SE no esté disponible podríamos acceder al fichero en otro SE que también lo contenga.

Vamos a replicar nuestro fichero. Para ello utilizaremos el comando lcg-rep. La replica la realizaremos en el SE iceage-se-01.ct.infn.it.

$> lcg-rep -v -d iceage-se-01.ct.infn.it lfn:/grid/gilda/tutorials/$USER/datos.txt
Using grid catalog type: lfc
Using grid catalog : lfc-gilda.ct.infn.it
Source SE type: SRMv2
Destination SE type: SRMv1
Source URL: lfn:/grid/gilda/tutorials/gijon01/datos.txt
File size: 18
VO name: gilda
Destination specified: iceage-se-01.ct.infn.it
Source URL for copy: gsiftp://fn2.hpcc.sztaki.hu/fn2.hpcc.sztaki.hu:/storage/gilda/2009-03-07/filecef872...
Destination URL for copy: gsiftp://iceage-se-01.ct.infn.it/iceage-se-01.ct.infn.it:/data/gilda/2009-03-0...
# streams: 1
# set timeout to 0
            0 bytes      0.00 KB/sec avg      0.00 KB/sec inst
Transfer took 2860 ms
Destination URL registered in file catalog: srm://iceage-se-01.ct.infn.it/dpm/ct.infn.it/home/gilda/generated/2009-03-07/file3258aa28-909d-4f9c-bd9...

Vamos a comprobar de nuevo las localizaciones físicas a las que hace referencia nuestro fichero (nos debe mostrar las dos replicas).

$> lcg-lr lfn:/grid/gilda/tutorials/$USER/datos.txt
srm://fn2.hpcc.sztaki.hu/dpm/hpcc.sztaki.hu/home/gilda/generated/2009-03-07/filecef87 ...
srm://iceage-se-01.ct.infn.it/dpm/ct.infn.it/home/gilda/generated/2009-03-07/file3258 ...

Ahora vamos a crear un enlace simbólico.

$> lfc-ln -s /grid/gilda/tutorials/$USER/datos.txt /grid/gilda/tutorials/$USER/link_datos.txt

En nuestro directorio aparecerán dos ficheros.

$> lfc-ls -l $USER
-rw-rw-r--   1 746      104                      18 Mar 07 11:05 datos.txt
lrwxrwxrwx   1 746      104                       0 Mar 07 11:44 link_datos.txt -> /grid/.../datos.txt

Si comprobamos las localizaciones físicas a las que hace referencia nuestro nuevo fichero deberíamos obtener los mismos resultados que antes.

$> lcg-lr lfn:/grid/gilda/tutorials/$USER/link_datos.txt
srm://fn2.hpcc.sztaki.hu/dpm/hpcc.sztaki.hu/home/gilda/generated/2009-03-07/filece...
srm://iceage-se-01.ct.infn.it/dpm/ct.infn.it/home/gilda/generated/2009-03-07/file3...

Al igual que tenemos la opción de subir un fichero a un SE tenemos la opción de descargar un fichero desde un SE, siempre usando el nombre lógico como referencia. Para descargar un fichero utilizaremos el comando lcg-cp.

$> lcg-cp -v lfn:/grid/gilda/tutorials/$USER/link_datos.txt file:$PWD/copia_datos.txt
Using grid catalog type: lfc
Using grid catalog : lfc-gilda.ct.infn.it
VO name: gilda
Source SE type: SRMv1
Source URL: lfn:/grid/gilda/tutorials/gijon01/link_datos.txt
File size: 18
Source URL for copy: gsiftp://iceage-se-01.ct.infn.it/iceage-se-01.ct.infn.it:/data/gilda/2009-03-07/file3258...
Destination URL: file:/home/gijon01/glite/data/copia_datos.txt
# streams: 1
# set timeout to  0 (seconds)
            0 bytes      0.00 KB/sec avg      0.00 KB/sec inst
Transfer took 1010 ms

Verificamos que el contenido del fichero es correcto.

$> cat copia_datos.txt
Adios mundo cruel

7.6. Trabajos con dependencias de datos

Como ya se ha visto en la sesión de Condor-G, muchos trabajos tienen el objetivo de procesar ficheros que se encuentran distribuidos por el grid. Para ejemplificar este tipo de trabajos vamos a realizar uno que se encargue de contar las palabras de un fichero. Dicho fichero estará almacenado en el grid y accederemos a él con su nombre lógico.

Creamos un directorio para contener los ficheros.

$> mkdir ~/glite/wc
$> cd ~/glite/wc

Creamos el programa que se va a ejecutar en el trabajo.

$> cat > wrapper.sh
# Establecer las variables de entorno
export LFC_HOST=lfc-gilda.ct.infn.it
export LCG_GFAL_INFOSYS=glite-rb.ct.infn.it:2170
export LCG_CATALOG_TYPE=lfc

# Descargar el fichero desde el SE
lcg-cp --vo gilda $1 file:$PWD/local_file

# Procesar el fichero
/usr/bin/wc -w < local_file > numwords.txt

# Subir el fichero con los resultados
lcg-cr -l $2  file:$PWD/numwords.txt

El programa transferirá un fichero desde el grid, a continuación lo procesará, y por último, transferirá los resultados de nuevo al grid.

Creamos también el fichero de descripción del trabajo.

$> cat > wc.jdl
Type = "Job";
JobType = "Normal";

Executable = "/bin/sh";
Arguments = "wrapper.sh lfn:_BASE_/_USER_/datos.txt lfn:_BASE_/_USER_/wdatos.txt"; 

StdOutput = "std.out";
StdError = "std.err";

InputSandbox = "wrapper.sh";
OutputSandbox = {"std.out","std.err"};

InputData = {"lfn:_BASE_/_USER_/datos.txt"};
DataCatalog = "http://lfc-gilda.ct.infn.it:8085";
DataAccessProtocol = {"rfio","gsiftp"};

RetryCount = 3;

Sustituimos _USER_ y _BASE_.

$> sed -i "s/_USER_/$USER/g" wc.jdl
$> sed -i "s/_BASE_/\/grid\/gilda\/tutorials/g" wc.jdl
$> cat wc.jdl
Type = "Job";
JobType = "Normal";

Executable = "/bin/sh";
Arguments = "scriptInputData.sh lfn:/grid/gilda/tutorials/gijon01/datos.txt lfn:/grid/gilda/...
StdOutput = "std.out";
StdError = "std.err";

InputSandbox = "wrapper.sh";
OutputSandbox = {"std.out","std.err"};

InputData = {"lfn:/grid/gilda/tutorials/gijon01/datos.txt"};
DataCatalog = "http://lfc-gilda.ct.infn.it:8085";
DataAccessProtocol = {"rfio","gsiftp"};

RetryCount = 3;

El atributo InputData le indica al sistema de planificación de trabajos que este trabajo tiene una dependencia de un fichero. El planificador asignará la ejecución del trabajo al elemento de computación más cercano al SE que almacena el fichero. Para realizar esta tarea, el planificador de trabajo determina las replicas a las que hace referencia el nombre lógico del fichero.

Envía el trabajo, monitoriza su estado y espera a que termine.

Recoge los resultados del trabajo y verifica que el fichero que contiene la salida de error está vacio. Si todo ha funcionado bien debería haber aparecido un nuevo fichero sobre nuestro directorio.

$> lfc-ls $USER
datos.txt
link_datos.txt
wdatos.txt

Transfiere el fichero wdatos.txt a tu directorio local y comprueba que el contenido es correcto.

Atención

Acuérdate de borrar los ficheros y directorios que has creado en /grid/gilda.

Para borrar un fichero utilizamos el comando lcg-del que también se encarga de eliminar el registro en el catálogo de ficheros. lfc-rm será el encargado de borrar un directorio.

$> lcg-del -a lfn:/grid/gilda/tutorials/$USER/datos.txt
$> lcg-del -a lfn:/grid/gilda/tutorials/$USER/wdatos.txt
$> lfc-rm -r /grid/gilda/tutorials/$USER

Verifica que no has dejado ningún fichero en el grid.

$> lfc-ls /grid/gilda/tutorials | grep $USER

Nota

Si te queda tiempo puedes descargar los ejemplos en https://gilda.ct.infn.it/RPMS/GILDA-TAR-APPLICATIONs.tar.gz utilizando wget --no-check-certificate y probar a ejecutarlos sobre glite. Como verás hay muchas más opciones de las que hemos visto en esta sesión de prácticas. También se puede consultar el manual de usuario de gLite.

Con los recursos que nos ofrece gilda a través de gLite podríamos ejecutar el programa pcrack para analizar millones de contraseñas en un periodo de tiempo reducido. ¿Te atreves a intentarlo?

Atención

Cuando termines la sesión de prácticas, guarda los ficheros que has ido creando (Puedes usar el WinSCP).