GAT Alexander Beck-Ratzka OFFIS, 23.06.06 23.06.2006 GAT 1 GAT: Agenda • Einführung – – – – Wieso eine neue Grid-API? Was bietet GAT, was nicht? Einfache Beispiele Architektur • Die einzelnen API-Gruppen – File (-Stream)-Management, Logical File-Management, – AdvertService-Management, – Job-Management • Adapter • Zusammenfassung 23.06.2006 GAT 2 Wieso eine neue Grid-API? GAT als einheitliche API für Zugriff auf heterogene Gridtechnologien / Gridmiddleware. GAT ist nur ein Framework; die eigentlichen Operationen müssen durch Adapter erledigt werden. GAT bietet die Möglichkeit des Adapter-Einsatzes. Neue Grid-Technologien müssen nur via Adapter mit ans GAT gekoppelt werden -> Keine Änderungen mehr im Programm-Code nötig, auch nicht bei neuer Grid-Technologie. GAT ermöglicht einen einfachen Zugriff auf Grid-Technologien. GAT verwendet die Grid-Middleware, welche gerade zur Verfügung steht, und das bei nur einem GAT_JobSubmit oder GATFileCopy... 23.06.2006 GAT 3 File copy: CoG/RFT package org.globus.ogsa.gui; import import import import import import import import import import import import import import TransferRequestType transferRequest = new TransferRequestType (); transferRequest.setTransferArray (transfers1); java.io.BufferedReader; java.io.File; java.io.FileReader; java.net.URL; java.util.Date; java.util.Vector; javax.xml.rpc.Stub; org.apache.axis.message.MessageElement; org.apache.axis.utils.XMLUtils; org.globus.* org.gridforum.ogsi.* org.gridforum.ogsi.holders.TerminationTimeTypeHolder; org.w3c.dom.Document; org.w3c.dom.Element; public class RFTClient { public static void copy (String source_url, String target_url) { try { File requestFile = new File (source_url); BufferedReader reader = null; try { reader = new BufferedReader (new FileReader (requestFile)); } catch (java.io.FileNotFoundException fnfe) { } Vector requestData = new Vector (); requestData.add (target_url); TransferType[] transfers1 = new TransferType[transferCount]; RFTOptionsType multirftOptions = new RFTOptionsType (); multirftOptions.setBinary (Boolean.valueOf ( (String)requestData.elementAt (0)).booleanValue ()); multirftOptions.setBlockSize (Integer.valueOf ( (String)requestData.elementAt (1)).intValue ()); multirftOptions.setTcpBufferSize (Integer.valueOf ( (String)requestData.elementAt (2)).intValue ()); multirftOptions.setNotpt (Boolean.valueOf ( (String)requestData.elementAt (3)).booleanValue ()); multirftOptions.setParallelStreams (Integer.valueOf ( (String)requestData.elementAt (4)).intValue ()); multirftOptions.setDcau(Boolean.valueOf( (String)requestData.elementAt (5)).booleanValue ()); int i = 7; for (int j = 0; j < transfers1.length; j++) { transfers1[j] = new TransferType (); transfers1[j].setTransferId transfers1[j].setSourceUrl transfers1[j].setDestinationUrl transfers1[j].setRftOptions int concurrency = Integer.valueOf ((String)requestData.elementAt(6)).intValue(); if (concurrency > transfers1.length) { System.out.println ("Concurrency should be less than the number" "of transfers in the request"); System.exit (0); } transferRequest.setConcurrency (concurrency); TransferRequestElement requestElement = new TransferRequestElement (); requestElement.setTransferRequest (transferRequest); ExtensibilityType extension = new ExtensibilityType (); extension = AnyHelper.getExtensibility (requestElement); OGSIServiceGridLocator factoryService = new OGSIServiceGridLocator (); Factory factory = factoryService.getFactoryPort (new URL (source_url)); GridServiceFactory gridFactory = new GridServiceFactory (factory); LocatorType locator = gridFactory.createService (extension); System.out.println ("Created an instance of Multi-RFT"); MultiFileRFTDefinitionServiceGridLocator loc = new MultiFileRFTDefinitionServiceGridLocator(); RFTPortType rftPort = loc.getMultiFileRFTDefinitionPort (locator); ((Stub)rftPort)._setProperty (Constants.AUTHORIZATION, NoAuthorization.getInstance()); ((Stub)rftPort)._setProperty (GSIConstants.GSI_MODE, GSIConstants.GSI_MODE_FULL_DELEG); ((Stub)rftPort)._setProperty (Constants.GSI_SEC_CONV, Constants.SIGNATURE); ((Stub)rftPort)._setProperty (Constants.GRIM_POLICY_HANDLER, new IgnoreProxyPolicyHandler ()); int requestid = rftPort.start (); System.out.println ("Request id: " + requestid); } catch (Exception e) { System.err.println (MessageUtils.toString (e)); } } (j); ((String)requestData.elementAt (i++)); ((String)requestData.elementAt (i++)); (multirftOptions); } 23.06.2006 GAT 4 File copy: Java-GAT import org.gridlab.gat.*; import org.gridlab.gat.io.File; public class RemoteCopy { public static void main(String[] args) throws Exception { GATContext context = new GATContext(); URI src = new URI(args[0]); URI dest = new URI(args[1]); File file = GAT.createFile(context, src); // create file object file.copy(dest); // and copy it GAT.end(); } } 23.06.2006 GAT 5 Was bietet GAT? (1) GAT will nicht die Grid-Infrastruktur ersetzen. GAT erlaubt einen einfachen Zugang zu vielen unterschiedlichen Grid-Infrastrukturen. • GRAM • Condor • Unicore • GridFTP • ... GAT ist ein OpenSource-Projekt. 23.06.2006 GAT 6 Was bietet GAT? (2) • Applikationen rufen die GAT-API für Grid-Operationen auf. Applikationen werden gegen das GAT gelinkt. • Applikationen unabhängig von der vorhandenen Infrastruktur. GAT Engine lädt verfügbare Adapter zur Laufzeit Während eines Calls zur GAT-API entscheidet die Engine, welcher Adapter die Grid-Operation ausführt. Bei einem Fehler in der „Grid-Operation“, Aufruf eines anderen Adapter. • Default-Adapter stellen lokale Operationen zur Verfügung Grid-Applikationen können ohne Grid-Services übersetzt, gelinkt und getestet werden. Die gleiche Applikation kann in einer „vollen Grid-Umgebung“ laufen: ohne erneutes build. 23.06.2006 GAT 7 Was bietet GAT? (3) Die GAT-API ändert sich nicht. Veränderung in Globus Job submit beispielsweise werden im GAT-Globus-Adapter nachvollzogen. GAT bietet Ausfallsicherheit: ist ein Grid-Service gerade nicht verfügbar, so wird ein anderer verfügbarer Grid-Service verwendet. GAT ist wesentlich leichter zu installieren als z.B. Globus. GAT bietet Grid mit minimalen Aufwand für Endanwender. 23.06.2006 GAT 8 Was bietet GAT nicht? GAT ersetzt keine Funktionen der Grid-Middleware. Ohne entsprechende Adapter wird eine Grid-Middleware nicht unterstützt. GAT bietet keinen ResourceBroker. 23.06.2006 GAT 9 GAT API Übersicht Dateioperationen (Monitoring und Events) Resourcen, Jobs (Informationsaustausch) (Utility-Klassen: Fehlerbehandlung, Security, Preferences) 23.06.2006 GAT 10 API Sub-Systeme File Subsystem GATFile GATEndpoint GATFilestream GATPipeListener GATLogicalFile GATPipe Monitoring und Event Subsystem GATRequestListener GATMetricListener GATRequestNotifier GATMetric GATAction GATMetricEvent Informations-Austausch Subsystem GATAdvertisable GATAdvertService Resource Management Subsystem GATSoftwareDescription GATJobDescription GATJob GATResourceDescription GATResourceBroker GATResoure GATReservation GATContext GATPreferences GATSecurityContext URL,Time, ... Utility Subsystem GATSelf GATStatus 23.06.2006 GAT 11 Beispiele (Java-GAT) Fileoperationen Job-Submit 23.06.2006 GAT 12 File Write (Java-GAT) import java.io.PrintWriter; import org.gridlab.gat.GAT.*; import org.gridlab.gat.io.FileOutputStream; public class FileStreamSimple { public static void main(String[] args) { GATContext context = new GATContext(); URI src = null; FileOutputStream stream = null; PrintWriter p; src = new URI(args[0]); stream = GAT.createFileOutputStream(context, null, src); p = new PrintWriter(stream); String toBeStreamed = "hello world\n"; p.println(toBeStreamed); p.close(); GAT.end(); } } 23.06.2006 GAT 13 Job Submit (Java-GAT) public class SubmitJobToHost { public static void main(String[] args) { GATContext context = new GATContext(); Preferences prefs = new Preferences(); prefs.put("ResourceBroker.adaptor.name", "globus"); prefs.put("ResourceBroker.jobmanager", "sge"); SoftwareDescription sd = new SoftwareDescription(); sd.setLocation(exe); sd.setStdout(outFile); sd.setStderr(errFile); sd.addPreStagedFile(pre1, pre1Dest); Hashtable hardwareAttributes = new Hashtable(); hardwareAttributes.put("machine.node", "fs0.das2.cs.vu.nl"); URI exe = null; File outFile = null; File errFile = null; File pre1 = null; File pre1Dest = null; ResourceDescription rd = new HardwareResourceDescription( hardwareAttributes); JobDescription jd = null; ResourceBroker broker = null; try { exe = new URI("file:////bin/hostname"); try { jd = new JobDescription(sd, rd); broker = GAT.createResourceBroker(context, prefs); } catch (Exception e) { System.err.println("Could not create Job description: " + e); System.exit(1); } outFile = GAT.createFile(context, prefs, new URI( "any://fs0.das2.cs.vu.nl/out")); errFile = GAT.createFile(context, prefs, new URI( "any://fs0.das2.cs.vu.nl/err")); pre1 = GAT.createFile(context, prefs, new URI( "any://fs0.das2.cs.vu.nl//bin/echo")); Job job = null; pre1Dest = GAT.createFile(context, prefs, new URI( "any://fs0.das2.cs.vu.nl//home/rob/my_temp_file")); } catch (Exception e) { System.err.println("error: " + e); System.exit(1); } 23.06.2006 try { job = broker.submitJob(jd); } catch (Exception e) { System.err.println("submission failed: " + e); e.printStackTrace(); System.exit(1); } GAT 14 GAT Architektur API flache Schicht; nur ein Frame. Adapter implementieren “GridFunktionalität” entsprechend der Anforderung durch API Engine vermittelt Zwischen API u. Adapter: die Adapter werden zur Laufzeit angesprungen error tracing und “Fallback” (default lokale Adapter) CPI für Implementation einzelner Adaptoren. 23.06.2006 GAT 15 GAT Architektur Applikations-Layer User Space Applikation GAT-Layer GAT API GAT Engine GAT Adapter „Grid“ Space GTK4 PBS SGE Globus 2/3.x Unicore 23.06.2006 DRMAA GAT 16 Implementation (Engine) C-Version voll implementiert C++-Wrapper voll implementiert Python-Wrapper voll implementiert JAVA-Version voll implementiert 23.06.2006 GAT 17 Implementation (Adapter) C-GAT Globus: • gram, gridftp, RLS, gsiscp, gsissh Unicore: • Job Submit, Job Monitoring DRMAA (Distributed Resource Management Application API) SGE (Sun Grid Engine) PBS (Portable Batch System) 23.06.2006 GAT 18 Implementation (Adapter) Java-GAT Globus: • Über Java Cog Paket alles für Globus 3.y; GTK 4 bisher nur ohne WebServices. Unicore: • In Arbeit SGE PBS 23.06.2006 GAT 19 Implementation (Adapter) Java-GAT und C-GAT Lokale Adpapter: • ssh, scp, ftp, sftp, • File-Adapter: (cp, mv, read, write, etc...) • Job-Adapter: fork, exec, auch über ssh... 23.06.2006 GAT 20 File.copy: prinzipieller Ablauf File.copy(dest) FileCPI.copy(dest) Adapter1 copy Adapter2 copy Adapter3 copy 23.06.2006 GAT 21 File Sub-System GATFile-Klasse GATObject GATFile Create Destroy Copy Move Delete IsReadable IsWritable GetLength LastWriteTime GetLocation 23.06.2006 GAT 22 File Sub-System GATFileStream-Klasse GATObject GATFileStream Create Destroy Read Write Seek 23.06.2006 GAT GAT_Metric GAT_Monitorable 23 File Sub-System GATLogicalFile-Klasse GATObject GATLogicalFile Create Destroy GetFiles GetLocations Remove RemoveFile AddFile AddLocation Replicate 23.06.2006 GAT GAT_Metric GAT_Monitorable GAT_AdvertService 24 Advert Paket Ziel: Verfügbarmachung wichtiger Infos an zentraler Stelle , z.B. Job fertig. Realisiert über SQL-Adaptor in C-GAT. 23.06.2006 GAT 25 Advert-Paket GATObject GATAdvertService Add Delete AddMetadata GetMetadata GetAdertisable Find SetPWD GetPWD 23.06.2006 GAT GAT_Advertisable 26 Job-Management Klassen GATResourceBroker GATJob Unschedule CheckPoint CloneJob Migrate Stop GetJobDescription GetState GetJobID GetNativeID ReserveResource FindResources SubmitJob 23.06.2006 GAT 27 Job-Management Verfügbare Job-Stati GATJobState Wert Bedeutung GATJobState Unknown Status nicht ermittelbar GATJobState Initial Im Initialisierungsstatus GATJobState Scheduled z.B. Queued GATJobState Running Job im executing GATJobState Stopped Job fertig oder gestoppt 23.06.2006 GAT 28 Job-Management Strukturen GATHardwareResourceDescription GATSoftwareResourceDescription Executable Arguments Stdin Stdout Stderr Pre-Stage-Files Post-Stage-Files Machine type Memory CPU-Time Nodes needed GATJobDescription 23.06.2006 GAT 29 Job-Management Beispiel (PBS-Adapter) GATHardwareResourceDescription machine.queue jobname yeo memory.size file.size cpu.walltime cpu.nodes 23.06.2006 = destination (-q) = jobname (-N) = join (-j) = mem (-l) = file (-l) = walltime (-l) = nodes (-l) GAT 30 Job-Management Beispiel (PBS-Adapter) GATSoftwareResourceDescription Stdin = stdin (exec < input) Stdout = stdout (-o) Stderr = stderr (-e) Executable = executable Arguments = arglist[] 23.06.2006 GAT 31 Job-Management Beispiel (PBS-Adapter) Umsetzung in QSUB-Skript machine.queue jobname yeo memory.size file.size cpu.walltime cpu.nodes = [email protected] = TestJob = eo = 1G = 2G = 12:00:00 =8 stdin stdout stderr executable arglist[0] arglist[1] arglist[2] = input = out.testjob = err.testjob = /bin/prog = arg1 = arg2 = lastarg 23.06.2006 #PBS -q [email protected] #PBS -l walltime=12:00:00, \ -mem=1G,file=2G,[email protected] #PBS -N testjob #PBS -o out.testjob #PBS -e err.testjob #PBS -j eo /bin/prog arg1 arg2 lastarg < input . . GAT 32 Job-Management Mängel Problem: Festlegung in HardwaresResourceDescription recht willkürlich. Lösung: Anbindung an JSDL-Standard. 23.06.2006 GAT 33 Job-Management Mängel Problem: Zu wenig JOB-Stati. Lösung: Anbindung an DRMAA. 23.06.2006 GAT 34 GAT Zukunft C-GAT ist im Maintenance Modus Java-GAT wird noch weiterentwickelt SAGA (Simple API for Grid Applications) soll neuer GGF-Standard werden. Erste Engine mit GAT-Wrapper und GTK4-Adaptoren im Herbst 23.06.2006 GAT 35 Anwendungsbeispiel ProC MPA Garching 23.06.2006 GAT 36 SAGA In Standard soll eingehen: GAT, Java-CoG, DRMAA, RealityGrid, JSDL, GridRPC, OSGA-BES, GridCPR, gLite, HDF5 An Entwicklung beteiligt: GAT, RealityGrid UK Science, OMII Grid UK Science, CCT Louisana, VU Netherlands, NAREGI Japan, Globus/CoG, GGF DRMAA, GGF GridRPC Wichtig: Bedarf an Adaptern anmelden! 23.06.2006 GAT 37 GAT-Anwender C-GAT Java-GAT SuperScalar (Univ. of Barcelona, ESP) SURA-Grid (63 partners, US) SCOOP project (LSU + 9 partners, US) UCOMS project (LSU + 4 partners, US) Cactus (LSU, US) Clusterix Project (PSNC, Univ. of Krakow, PL) Amolf (Vl-e, NL) Frank Seinstra (UvA, NL) Triana group (Cardiff, UK) 23.06.2006 MPA in Garching ProC-Workflows aufs Grid LSU in Baton Rouge Chemie-Projekt AMOLF NL Fourier Transform Mass Spectrometry (FTMS) Analyse. FTMSDaten werden mit JavaGAT ins Grid übertragen (ssh, sftp, gridftp). Multimedian Project NL Start paralleler Jobs ZIB Berlin INRIA Frankreich GAT 38 Links für GAT GAT allgemein: http://www.gridlab.org/WorkPackages/wp-1/ GAT CVS: cvsroot: Passwort: GAT-Quellen: GAT-Dokumente: Nur GATEngine: cvs.gridlab.org pserver:[email protected]:/cvs/gridlab anon wp-1/Codes wp-1/Documents wp-1/Codes/GATEngine Download tarball: http://www.gridlab.org/WorkPackages/wp-1/gatreleases.html http://www.gridlab.org/WorkPackages/wp-1/adaptorreleases.html GAT Mailing-Liste: [email protected] (www.listserv.dfn.de) 23.06.2006 GAT 39