Changes between Version 28 and Version 29 of Tutorial/JobSubm


Ignore:
Timestamp:
May 15, 2008, 6:14:19 PM (17 years ago)
Author:
jouvin
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Tutorial/JobSubm

    v28 v29  
    66
    77== Soumission des Jobs ==
     8
    89Tous les fichiers nécessaires se trouvent dans le répertoire  `tutorial\_material` que vous avez récupéré.
     10
     11Les commandes permettant de soumettre et gérer un job commencent toutes par `glite-wms-job-` et utilise les services d'un gLite WMS.
     12
     13''Note : pour soumettre et gérer un job avec l'ancien LCG RB, il faut utiliser les commandes `edg-job-`. Ces commandes sont ''deprecated'' et il faut préférer l'utilisation d'un WMS, sauf raisons très particulières.''
    914
    1015=== Suivi d'un job "Hello World" ===
     
    1318 1.  Soumettez le job  `HelloWorld.jdl` en utilisant la commande `glite-wms-job-submit`.  Les commandes "workload management" comprennent les proxies VOMS et utilisent la VO indiquée  dedans.
    1419  * `glite-wms-job-submit HelloWorld.jdl`  : la commande envoie une réponse contenant une URL qui débute par "https", quand elle se passe bien. Cet URL est l'identifiant du job ou ''jobid'' qui permet de manipuler le job.
    15  1. Vérifiez le statut du job en utilisant la commande `glite-wms-job-status` `(Sur linux on peut utiliser la commande `watch` pour  exécuter une commande dans une boucle. Pour effectuer la commande `glite-wms-job-submit` toutes les 5 secondes, utilisez  `watch --interval 5glite-wms-job-status <jobid>`. Touchez ctrl-c pour sortir)`.
    16   * `glite-wms-job-status <jobid>` Suivez les modifications de l'état du job jusqu'à l'état "Done(Success)".  Combien d'états différents pouvez-vous distinguer?  Si le job se termine dans l'état "Aborted", c'est qu'il ne passe pas. On peut trouver plus d'informations avec la commande `glite-wms-job-get-logging-info`. Cette commande requiert le jobid.
    17  1.  Lorsque le job est terminé ("Done(Success)"), récupérez les données générées  à l'aide de la commande  `glite-wms-job-output`.  Le répertoire  utilisé pour stocker les résultats dépend de la configuration du  site.  Au LAL, le répertoire est  `~/JobOutput/`.  Ce  répertoire doit exister; créez-le si nécessaire.
    18   * `{{{glite-wms-job-output <jobid> }}}` La réponse indique le répertoire qui contient les résultats du job.
    19  1.  Vérifiez que tout s'est déroulé correctement en consultant les  fichiers `std.out` et `std.err`. Le fichier `std.err` doit être vide et `std.out` doit avoir "Hello  World". Cette procédure simple est utilisée pour le suivi de tous les jobs. Il est possible d'utiliser les options "-o", "-i", et "-noint" qui permettent de gérer un plus grand nombre de jobs avec les commandes  `glite-wms-job-*`. Regardez les informations avec l'option "-help" ou la commande `man`. Il existe également des APIs (java, c, c++) qui permettent la gestion des jobs vers un programme compilé.  Ce tutorial ne couvre pas cesAPIs.
     20  * On peut utiliser l'option `-o fichier` de la commande `glite-wms-job-submit` pour que le ''jobid'' soit stocké dans un fichier. Le même fichier pourra être utilisé avec les autres commandes `glite-wms-job` en utilisant l'option `-i`.
     21 1. Vérifiez le statut du job en utilisant la commande `glite-wms-job-status` (Sur linux on peut utiliser la commande `watch` pour  exécuter une commande dans une boucle. Pour effectuer la commande `glite-wms-job-submit` toutes les 15 secondes, utilisez  `watch -n 15 glite-wms-job-status <jobid>` et taper ctrl-c pour sortir).
     22  * Suivez les modifications de l'état du job jusqu'à l'état "Done(Success)".
     23  * Combien d'états différents pouvez-vous distinguer ?
     24  * Si le job se termine dans l'état "Aborted", c'est qu'il y a eu une erreur. On peut trouver plus d'informations avec la commande `glite-wms-job-get-logging-info`. Cette commande requiert le jobid.
     25 1.  Lorsque le job est terminé (Status: Done (Success)), récupérez les données générées  à l'aide de la commande  `glite-wms-job-output`.  Le répertoire  utilisé pour stocker les résultats dépend de la configuration du  site.  Au LAL, le répertoire est  `~/JobOutput/`.  Ce  répertoire doit exister; créez-le si nécessaire.
     26  * `{{{glite-wms-job-output <jobid> }}}` : la réponse indique le répertoire qui contient les résultats du job.
     27 1.  Vérifiez que tout s'est déroulé correctement en consultant les  fichiers `std.out` et `std.err`. Le fichier `std.err` doit être vide et `std.out` doit contenir "Hello  World". Cette procédure simple est utilisée pour le suivi de tous les jobs.
     28 
     29Comme indiqué dans la description de la commande `glite-wms-job-submit`, il est possible d'utiliser les options `-o`, `-i`, et `-noint` qui permettent de gérer un plus grand nombre de jobs avec les commandes  `glite-wms-job-*`. Regardez les informations avec l'option `-help` ou la commande `man`. Il existe également des APIs (java, c, c++) qui permettent la gestion des jobs vers un programme compilé.  Ce tutorial ne couvre pas ces APIs.
    2030
    2131=== Fichier JDL : modification et édition ===
     32
    2233 1. Modifiez le fichier `HelloWorld.jdl` de manière à ce  qu'il n'appelle plus `/bin/echo` mais le script `HelloWorldScript.sh`.  Pour cela :
    23   *  la ligne "Executable" doit être "HelloWorldScript.sh",
    24   *  la ligne "Argument" peut rester avec "Hello World",
    25   *  vous devez de plus définir le paramètre "InputSandbox". Tous les fichiers listés dans "InputSandbox" sont transfèrés avec le job. La syntaxe de cette ligne est : 
    26   * `{{{InputSandbox = "HelloWorldScript.sh"; }}}`    Si vous soumettez plusieurs jobs avec les mêmes fichiersd'entrée, une nouvelle copie de chaque fichier est créée.   Exécutez le job et vérifiez que tout fonctionne.On peut utiliser n'importe quel script, cependant le shell utilisé par le script (indiqué dans la ligne "#!") doit exister dans le "Worker Node".
    27  1.  Modifier de nouveau `HelloWorld.jdl` de manière à ce  qu'il appelle cette fois l'exécutable  `myhostname`.  Vous  pouvez visualiser la source de cet exécutable, qui est un  programme C :  `myhostname.c`. Vous n'avez cette fois pas besoin de définir d'argument.  Il faut modifier la ligne "InputSandbox".  Exécutez le job et vérifiez que tout fonctionne.  Sur quel ordinateur a tourné votre job?
    28  1.  L'exécution d'un programme en C compilé n'est pas  forcément pratique : l'exécutable peut être d'une grande  taille, dépendre de plusieurs fichiers, ou dépendre d'un  environnement d'exécution particulier.Une solution consiste à compiler le programme directement sur le CE. Modifier une nouvelle fois `HelloWorld.jdl` de manière à ce  qu'il appelle le script `buildandrun.sh`, avec pour argument  "myhostname". Testez ce script seul pour comprendre l'argument nécessaire.Exécutez le job et vérifiez qu'il fonctionne toujours. Votre job a-t-il tourné sur le même ordinateur que précédemment?
     34  *  la ligne `Executable` doit être `HelloWorldScript.sh`,
     35  *  la ligne `Argument` peut rester avec `Hello World`,
     36  *  vous devez de plus définir le paramètre `InputSandbox`. Tous les fichiers listés dans `InputSandbox` sont transfèrés avec le job. La syntaxe de cette ligne est : 
     37  * `{{{InputSandbox = `HelloWorldScript.sh`; }}}`    Si vous soumettez plusieurs jobs avec les mêmes fichiersd'entrée, une nouvelle copie de chaque fichier est créée.   Exécutez le job et vérifiez que tout fonctionne.On peut utiliser n'importe quel script, cependant le shell utilisé par le script (indiqué dans la ligne `#!`) doit exister dans le `Worker Node`.
     38 1.  Modifier de nouveau `HelloWorld.jdl` de manière à ce  qu'il appelle cette fois l'exécutable  `myhostname`.  Vous  pouvez visualiser la source de cet exécutable, qui est un  programme C :  `myhostname.c`. Vous n'avez cette fois pas besoin de définir d'argument.  Il faut modifier la ligne `InputSandbox`.  Exécutez le job et vérifiez que tout fonctionne.  Sur quel ordinateur a tourné votre job?
     39 1.  L'exécution d'un programme en C compilé n'est pas  forcément pratique : l'exécutable peut être d'une grande  taille, dépendre de plusieurs fichiers, ou dépendre d'un  environnement d'exécution particulier.Une solution consiste à compiler le programme directement sur le CE. Modifier une nouvelle fois `HelloWorld.jdl` de manière à ce  qu'il appelle le script `buildandrun.sh`, avec pour argument  `myhostname`. Testez ce script seul pour comprendre l'argument nécessaire.Exécutez le job et vérifiez qu'il fonctionne toujours. Votre job a-t-il tourné sur le même ordinateur que précédemment?
    2940
    3041`Note : si la VO que vous utilisez est acceptée par plusieurs CE, il peut être utile d'ajouter la ligne suivante dans votre JDL pour forcer le job à aller sur un CE particulier (au LAL dans l'exemple) :`
    3142{{{
    32 Requirements = regexp(".*\.lal\.in2p3\.fr:.*", other.GlueCEUniqueID)
     43Requirements = regexp(`.*\.lal\.in2p3\.fr:.*`, other.GlueCEUniqueID)
    3344}}}
    3445
    35 === Pour comprendre les "Requirements" and "Rank" ===
     46=== Pour comprendre les `Requirements` and `Rank` ===
    3647
    3748Il y a deux mots-clés très importants dans les fichiers JDL : `Requirements` et `Rank .  Leurs valeurs sont des expressions.  Ces 2 mot-clés servent à sélectionner le CE auxquels sera envoyé le job.
    38  * `Requirements` : ce mot-clé permet de sélectionner les CE qui ont les ressources requises pour exécuter le job. L'expression des ressources peut porter sur n'importe quelle information publié dans le système d'information (BDII). En particulier, le nombre de CPUs libres, le temps d'exécution minimum, la quantité de mémoire... La valeur est une condition logique utilisant une syntaxe assez habituelle (proche de celle du langage C). On peut utiliser des `regular expressions` avec les chaines de caractères, en utilisant la fonction `RegExp("pattern",attribut)`. Par exemple, pour sélectionner un CE appartenant au domaine `lal.in2p3.fr`, on pourra utiliser l'expression :
     49 * `Requirements` : ce mot-clé permet de sélectionner les CE qui ont les ressources requises pour exécuter le job. L'expression des ressources peut porter sur n'importe quelle information publié dans le système d'information (BDII). En particulier, le nombre de CPUs libres, le temps d'exécution minimum, la quantité de mémoire... La valeur est une condition logique utilisant une syntaxe assez habituelle (proche de celle du langage C). On peut utiliser des `regular expressions` avec les chaines de caractères, en utilisant la fonction `RegExp(`pattern`,attribut)`. Par exemple, pour sélectionner un CE appartenant au domaine `lal.in2p3.fr`, on pourra utiliser l'expression :
    3950{{{
    40 Requirements = regexp(".*\.lal\.in2p3\.fr:.*", other.GlueCEUniqueID);
     51Requirements = regexp(`.*\.lal\.in2p3\.fr:.*`, other.GlueCEUniqueID);
    4152}}}
    4253 * `Rank` : cet mot-clé définit l'ordre de classement des CEs sélectionnés par la clause `Requirements `. Le CE sélectionné pour exécuter le job est celui ayant le meilleur classement suivant le critère défini par `Rank`. En cas d'ex-aequo, le CE est choisi aléatoirement parmi eux. Par exemple pour trier sur le nombre de CPUs libres dans le CE :
     
    5869 1. Choisir uniquement des sites francais. Pour cela on peut utiliser la valeur suivante (d'abord seule puis en la combinant avec la précédente avec l'opérateur `&&`) :
    5970{{{
    60 RegExp(".*\.fr:.*",other.GlueCEUniqueID)
     71RegExp(`.*\.fr:.*`,other.GlueCEUniqueID)
    6172}}}
    6273 1. Ajoutez les lignes suivantes pour utiliser la ressource avec le plus grand nombre des CPUs libres et comparer le CE qui sera sélectionné.
     
    6778 1. Que se passe-t-il si on utilise `Rank = 1;`?
    6879
    69 `Note : Une option "-r" existe pour la commande  `glite-wms-job-submit` qui permet de choisir une ressource spécifique. Cependant cette option évite tous le processus "MatchMaking" de Resource Broker et n'ajoute pasle fichier nécessaire (le fichier "BrokerInfo") pour la gestion de données. La technique avec other.GlueCEUniqueID est plus flexible et plus sûre.`
     80`Note : Une option `-r` existe pour la commande  `glite-wms-job-submit` qui permet de choisir une ressource spécifique. Cependant cette option évite tous le processus `MatchMaking` de Resource Broker et n'ajoute pasle fichier nécessaire (le fichier `BrokerInfo`) pour la gestion de données. La technique avec other.GlueCEUniqueID est plus flexible et plus sûre.`
    7081
    7182Pour plus d'information, consulter la liste des [http://server11.infn.it/workload-grid/docs/DataGrid-01-NOT-0101-0_6-Note.pdf attributs] JDL valides.
     
    7384=== L'environnent d'exécution sur le Worker Node ===
    7485
    75 Chaque utilisateur de la grille est mappé dans un compte local pour chaque site. Maintenant l'accès aux ressources locales est contrôlé par les droits de ce compte. Réinitialisez votre proxy avec l'option "--voms  vo.lal.in2p3.fr".
     86Chaque utilisateur de la grille est mappé dans un compte local pour chaque site. Maintenant l'accès aux ressources locales est contrôlé par les droits de ce compte. Réinitialisez votre proxy avec l'option `--voms  vo.lal.in2p3.fr`.
    7687 1. Visualisez le contenu du fichier JDL `whoami.jdl.` Lancez le job et récupérez l'output. Visualisez le fichier `std.out`. Sur quel compte êtes-vous mappé?
    7788 1. Visualisez le contenu du script `envvar.jdl`. Soumettez un  job qui lance ce script dans la grille. Regardez la liste des  variables.  Combien de variables concernent la grille?
    78  1. Ecrivez un job qui liste les versions des logiciels disponibles  dans le "Worker Node". On peut utiliser la commande `rpm`  pour le faire.
     89 1. Ecrivez un job qui liste les versions des logiciels disponibles  dans le `Worker Node`. On peut utiliser la commande `rpm`  pour le faire.
    7990
    8091
     
    8596Pour permettre à un job de s'exécuter sans problème quelque soit son temps d'attente et sa durée, il faut utiliser un service de renouvellement de proxy, appelé MyProxy. Son utilisation est très simple. Il faut d'abord ajouter la ligne suivante dans le JDL du job (la valeur du paramètre doit être un serveur MyProxy acceptant la VO utilisée pour le `voms-proxy-init` et le resource broker utilisé pour soumettre le job, `myproxy.grif.fr` est le serveur MyProxy de GRIF) :
    8697{{{
    87 MyProxyServer = "myproxy.grif.fr";
     98MyProxyServer = `myproxy.grif.fr`;
    8899}}}
    89100
     
    95106La configuration d'un serveur MyProxy détermine les resource brokers autorisés à utiliser le service pour renouveler des proxies. Le serveur MyProxy de GRIF, `myproxy.grif.fr`, accepte les demandes de renouvellement en provenance du RB de GRIF, `grid09.lal.in2p3.fr`. 
    96107
    97 On peut voir la liste des proxies valides avec la commande `myproxy-info` et on peut mettre fin au renouvellement du proxy (avant ou pendant l'exécution du job) avec la commande `myproxy-destroy`.  `L'option "-d" doit être toujours être utilisée avec l'ensemble des commandes myproxy-*.`
     108On peut voir la liste des proxies valides avec la commande `myproxy-info` et on peut mettre fin au renouvellement du proxy (avant ou pendant l'exécution du job) avec la commande `myproxy-destroy`.  `L'option `-d` doit être toujours être utilisée avec l'ensemble des commandes myproxy-*.`
    98109
    99110`Note : les commandes `myproxy-xxx` utilisent un nom de fichier différent des autres commandes gLite si on utilise un fichier unique pour le certificat et la clé privée (extension `.p12`). Pour résoudre le problème, il faut créer le lien symbolique suivant :`