FESR Consorzio COMETA - Progetto PI2S2 Job Description Language (JDL) Marcello Iacono Manno Consorzio COMETA Grid Tutorial per l’Università di Catania Catania, 14 Marzo 2007
Catania, Grid Tutorial per l'Universita' di Catania, JDL descrive una richiesta al WMS … e quindi, permette la sottomissione di uno o più job i descrittori sono detti attributi gli attributi obbligatori sono i descrittori del processo i descrittori delle risorse sono forniti dall’Information Service (IS) e seguono lo schema Glue (gLite) Generalità sul JDL
Catania, Grid Tutorial per l'Universita' di Catania, Formato del linguaggio JDL una lista di voci racchiuse da [ ] ciascuna voce termina con ; entry: = | ; attributo: una stringa con il nome dell’attributo valore: stringa “abc” una stringa tra doppi apici intero 1234 virgola mobile logico “true”,”false”, espressione (vedi GLUE) classads (vedi “nodes”) lista di valori: racchiusa da { } voci separate da, { “abc”, “bcd”, “def” }
Catania, Grid Tutorial per l'Universita' di Catania, Request types Type = “Job”un semplice job (default) “DAG” un Direct Acyclic Graph di job collegati “Collection”un insieme di job indipendenti
Catania, Grid Tutorial per l'Universita' di Catania, JobType JobType = “Normal”un semplice job “Interactive”un job che stabilisce una sessione interattiva con l’utente “MPICH”un job parallelo MPI “Partitionable”un job composto da un insieme di passi indipendenti adatti ad una esecuzione parallela “Checkpointable” un job che conserva il suo stato e può ripartire da una punto predefinito “Parametric”un job con uno o più attributi parametrici che variano da una sottomissione all’altra
Catania, Grid Tutorial per l'Universita' di Catania, Executable Executable = il percorso del file eseguibile (*) “/usr/bin/java/j2sdk1.5.0/bin/java”, “/home/user/executable.exe” variabili d’ambiente utilizzabili(*) “$JAVA/bin/java” percorsi assoluti o relativi (*) “executable.exe” deve essere inserito anche nell’Input Sandbox file remoti accessibili via gsiftp obbligatorio per tutti i job caratteri speciali non consentiti gli argomenti sono riportati in un attributo a parte (*) sul WN di esecuzione
Catania, Grid Tutorial per l'Universita' di Catania, Arguments Arguments = argomenti per il file eseguibile: “-out outputfile.dat” insieme con: Executable = “execprog”; forma sul Worker Node (WN) la linea di comando: $ execprog -out outputfile.dat le virgolette “” devono essere precedute dalla sbarra inversa \ “ -a \”quoted string\” -bcd” diventa (con l’eseguibile precedente): $ execprog -a ”quoted string” -bcd
Catania, Grid Tutorial per l'Universita' di Catania, StdInput, StdOutput, StdError StdInput, StdOutput, StdError = i percorsi per I file di ingresso / di uscita / di errore stesse regole di Executable bisogna specificare anche in Input/Output Sandbox StdOutput e StdError possono coincidere attributo non richiesto per i job interattivi esempi: StdInput = “/home/iacono/config.dat”; StdOutput = “gsiftp://grid999.ct.infn.it:1234/tmp/file.out”;
Catania, Grid Tutorial per l'Universita' di Catania, InputSandbox & OutputSandbox InputSandbox, OutputSandbox = identifica: i file di input da copiare dall’interfaccia sul WN prima dell’esecuzione del job i file di output che devono essere ricopiati dal WN all’interfaccia dopo l’esecuzione del job (il trasferimento vero e proprio è effettuato con l’istruzione glite-job-output ) i caratteri jolly sono accettati solo se risolti localmente non ammessi i file remoti (si richiedono InputData o script di copia) i file in InputSandbox non devono superare 10 MB ciascuno i nomi dei file devono essere differenti (la directory di arrivo è uguale per tutti) esempio: InputSandbox= { “myinp1.dat“, ”data/myinp2.dat” };
Catania, Grid Tutorial per l'Universita' di Catania, InputSandboxBaseURI & C. InputSandboxBaseURI, OutputSandboxBaseDestURI = modifica il percorso delle I/O Sandbox puntando ad un gsiFTP server esprime i nomi dei file come file locali nelle I/O Sandbox permette il recupero automatico dei file in uscita alla fine del job è previsto a breve il supporto per i file http esempio: InputSandboxBaseURI =“gsiftp://grid999.ct.infn.it:1234:/tmp”; modifica il significato di InputSandbox = “myfile.dat”; in: InputSandbox = “gsiftp://grid999.ct.infn.it:1234/tmp/myfile.dat”; OutputSandboxDestURI = modifica il percorso di ogni singolo file gsiFTP in OutputSandbox richiede lo stesso numero di voci di OutputSanbox permette il recupero automatico dei file in uscita alla fine del job non è compatibile con OutputSandboxBaseDestURI
Catania, Grid Tutorial per l'Universita' di Catania, ExpiryTime & Environment ExpiryTime = un job che non riesce a ad essere eseguito viene abortito dopo 1 giorno di tentativi non riusciti questo attributo modifica la durata standard esprime i secondi da un momento prefissato glite-job-submit permette di esprimerlo in maniera più comoda Environment = variabili d’ambiente formato delle stringhe: = esempio: Environment = { “JOB_LOG_FILE=/tmp/job.log”, “INP_DIR=/tmp/input_files” };
Catania, Grid Tutorial per l'Universita' di Catania, PerusalFileEnable,PerusalTimeInterval & PerusalFileDestURI PerusalFileEnable = abilita l’ispezione dei file durante l’esecuzione del job esempio: PerusalFileEnable = “true”; PerusalTimeInterval = la lunghezza dell’intervallo in secondi tra due ispezioni esempio: PerusalTimeInterval = 10; PerusalFileDestURI = una stringa con l’URI di un server gridFTP o https
Catania, Grid Tutorial per l'Universita' di Catania, InputData InputData = identifica i file remoti (LFN, GUID, LD e/o query) interroga il relativo catalogo per individuare i file copia i file nella directory corrente del WN influenza la scelta del matchmaking esempio: InputData = { “lfn:/grid/gilda/isospin.dat”, “guid:135b7b23-4a6a-87e7-9d101f8c8b70”, “lds:testfile.inp” // LDS catalog “query: select my_files”, // LDS catalog “si-lfn:/file.inp” /* StorageIndex catalog */ }; quando il catalogo non è specificato (come nei primi due casi), se StorageIndex è definito, allora si utilizza il catalogo da questo indicato, altrimenti vengono provati nell’ordine prima il catalogo RLS e poi quello DLI
Catania, Grid Tutorial per l'Universita' di Catania, StorageIndex = (*) endpoint URL del servizio StorageIndex (SI) per risolvere i nomi dei file esempio: StorageIndex = " catalog-service-fr-mysql/services/SEIndex" StorageIndex & DataCatalog DataCatalog = (*) endpoint URL del servizio RLS o DLI per risolvere i nomi dei file esempio: DataCatalog = “ service-fr-mysql/services/FiremanCatalog"; (*) da usare solo con InputData
Catania, Grid Tutorial per l'Universita' di Catania, OutputSE & OutputData OutputSE = endpoint URL di uno StorageElement (SE) per i file di output influenza la decisione sulla destinazione del job esempio: OutputSE = “grid009.ct.infn.it”; OutputData = (*) lista di classads per descrivere i file di output (vedi “nodes”) simile a DataRequirements salvataggio automatico dei file alla fine del job (*) ancora non supportato
Catania, Grid Tutorial per l'Universita' di Catania, DataAccessProtocol & DataRequirements DataAccessProtocol = i protocolli da usare per le operazioni sui file obbligatorio con InputData esempio: DataAccessProtocol = { “file”, “gridftp” }; DataRequirements = le caratteristiche dei file (nel formato classad) esempio: DataRequirements = { [ DataCatalogType = “...” ; DataCatalog = “ InputData = { “lfn:…”, “guid:…”, “lds:…”, “query:…” }; ], [ DataCatalogType = “SI”; …. ] };
Catania, Grid Tutorial per l'Universita' di Catania, VirtualOrganisation, RetryCount & ShallowRetryCount VirtualOrganisation = il nome della Virtual Organisation (VO) deve corrispondere con il certificato a bordo dell’interfaccia superato dall’opzione –vo in glite-job-submit esempio: VirtualOrganisation = “gilda”; RetryCount, ShallowRetryCount = indica quante volte un job deve essere ri-sottomesso se fallisce a causa di una risorsa di GRID non valido per DAG / Collection limitato dal parametro MaxRetryCount “shallow” se il job è stato abortito prima dell’esecuzione la ri-sottomissione “deep” azzera il contatore “shallow”
Catania, Grid Tutorial per l'Universita' di Catania, LBAddress & VOMSProxyServer LBAddress = l’indirizzo del Logging&Bookkeping (LB) server formato: [: ] default preso dalla configurazione WMS (port = 9000) esempio: LBAddress = “lb-grid.ct.infn.it“; MyProxyServer = l’indirizzo del proxy server rinnovo automatico del certificato proxy (job lunghi) porta di default = 7512 esempio: MyProxyServer = “grid001.ct.infn.it:7512”;
Catania, Grid Tutorial per l'Universita' di Catania, HLRLocation & JobProvenance HLRLocation = the user Home Location Register (HLR) HLR manages the economic transaction takes into for resource usage bills the job on the user account example: HLRLocation = “prod-hlr-01.ct.infn.it” JobProvenance = the endpoint URL of the JobProvenance service where data about the job have to be stored the WMS sends to this destination the job sandboxes files
Catania, Grid Tutorial per l'Universita' di Catania, NodeNumber & ListenerPort NodeNumber = un intero >1 per indicare quante CPU usare per un job MPI obbligatorio per il JobType = “MPICH” esempio: NodeNumber = 3; ListenerPort = il numero della porta a cui condor_console_shadow si collega per stabilire uno stream interattivo si usa con JobType = “Interactive” esempio: ListenerPort = 44000;
Catania, Grid Tutorial per l'Universita' di Catania, ListenerHost & ListenerPipeName ListenerHost = il nome dell’ host computer a cui condor_console_shadow si collega per stabilire uno stream interattivo si usa con JobType = “Interactive” è usata quando la sottomissione e la sessione interattiva avvengono su macchine diverse ListenerPipeName = il percorso assoluto delle pipe dove sono contenuti gli stream esempio: ListenerPipeName = “/tmp/pipe”; significa: stdin=/tmp/pipe.in, stdout=/tmp/pipe.out (default=/tmp/listener/ )
Catania, Grid Tutorial per l'Universita' di Catania, JobSteps JobSteps = un intero che indica il numero di passi di un job partizionabile o una lista di stringhe associate con le parti di programma eseguibili in maniera parallela il main stepper deve essere inserito nel job se si usa il classad JobState, questa definizione prevale esempi: JobSteps = 1000 ; (esegue 1000 passi del main stepper) JobSteps = { “a”,”b”,”c” }; (esegue le sezioni “a”, “b”, “c” del main stepper)
Catania, Grid Tutorial per l'Universita' di Catania, CurrentStep & JobState CurrentStep = un numero >0 da cui iniziare l’elaborazione di un job esempio: CurrentStep = 2; (default=0) JobState = lo stato di partenza da cui iniziare l’elaborazione di un job example: JobState = [ JobSteps = 1000; CurrentStep = 350; UserData = [ DumpPath=“gsiftp://grid999.ct.infn.it:1234/tmp/dumpfile” ] ]
Catania, Grid Tutorial per l'Universita' di Catania, GLUESchema GLUESchema (Grid Logical Uniform Environment) un modello di informazione per descrivere le caratteristiche e lo stato dei vari componenti dei GRID indipendente dalla particolare implementazione sintassi. esempi: entità = proprietà = Requirements = other.GlueCEUniqueID == "grid010.ct.infn.it:2119/jobmanager-lcgpbs-infinite" Requirements = other.GlueCEInfoLRMSType == "PBS" || other.GlueCEInfoLRMSType == "LSF"
Catania, Grid Tutorial per l'Universita' di Catania, Requirements & UserTags Requirements = un’espressione logica costruita con una sintassi simile al linguaggio C descrive le caratteristiche dei siti che devono eseguire il job gli attributi provengono dal GlueSchema gli attributi utilizzati sono quelli con il prefisso “other.” esempio: Requirements = other.GlueCEInfoTotalCPUs > 2 && other.GlueCEPolicyMaxRunningJobs < 2; UserTags = un attributo di tipo classad che l’utente può usare per associare al job una o più coppie di valori (tag) i valori definiti possono essere usati per effettuare ricerche sul LB
Catania, Grid Tutorial per l'Universita' di Catania, Rank & FuzzyRank Rank = un’espressione costruita con valore in virgola mobile per classificare i Computing Element (CE) il CE di rango più elevato sarà quello prescelto esempi: Rank = other.GlueCEPolicyMaxRunningJobs -other.GlueCEStateRunningJobs; (il CE con il numero massimo di slot liberi) Rank = - other.GlueCEStateEstimateResponseTime (il CE con il minimo tempo stimato di transito sulla coda) FuzzyRank = un valore logico per decidere se l’attribuzione del rango è di tipo fuzzy il valore default è falso
Catania, Grid Tutorial per l'Universita' di Catania, DAG: modifiche agli attributi DAG Attributes changes: Type e VirtualOrganisation: diventano attributi obbligatori JobType: non può essere Partitionable o CheckPointable HLRLocation, LBAddress, MyProxyServer and JobProvenance: se dichiarati, devono essere uguali per tutti i nodi del DAG AllowZippedISB: crea una InputSandbox per l’intero DAG PerusalFileEnable: se dichiarato per un nodo, viene esteso a tutti gli altri UserTags, Requirements and Rank: si applicano soltanto all’intero DAG InputSandbox, InputSandboxBaseURI and OuputSandboxBaseURI: i valori dichiarati per l’intero DAG sono ereditati dai singoli DAG
Catania, Grid Tutorial per l'Universita' di Catania, Nodes (1/2) Nodes = i classads descrivono i nodi e le loro dipendenze esempio : nodes = [ a = [ /* nodo “a” */ description = [ descrizione: un classad JobType = “Normal”; che contiene un file JDL Executable = “a.exe”; per descrivere un nodo InputSandbox = {…}; ]; b = [ /* nodo “b” */ file = node_b,jdl;file: una stringa che indica ];l’indirizzo assoluto di un … file JDL che descrive ]; un nodo
Catania, Grid Tutorial per l'Universita' di Catania, Nodes (2/2) & max_nodes_running dependencies = una lista che descrive le dipendenze, le stringhe sono i nomi dei nodi formato:{ { a, b }, { a, c }, { a, d }, { c, e }, { d, e } } esempio : dependencies = { { a, b };// il nodo “b” dipende dal nodo “a” { a, c };// il nodo “c” dipende dal nodo “a” { c, e }; // il nodo “e” dipende dai nodi “c” [...] }; max_nodes_running = un intero > 0 che indica il numero massimo di nodi cha possono essere sottomessi simultaneamente dal DAGman
Catania, Grid Tutorial per l'Universita' di Catania, Job Partizionabili JOB PARTIZIONABILI un job partizionabile ha tre passi: pre-job (nodo “a”) sub-job (nodi “b”,”c”,”d”) post-job (nodi “e”) i nodi intermedi sono indipendenti vengono trasformati in DAG i nodi devono essere sezionabili JobSteps (vedi 22) si usa per distribuire M nodi in N passi (con M < N ; si assume inoltre lo stesso peso per tutti i nodi)
Catania, Grid Tutorial per l'Universita' di Catania, StepWeight, PreJob & PostJob StepWeight = una lista di “pesi” per migliorare la partizione del job esempio: StepWeight = { 7.5, 15, 55, 15, 7.5 }; PreJob, PostJob = classad per la descrizione del pre- e del post-job esempio: PreJob = [ Type = “Job”;JobType = “Normal”; VirtualOrganisation = “gilda”;Executable = “pre-job.exe”; ];
Catania, Grid Tutorial per l'Universita' di Catania, Job parametrici Job = “Parametric” consiste nella sottomissione di un insieme di job identici eccetto che per un parametro il cui valore cambia è possibile tracciare ciascun job separatamente … … oppure tutti insieme come job parametrico una variabile speciale (_PARAM_) indica il valore variabile tra gli attributi _PARAM_ assume valori numerici generati automaticamente oppure stringhe tratte da una lista
Catania, Grid Tutorial per l'Universita' di Catania, ParameterStart, ParameterStep, Parameters, NodesCollocation Parameters = un intero che indica il numero di passi o una lista di stringhe (ogni stringa indica il nome di uno dei passi) ParameterStart, ParameterStep = ParameterStart indica il primo valore da assegnare ParameterStep indicates il valore di incremento tra due successivi valori assunti da _PARAM_ NodesCollocation = se è “vero”, tutti i job sono inviati allo stesso CE
Catania, Grid Tutorial per l'Universita' di Catania, Job Collections Job = “Collection” un insieme di job indipendenti tra loro sottomessi e monitorati come un’unica richiesta simile ai DAG, ma senza dipendenze estende tutte le clausole dei DAG i nodi sono descritti mediante classad gli attributi si riferiscono all’intera Collection un attributo definito per un singolo nodo, viene automaticamente esteso agli altri
Catania, Grid Tutorial per l'Universita' di Catania, GangMatching Requirements = anyMatch ( ) | whichMatch( ) | allMatch ( ) il file JDL serve per trovare un CE adatto lo Storage Element (SE) non viene considerato esiste un meccanismo più generale esempio: Requirements = anyMatch( other.storage.CloseSEs, target.GlueSAStateAvailableSpace > 200) costringe il Resource Broker (RB) a scegliere una CE con accanto un SE con almeno 200 MB di spazio disponibile
Catania, Grid Tutorial per l'Universita' di Catania, Documentazione JDL (sottomissione via WMS Netrwork Server) JDL (sottomissione via WMS WMProxy) GLUESchema CONDOR classads