Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

23.06.2006GAT1 Alexander Beck-Ratzka OFFIS, 23.06.06.

Ähnliche Präsentationen


Präsentation zum Thema: "23.06.2006GAT1 Alexander Beck-Ratzka OFFIS, 23.06.06."—  Präsentation transkript:

1 23.06.2006GAT1 Alexander Beck-Ratzka OFFIS, 23.06.06

2 23.06.2006GAT2 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

3 23.06.2006GAT3 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...

4 23.06.2006GAT4 File copy: CoG/RFT package org.globus.ogsa.gui; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.net.URL; import java.util.Date; import java.util.Vector; import javax.xml.rpc.Stub; import org.apache.axis.message.MessageElement; import org.apache.axis.utils.XMLUtils; import org.globus.* import org.gridforum.ogsi.* import org.gridforum.ogsi.holders.TerminationTimeTypeHolder; import org.w3c.dom.Document; import 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 (j); transfers1[j].setSourceUrl ((String)requestData.elementAt (i++)); transfers1[j].setDestinationUrl ((String)requestData.elementAt (i++)); transfers1[j].setRftOptions (multirftOptions); } TransferRequestType transferRequest = new TransferRequestType (); transferRequest.setTransferArray (transfers1); 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)); }

5 23.06.2006GAT5 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(); }

6 23.06.2006GAT6 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.

7 23.06.2006GAT7 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.

8 23.06.2006GAT8 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.

9 23.06.2006GAT9 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.

10 23.06.2006GAT10 GAT API Übersicht Dateioperationen (Monitoring und Events) Resourcen, Jobs (Utility-Klassen: Fehlerbehandlung, Security, Preferences) (Informationsaustausch)

11 23.06.2006GAT11 API Sub-Systeme File Subsystem GATFileGATFilestreamGATLogicalFile GATEndpointGATPipeListenerGATPipe Monitoring und Event Subsystem GATRequestListenerGATRequestNotifierGATAction GATMetricListenerGATMetricGATMetricEvent Informations-Austausch Subsystem GATAdvertisableGATAdvertService Resource Management Subsystem GATSoftwareDescriptionGATResourceDescriptionGATResoure GATJobDescriptionGATResourceBrokerGATReservation GATJob Utility Subsystem GATSelfGATContextGATSecurityContext GATStatusGATPreferencesURL,Time,...

12 23.06.2006GAT12 Beispiele (Java-GAT) Fileoperationen Job-Submit

13 23.06.2006GAT13 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(); }

14 23.06.2006GAT14 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"); URI exe = null; File outFile = null; File errFile = null; File pre1 = null; File pre1Dest = null; try { exe = new URI("file:////bin/hostname"); 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")); 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); } 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"); ResourceDescription rd = new HardwareResourceDescription( hardwareAttributes); JobDescription jd = null; ResourceBroker broker = null; 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); } Job job = null; try { job = broker.submitJob(jd); } catch (Exception e) { System.err.println("submission failed: " + e); e.printStackTrace(); System.exit(1); }

15 23.06.2006GAT15 GAT Architektur API flache Schicht; nur ein Frame. Adapter implementieren Grid- Funktionalitä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.

16 23.06.2006GAT16 GAT Architektur GAT Adapter SGE PBS GTK4 Globus 2/3.x Unicore DRMAA Applikation Applikations-Layer GAT API GAT Engine GAT-Layer User Space Grid Space

17 23.06.2006GAT17 Implementation (Engine) C-Version voll implementiert C++-Wrapper voll implementiert Python-Wrapper voll implementiert JAVA-Version voll implementiert

18 23.06.2006GAT18 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)

19 23.06.2006GAT19 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

20 23.06.2006GAT20 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...

21 23.06.2006GAT21 File.copy: prinzipieller Ablauf File.copy(dest) FileCPI.copy(dest) Adapter1 copy Adapter2 copy Adapter3 copy

22 23.06.2006GAT22 File Sub-System GATFile-Klasse GATFile Create Destroy Copy Move Delete IsReadable IsWritable GetLength LastWriteTime GetLocation GATObject

23 23.06.2006GAT23 File Sub-System GATFileStream-Klasse GATFileStream Create Destroy Read Write Seek GATObject GAT_Metric GAT_Monitorable

24 23.06.2006GAT24 File Sub-System GATLogicalFile-Klasse GATLogicalFile Create Destroy GetFiles GetLocations Remove RemoveFile AddFile AddLocation Replicate GATObject GAT_Metric GAT_Monitorable GAT_AdvertService

