Sistemas y servicios informáticos para Internet. Curso 2009-2010
Tabla de contenidos
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.
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ó.
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
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.
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
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
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.
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).
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.
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
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.
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
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.
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
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?