English | Deutsch

# Wie funktioniert FileStaging?

Wenn Submit Host und Execution Host nicht auf einen gemeinsamen Fileserver zugreifen koennen bzw. die Verzeichnisnamen sich unterscheiden, muessen die vom Job benoetigten Dateien von Submit- zum Execution Host kopiert werden (per rcp oder so) und die Ergebnisdateien des Jobs umgekehrt vom Execution- zum Submit Host.

Da ein solcher File Staging Mechanismus sowieso sehr flexibel sein muss und voll konfigurierbar sein muss, kann man das eigentliche kopieren auch gleich einem vom Administrator geschriebenen Script ueberlassen, das man nur mit den noetigen Daten versorgt. Da die eigentliche Arbeit an das Script delegiert wird, sprechen wir hier vom "Delegated File Staging". Dabei sind zwei Scripte notwendig: Das erste wird im Prolog aufgerufen und kopiert die Eingangsdateien auf den Execution Host, das zweite wird im Epilog aufgerufen und kopiert die Ergebnisdateien auf den Submit Host.

# Was muessen die vom Administrator geschriebenen File Staging Scripte koennen?

Die Scripte muessen zumindest die stdin, stdout und stderr files vom Submit- zum Execution Host (bzw. andersrum) kopieren.

Die dazu noetigen Informationen erhaelt das Script ueber Kommandozeilenparameter, die in der Cluster Configuration angegeben werden koennen. Mit "qconf -mconf" kann man bei "prolog" nach dem Pfad des Prolog-Scripts (u.a.) folgende Variablen angeben, die beim Aufruf des Prologs automatisch vom DRM mit ihrem jeweiligen Wert ersetzt werden:

$fs_stdin_file_staging | "1" oder "0"; sagt, ob file staging fuer die jeweilige Datei durchgefuert werden soll.
$fs_stdout_file_staging
$fs_stderr_file_staging
$fs_stdin_host | Der Name des Submit Hosts, auf dem das stdin-File zu finden ist bzw. auf den das stdout und stderr-File kopiert werden soll. (Die ganze Aktion geschieht ja vom Execution Host aus).
$fs_stdout_host
$fs_stderr_host
$fs_stdin_path | Der Pfad der jeweiligen Datei auf dem Submit Host.
$fs_stdout_path
$fs_stderr_path
$fs_stdin_tmp_path | Der Pfad der jeweiligen Datei auf dem Execution Host.
$fs_stdout_tmp_path
$fs_stderr_tmp_path

Ein typischer Prolog-Script-Aufruf wuerde also so aussehen:

`prolog /..../scripts/fs_prolog.sh $fs_stdin_file_staging \ $fs_stdin_host $fs_stdin_path $fs_stdin_tmp_path`

Und der typische Epilog-Script-Aufruf entsprechend:

`epilog /..../scripts/fs_epilog.sh $fs_stdout_file_staging \ $fs_stdout_host $fs_stdout_path $fs_stdout_tmp_path \ $fs_stderr_file_staging $fs_stderr_host $fs_stderr_path $fs_stderr_tmp_path`

Im Prolog-Script muesste dann also folgendermassen kopiert werden:

(in Pseude-Script-Sprache)

    ...
    if( $1 ) then
       rcp $2:$3 $4
    endif
    ...

Und im Epilog-Script analog dazu:

(in Pseude-Script-Sprache)

    ...
    if( $1 ) then
       rcp $4 $2:$3
    endif

    if( $5 ) then
       rcp $8 $6:$7
    endif
    ...

# Und dann funktioniert das so?

Fast. Der Administrator muss in der Cluster Configuration noch folgenden Eintrag machen:

`delegated_file_staging true`

Erst jetzt ist file staging zur Benutzung freigegeben.

# Und wie benutzt man das ganze dann?

Bisher nur von DRMAA aus. Fuer weitere DRMAA Infos, sehen Sie die DRMAA Howto.

Dazu muss man erstmal mit drmaa_get_attribute_names() abfragen, ob das DRMAA-Attribut drmaa_transfer_files vorhanden ist (dieses Attribut ist dann vorhanden, wenn in der Cluster Configuration "delegated_file_staging true" eingetragen ist). Ist dieses Attribute vorhanden, dann kann die Applikation dieses Attribut auf einen der Werte "i","o","e" oder eine beliebige Kombination setzen und somit veranlassen, dass die korrespondierende Datei (i - stdin, o - stdout, e - stderr) per file staging kopiert wird.

# Wo findet man weitere Infos?

Beispiele findet man hier:

- Prolog
- Epilog

Eine gesamte File Staging Ueberblick findet man in der File Staging Howto.