25 23.06.2006GAT25 Advert Paket Ziel: Verfügbarmachung wichtiger Infos an zentraler Stelle, z.B. Job fertig. Realisiert über SQL-Adaptor in C-GAT.

26 23.06.2006GAT26 Advert-Paket GATAdvertService Add Delete AddMetadata GetMetadata GetAdertisable Find SetPWD GetPWD GATObject GAT_Advertisable

27 23.06.2006GAT27 Job-Management Klassen GATResourceBroker ReserveResource FindResources SubmitJob GATJob Unschedule CheckPoint CloneJob Migrate Stop GetJobDescription GetState GetJobID GetNativeID

28 23.06.2006GAT28 Job-Management Verfügbare Job-Stati GATJobState WertBedeutung GATJobState UnknownStatus nicht ermittelbar GATJobState InitialIm Initialisierungsstatus GATJobState Scheduledz.B. Queued GATJobState RunningJob im executing GATJobState StoppedJob fertig oder gestoppt

29 23.06.2006GAT29 Job-Management Strukturen GATHardwareResourceDescription Machine type Memory CPU-Time Nodes needed GATSoftwareResourceDescription Executable Arguments Stdin Stdout Stderr Pre-Stage-Files Post-Stage-Files GATJobDescription

30 23.06.2006GAT30 Job-Management Beispiel (PBS-Adapter) GATHardwareResourceDescription machine.queue= destination (-q) jobname = jobname (-N) yeo = join (-j) memory.size = mem (-l) file.size = file (-l) cpu.walltime = walltime (-l) cpu.nodes = nodes (-l)

31 23.06.2006GAT31 Job-Management Beispiel (PBS-Adapter) GATSoftwareResourceDescription Stdin = stdin (exec < input) Stdout = stdout (-o) Stderr = stderr (-e) Executable = executable Arguments = arglist[]

32 23.06.2006GAT32 Job-Management Beispiel (PBS-Adapter) Umsetzung in QSUB-Skript machine.queue= new@url.org jobname= TestJob yeo= eo memory.size= 1G file.size= 2G cpu.walltime= 12:00:00 cpu.nodes= 8 stdin= input stdout= out.testjob stderr= err.testjob executable= /bin/prog arglist[0]= arg1 arglist[1]= arg2 arglist[2]= lastarg #PBS -q new@url.orgnew@url.org #PBS -l walltime=12:00:00, \ -mem=1G,file=2G,nodes=8@url.org #PBS -N testjob #PBS -o out.testjob #PBS -e err.testjob #PBS -j eo /bin/prog arg1 arg2 lastarg < input.

33 23.06.2006GAT33 Job-Management Mängel Problem: Festlegung in HardwaresResourceDescription recht willkürlich. Lösung: Anbindung an JSDL-Standard.

34 23.06.2006GAT34 Job-Management Mängel Problem: Zu wenig JOB-Stati. Lösung: Anbindung an DRMAA.

35 23.06.2006GAT35 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

36 23.06.2006GAT36 Anwendungsbeispiel ProC MPA Garching

37 23.06.2006GAT37 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!

38 23.06.2006GAT38 GAT-Anwender C-GAT MPA in Garching ProC-Workflows aufs Grid LSU in Baton Rouge Chemie-Projekt AMOLF NL Fourier Transform Mass Spectrometry (FTMS) Analyse. FTMS- Daten werden mit JavaGAT ins Grid übertragen (ssh, sftp, gridftp). Multimedian Project NL Start paralleler Jobs ZIB Berlin INRIA Frankreich 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)

39 23.06.2006GAT39 Links für GAT GAT allgemein: http://www.gridlab.org/WorkPackages/wp-1/ GAT CVS: cvs.gridlab.org cvsroot: pserver:readonly@cvs.gridlab.org:/cvs/gridlab Passwort: anon GAT-Quellen: wp-1/Codes GAT-Dokumente: wp-1/Documents Nur GATEngine: wp-1/Codes/GATEngine GAT Mailing-Liste: GAT@d-grid.de (www.listserv.dfn.de)GAT@d-grid.de Download tarball: http://www.gridlab.org/WorkPackages/wp-1/gatreleases.html http://www.gridlab.org/WorkPackages/wp-1/adaptorreleases.html


Herunterladen ppt "23.06.2006GAT1 Alexander Beck-Ratzka OFFIS, 23.06.06."

Ähnliche Präsentationen


Google-Anzeigen