GAT Einf

Werbung
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
Herunterladen