185 | | == Soumission de jobs via le WMS : exemples et quelques nouvautés == |
186 | | |
187 | | === Introduction === |
188 | | |
189 | | En gLite 3.1 le WMS (Workload Management System) remplace le RB. Il comprend deux services : |
190 | | le WMS lui-même et le Logging and Bookkeeping service (LB). Ces deux services peuvent être sur des machines séparées. |
191 | | C'est pourquoi votre jobId contient le nom du LB quit être différent de celui du WMS utilisé. |
192 | | |
193 | | Le WMS permet une meilleure gestion des jobs : meilleure temps de réponse, meilleure tenue de la charge. |
194 | | |
195 | | Les commandes edg-job-* qui utilisaient le RB peuvent donc être avantageusement remplacées par leurs équivalents glite-wms-job-* . Pour avoir de l'aide sur une commande, utiliser man ou l'option --help de la commande (Exemple: man glite-wms-job-submit ou glite-wms-job-submit --help). Par ailleurs, il est recommandé d'utiliser l'option -o avec |
196 | | la commande glite-wms-job-submit pour mémoriser les jobIds dans un seul ou plusieurs fichiers. L'option -i des autres commandes glite-wms-job-* permet de relire les jobIds dans un de ces fichiers. |
197 | | |
198 | | Chaque job soumis au WMS doit être associé à un proxy délégué au WMSProxy server |
199 | | par l'utilisateur. Le WMProxy (un composant du WMS) s'en sert pour toute interaction avec les autres services grille en rapport le job. |
200 | | |
201 | | Le proxy de l'utilisateur peut être délégué au WMS (WMSProxy), soit automatiquement (option -a) soit explicitement (option -d). |
202 | | Si vous soumettez des centaines de jobs, il est préférable d'utiliser la délégation explicite car l'auto-délégation est plus consommatrice de ressources. |
203 | | |
204 | | |
205 | | Dans les différents exemples, nous utiliserons la délégation automatique. Un paragraphe sera consacré à la délégation explicite. |
206 | | |
207 | | Le WMS utilisé est celui de GRIF (wms.grif.fr i.e grid09.lal.in2p3.fr). Le LB associé est grid02.lal.in2p3.fr |
208 | | |
209 | | === Soumission d'un job === |
210 | | |
211 | | On peut vérifier d'abord (facultatif) qu'il n'y a pas d'erreur dans le jdl et afficher la liste des CE candidats pour le job. |
212 | | |
213 | | {{{ |
214 | | diarra@ipngrid01 ~/work]$ glite-wms-job-list-match -a HelloWorld.jdl |
215 | | |
216 | | Connecting to the service https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
217 | | ========================================================================== |
218 | | COMPUTING ELEMENT IDs LIST |
219 | | The following CE(s) matching your job requirements have been found: |
220 | | *CEId* |
221 | | - ipnls2001.in2p3.fr:2119/jobmanager-pbs-ipno |
222 | | ========================================================================== |
223 | | }}} |
224 | | |
225 | | Pour soumettre un job, utiliser glite-wms-job-submit : |
226 | | |
227 | | {{{ |
228 | | diarra@ipngrid01 ~/work]$ glite-wms-job-submit -o jobId -a HelloWorld.jdl |
229 | | |
230 | | Connecting to the service https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
231 | | ====================== glite-wms-job-submit Success ====================== |
232 | | The job has been successfully submitted to the WMProxy |
233 | | Your job identifier is: |
234 | | https://grid02.lal.in2p3.fr:9000/Rw0lve7pSId8-DBP2jiatw |
235 | | The job identifier has been saved in the following file: |
236 | | /home/diarra/work/jobId |
237 | | ========================================================================== |
238 | | |
239 | | [diarra@ipngrid01 ~/work]$ cat jobId |
240 | | ###Submitted Job Ids### |
241 | | https://grid02.lal.in2p3.fr:9000/Rw0lve7pSId8-DBP2jiatw |
242 | | }}} |
243 | | |
244 | | === La delegation automatique de proxy au WMSProxy === |
245 | | |
246 | | Il suffit d'utiliser l'option -a comme vu ci-dessous avec les commandes |
247 | | glite-wms-job-submit ou glite-wms-job-list-match. |
248 | | |
249 | | === La délégation explicite de proxy au WMSProxy === |
250 | | |
251 | | Nous avons déjà utilisé la délégation automatique (simple et pratique) plus haut avec l'option -a des commandes glite-wms-job-submit et glite-wms-job-list-match. Mais l'inconvenient de cette méthode est que la délégation est répétée pour chaque job. Avec la délégation explicite, la délégation est faite une seule fois, ce qui est plus performant car les |
252 | | jobs suivants seront soumis plus rapidement. |
253 | | |
254 | | Pour déléguer explicitement un proxy au WMProxy, la commande à utiliser est : |
255 | | glite-wms-job-delegate-proxy -d <delegID> |
256 | | |
257 | | <delegID> est un nom (une chaine) choisi par l'utilisateur. Les futures invocations de glite-wms-job-submit et glite-wms-job-list-match peuvent bypasser la délégation du proxy avec l'option -d <delegID> . |
258 | | |
259 | | Par exemple, pour déléguer un proxy (qu'on nomme ici mydelegID): |
260 | | |
261 | | {{{ |
262 | | [diarra@ipngrid01 ~/work]$ glite-wms-job-delegate-proxy -d mydelegID |
263 | | |
264 | | Connecting to the service https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
265 | | ================== glite-wms-job-delegate-proxy Success ================== |
266 | | Your proxy has been successfully delegated to the WMProxy: |
267 | | https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
268 | | with the delegation identifier: mydelegID |
269 | | ========================================================================== |
270 | | }}} |
271 | | |
272 | | On peut alors soumettre un job en utilisant le <delegID> mydelegID : |
273 | | |
274 | | {{{ |
275 | | [diarra@ipngrid01 ~/work]$ glite-wms-job-submit -d mydelegID HelloWorld.jdl |
276 | | |
277 | | Connecting to the service https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
278 | | ====================== glite-wms-job-submit Success ====================== |
279 | | The job has been successfully submitted to the WMProxy |
280 | | Your job identifier is: |
281 | | https://grid02.lal.in2p3.fr:9000/ro9Lu7b0CtgKAYhua0HZ2A |
282 | | ========================================================================== |
283 | | }}} |
284 | | |
285 | | L'option -a de glite-wms-job-delegate-proxy permet de demander au système de choisir pour nous un <delegID> : |
286 | | |
287 | | {{{ |
288 | | [diarra@ipngrid01 ~/work]$ glite-wms-job-delegate-proxy -a |
289 | | |
290 | | Connecting to the service https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
291 | | ================== glite-wms-job-delegate-proxy Success ================== |
292 | | Your proxy has been successfully delegated to the WMProxy: |
293 | | https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
294 | | |
295 | | with the delegation identifier: cFdr8WvkFirUHQs2sUpyGQ |
296 | | ========================================================================== |
297 | | }}} |
298 | | |
299 | | Note: A cause d'un bug, si le UI est configuré avec une liste de WMS, glite-wms-job-delegate-proxy ne déléguera le proxy qu'a un seul de la liste. Ceci est une limitation de la délégation explicite. |
300 | | |
301 | | |
302 | | === Status des jobs / Récupération des outputs (OutpuSandbox) === |
303 | | |
304 | | Pour connaître le status d'un job : |
305 | | |
306 | | {{{ |
307 | | [diarra@ipngrid01 ~/work]$ glite-wms-job-status -i jobId |
308 | | ou |
309 | | [diarra@ipngrid01 ~/work]$ glite-wms-job-status https://grid02.lal.in2p3.fr:9000/Rw0lve7pSId8-DBP2jiatw |
310 | | |
311 | | ************************************************************* |
312 | | BOOKKEEPING INFORMATION: |
313 | | Status info for the Job : https://grid02.lal.in2p3.fr:9000/Rw0lve7pSId8-DBP2jiatw |
314 | | Current Status: Scheduled |
315 | | Status Reason: Job successfully submitted to Globus |
316 | | Destination: ipnls2001.in2p3.fr:2119/jobmanager-pbs-ipno |
317 | | Submitted: Tue Jun 3 16:27:26 2008 CEST |
318 | | ************************************************************* |
319 | | }}} |
320 | | |
321 | | Attendre que le job soit Running puis Done (Success) pour pouvour récupérer les résultats avec glite-wms-job-status : |
322 | | |
323 | | {{{ |
324 | | [diarra@ipngrid01 ~/work]$ glite-wms-job-status -i jobId |
325 | | ou |
326 | | [diarra@ipngrid01 ~/work]$ glite-wms-job-status https://grid02.lal.in2p3.fr:9000/Rw0lve7pSId8-DBP2jiatw |
327 | | |
328 | | ************************************************************* |
329 | | BOOKKEEPING INFORMATION: |
330 | | Status info for the Job : https://grid02.lal.in2p3.fr:9000/Rw0lve7pSId8-DBP2jiatw |
331 | | Current Status: Done (Success) |
332 | | Exit code: 0 |
333 | | Status Reason: Job terminated successfully |
334 | | Destination: ipnls2001.in2p3.fr:2119/jobmanager-pbs-ipno |
335 | | Submitted: Tue Jun 3 16:27:26 2008 CEST |
336 | | ************************************************************* |
337 | | }}} |
338 | | |
339 | | Le status 'Done (Success) indique que le job est terminé, on peut récupérer les résultats (OutputSandbox)avec glite-wms-job-output : |
340 | | |
341 | | {{{ |
342 | | [diarra@ipngrid01 ~/work]$ glite-wms-job-output -i jobId |
343 | | ou |
344 | | [diarra@ipngrid01 ~/work]$glite-wms-job-output https://grid02.lal.in2p3.fr:9000/Rw0lve7pSId8-DBP2jiatw |
345 | | |
346 | | Connecting to the service https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
347 | | ================================================================================ |
348 | | JOB GET OUTPUT OUTCOME |
349 | | Output sandbox files for the job: |
350 | | https://grid02.lal.in2p3.fr:9000/Rw0lve7pSId8-DBP2jiatw |
351 | | have been successfully retrieved and stored in the directory: |
352 | | /home/diarra/JobOutput/diarra_Rw0lve7pSId8-DBP2jiatw |
353 | | ================================================================================ |
354 | | |
355 | | [diarra@ipngrid01 ~/work]$ ls -l /home/diarra/JobOutput/diarra_Rw0lve7pSId8-DBP2jiatw |
356 | | total 0 |
357 | | -rw-r--r-- 1 diarra sii 0 Jun 3 16:51 std.err |
358 | | -rw-r--r-- 1 diarra sii 12 Jun 3 16:51 std.out |
359 | | }}} |
360 | | |
361 | | === Tuer un job === |
362 | | |
363 | | Faire glite-wms-job-cancel <jobID> ou glite-wms-job-cancel -i <jobIdFile> |
364 | | |
365 | | Exemple: |
366 | | {{{ |
367 | | [diarra@ipngrid01 ~/work]$ glite-wms-job-cancel https://grid02.lal.in2p3.fr:9000/Rw0lve7pSId8-DBP2jiatw |
368 | | }}} |
369 | | |
370 | | === Obtenir des détails (logging information) sur un job === |
371 | | |
372 | | Pour avoir des détails sur la vie d'un job, utiliser la commande glite-wms-job-logging-info <jobID> . Pour un mode plus verbeux, utiliser les option -v 1 ou -v 2 ou -v 3 |
373 | | |
374 | | {{{ |
375 | | [diarra@ipngrid01 ~/work]$ glite-wms-job-logging-info -v 2 https://grid02.lal.in2p3.fr:9000/1TEI3X2ZtLJ5SEyqrZ4B8A |
376 | | }}} |
| 185 | == Fonctionnalités Avancées == |
| 186 | |
| 187 | ''Note : les fonctionnalités décrites ici ne s'applique qu'au gLite WMS et ne sont pas pris en charge par l'ancien LCG RB.'' |
544 | | Ici, le fichier se trouvera dans /home/diarra/JobOutput/diarra_1nX3gfh6Ba9NLtxy5FKe2g . Le nom du fichier contient en plus |
545 | | la fenêtre de temps couverte. A chaque récupération, un nouveau fichier est créé. Après plusieurs inspections des fichiers de notre exemple, on a : |
546 | | |
547 | | |
548 | | {{{ |
549 | | [diarra@ipngrid01 ~/work]$ ls -l /home/diarra/JobOutput/diarra_1nX3gfh6Ba9NLtxy5FKe2g |
550 | | total 6900 |
551 | | -rw-r--r-- 1 diarra sii 1689998 Jun 5 11:34 perusal.log-20080605094053_1-20080605100318_12 |
552 | | -rw-r--r-- 1 diarra sii 5207599 Jun 5 11:34 perusal.log-20080605100520_13-20080605111856_49 |
553 | | -rw-r--r-- 1 diarra sii 213 Jun 5 09:41 std.err-20080605094051_1-20080605094051_1 |
554 | | -rw-r--r-- 1 diarra sii 6887 Jun 6 10:41 std.err-20080605094254_2-20080605111855_49 |
555 | | -rw-r--r-- 1 diarra sii 21097 Jun 5 09:56 std.out-20080605094052_1-20080605095508_8 |
556 | | -rw-r--r-- 1 diarra sii 103003 Jun 6 10:42 std.out-20080605095710_9-20080605111856_49 |
557 | | }}} |
558 | | |
559 | | Si l'option --nodisplay n'est pas utilisé, le fichier sera en plus affiché à l'écran (pas toujours |
560 | | commode). Par ailleurs à chaque récupération, seule le delta depuis le dernier upload est transmis. |
561 | | Pour récupérer à chaque fois l'intégralité du fichier, il faut utiliser l'option --all de glite-wms-job-perusal. |
562 | | |
563 | | L'option --unset de glite-wms-job-perusal permet de désactiver le Job Perusal : |
564 | | |
565 | | {{{ |
566 | | |
567 | | [diarra@ipngrid01 ~/work]$ glite-wms-job-perusal --unset -i pjid |
568 | | |
569 | | Reading the jobId from the input file: /home/diarra/work/pjid |
570 | | Connecting to the service https://grid09.lal.in2p3.fr:7443/glite_wms_wmproxy_server |
571 | | ====================== glite-wms-job-perusal Success ====================== |
572 | | File(s) perusal has been successfully disabled for the job: |
573 | | https://grid02.lal.in2p3.fr:9000/1nX3gfh6Ba9NLtxy5FKe2g |
574 | | ========================================================================== |
575 | | }}} |
576 | | |
577 | | === Le renouvelement automatique de proxy === |
578 | | |
579 | | Pour des raisons de sécurité, il est recommandé de ne pas crée des proxies de plusieurs jours. Par ailleurs la durée de l'extension VOMS du proxy est limitée par les VOs, en général à 24h. Si un job dure plus longtemps que la |
580 | | validitée du proxy associé, il peut échouer ('Aborted' avec la raison 'the userproxy expired' ). |
581 | | |
582 | | Le serveur proxy permet d'enregistrer son proxy pour une longue durée. Le proxy enregistré peut ensuite servir au WMS pour renouveler automatiquement le proxy des jobs. |
583 | | |
584 | | Pour utiliser un service myproxy il faut : |
585 | | * Créer un proxy VOMS et l'enregistrer pour plusieurs jours ou semaines dans le serveur myproxy (myproxy.grif.fr pour GRIF) |
586 | | * Déclarer le serveur myproxy dans le .jdl. Par exemple mettre la ligne suivante dans le .jdl |
587 | | |
588 | | {{{ |
589 | | MyProxyServer = "myproxy.grif.fr"; |
590 | | }}} |
591 | | |
592 | | Avant d'enregistrer son proxy, en créer un valide : |
593 | | |
594 | | {{{ |
595 | | [diarra@ipngrid01 work]$ voms-proxy-init --voms vo.ipno.in2p3.fr --valid 24:00 |
596 | | }}} |
597 | | |
598 | | Pour supprimer un ancien proxy déjà enregistré dans le serveur myproxy : |
599 | | |
600 | | {{{ |
601 | | [diarra@ipngrid01 work]$ myproxy-destroy -s myproxy.grif.fr -d |
602 | | }}} |
603 | | |
604 | | Pour enregistrer son proxy dans le serveur myprosy : |
605 | | |
606 | | {{{ |
607 | | [diarra@ipngrid01 work]$ myproxy-init -s myproxy.grif.fr -d -n -t 24 -c 800 |
608 | | }}} |
609 | | |
610 | | Les options : |
611 | | |
612 | | * -d : Le DN sera utilisé par défaut comme le username |
613 | | * -n : On peut récupérer le proxy sans donner de mot de passe |
614 | | * -t : Validité (lifetime) en heures du proxy récupéré (délégué). La valeur par défaut est 12h. |
615 | | * -c : Validité (lifetime) en heures du proxy sur le serveur myproxy. La valeur par defaut est 1 semaine. |
616 | | |
617 | | On vérifie avec myproxy-info : |
618 | | |
619 | | {{{ |
620 | | [diarra@ipngrid01 work]$ myproxy-info -s myproxy.grif.fr -d |
621 | | |
622 | | username: /O=GRID-FR/C=FR/O=CNRS/OU=IPNO/CN=Christophe Diarra |
623 | | owner: /O=GRID-FR/C=FR/O=CNRS/OU=IPNO/CN=Christophe Diarra |
624 | | timeleft: 799:58:55 (33.3 days) |
625 | | }}} |
626 | | |
627 | | Ensuite il suffit de soumettre un job avec un proxy VOMS valide. Même si le job dure plusieurs jours, son proxy |
628 | | n'expirera pas. Bien sûr il faut que le temps d'exécution du job n'excède pas la durée de vie totale du proxy enregistré sur le serveur myproxy. |
629 | | |
630 | | === Ressoumission automatique === |
631 | | |
632 | | Le WMS peut resoumettre automatiquement les jobs s'ils sont 'aborted' par la grille. Deux types de ressoumission sont disponibles en gLite 3.1 WMS: |
633 | | * deep resubmission : pour les jobs qui échouent après démarrage sur un WN |
634 | | * shallow resubmission : dans les autres cas |
635 | | |
636 | | Les attributes RetryCount et ShallowRetryCount permettent de limiter le nombre |
637 | | de tentatives de ressoumission des jobs, respectivement pour les modes deep et shallow. Une valeur à zéro (0) dévalide la resoumission. |
638 | | |
639 | | Il est recommandé dévalider le deep resubmission car le WMS peut resoumettre un job qu'il croit (à tort) aborted ou bien un job ayant échoué peut déjà avoir effectué un certains nombre d'opérations incompatibles avec un deuxième lancement. Par contre il est recommandé d'utiliser shallow resubmission pour donner plus de chance à votre job de s'exécuter. |
640 | | |
641 | | Dans l'exemple ci-dessous, on devalide le deep resubmission et on limite les tentatives de shallow resubmission à 3: |
642 | | |
643 | | {{{ |
644 | | RetryCount = 0; |
645 | | ShallowRetryCount = 3; |
646 | | }}} |
647 | | |
648 | | === Références utiles === |
649 | | |
650 | | Consulter les documents ci-dessous pour plus d'informations. Vous pourrez apprendre par exemple dans le 1er document |
651 | | (comment gLite 3.1 User Guide) comment : |
652 | | |
653 | | * utiliser GridFTP pour le transfert des SandBox |
654 | | * utiliser les DAG (direct acyclic graphs) : jobs dépendants qui doivent s'exécuter dans un certain ordre |
655 | | * utiliser les Parametric jobs : collection de jobs identiques à tous points sauf pour un parametre d'exécution |
656 | | |
657 | | gLite 3.1 User Guide: |
658 | | https://edms.cern.ch/file/722398/1.2/gLite-3-UserGuide.html |
659 | | |
660 | | Submission and monitoring of jobs via WMProxy using the command line interface: |
661 | | http://wiki.egee-see.org/index.php/SG_Running_Jobs_WMProxy_CLI |
662 | | |
663 | | Tutorial: Submitting jobs : |
664 | | http://www-numi.fnal.gov/offline_software/srt_public_context/GridTools/docs/jobs_tutorial.html#submitting_jobs |
665 | | |
666 | | |
667 | | |
| 342 | |
| 343 | Enfin l'option `--unset` de `glite-wms-job-perusal` permet de désactiver le Job Perusal : |
| 344 | |