Publié le :

Exécution parallèle avec RSUBMIT et PROC MEANS

Attention : Ce code nécessite des droits administrateur.
Le programme commence par configurer des options globales pour la gestion des sessions RSUBMIT, permettant l'authentification automatique (`autosignon=yes`), l'exécution simultanée des tâches distantes (`noconnectwait`) et la déconnexion automatique après chaque tâche (`noconnectpersist`). Une `libname` appelée `workdir` est définie pour pointer vers le répertoire de travail de la session principale, facilitant le partage des données. Deux blocs RSUBMIT sont ensuite exécutés : l'un sur `worker1` pour analyser `sashelp.class`, l'autre sur `worker2` pour analyser `sashelp.heart`. Les résultats de `PROC MEANS` sont sauvegardés dans des jeux de données (`means_class` et `means_heart`) dans la bibliothèque `workdir`. La commande `waitfor _ALL_` assure que toutes les tâches distantes sont complétées avant que la session principale n'affiche les résultats à l'aide de `PROC PRINT`.
Analyse des données

Type : SASHELP


Les jeux de données d'entrée (`sashelp.class` et `sashelp.heart`) proviennent de la bibliothèque SASHELP, une bibliothèque standard fournie avec SAS, ne nécessitant pas de données externes spécifiques ou de création interne.

1 Bloc de code
OPTIONS
Explication :
Ce bloc configure les options globales pour les sessions RSUBMIT. `autosignon=yes` permet une connexion automatique. `noconnectwait` assure l'exécution parallèle des sessions distantes. `noconnectpersist` déconnecte la session distante après son achèvement. `sascmd='!sascmd'` spécifie d'utiliser la même commande SAS pour démarrer les sessions distantes.
Copié !
1options autosignon=yes noconnectwait noconnectpersist sascmd='!sascmd' ;
2 
2 Bloc de code
LIBNAME
Explication :
Ce bloc définit une bibliothèque SAS nommée `workdir` qui pointe vers le répertoire de travail temporaire de la session principale. Cela permet aux sessions RSUBMIT distantes d'accéder et de sauvegarder des données directement dans cette zone de travail, facilitant l'échange de résultats.
Copié !
1LIBNAME workdir "%sysfunc(getoption(work))";
3 Bloc de code
PROC MEANS
Explication :
Ce bloc exécute `PROC MEANS` sur le jeu de données `sashelp.class` sur une session SAS distante ('worker1'). L'option `inheritlib=(workdir)` rend la bibliothèque `workdir` accessible à la session distante. Les résultats agrégés sont sauvegardés dans un nouveau jeu de données `workdir.means_class` sans être affichés directement (`noprint`).
Copié !
1rsubmit inheritlib=(workdir) remote=worker1;
2 PROC MEANS DATA=sashelp.class noprint;
3 OUTPUT out=workdir.means_class;
4 RUN;
5endrsubmit;
4 Bloc de code
PROC MEANS
Explication :
Similaire au bloc précédent, ce bloc exécute `PROC MEANS` sur le jeu de données `sashelp.heart` sur une autre session SAS distante ('worker2'). Les résultats sont sauvegardés dans `workdir.means_heart`.
Copié !
1rsubmit inheritlib=(workdir) remote=worker2;
2 PROC MEANS DATA=sashelp.heart noprint;
3 OUTPUT out=workdir.means_heart;
4 RUN;
5endrsubmit;
5 Bloc de code
WAITFOR
Explication :
Cette instruction attend la fin de toutes les sessions RSUBMIT précédemment soumises avant de permettre à l'exécution du programme principal de continuer. Ceci est crucial pour s'assurer que les résultats des tâches distantes sont disponibles avant d'être traités.
Copié !
1waitfor _ALL_;
6 Bloc de code
PROC PRINT
Explication :
Ce bloc affiche le contenu du jeu de données `means_class`, qui contient les résultats de `PROC MEANS` calculés sur `sashelp.class` par la session distante 'worker1'.
Copié !
1title 'Output from worker1';
2PROC PRINT
3DATA=means_class;
4RUN;
5 
7 Bloc de code
PROC PRINT
Explication :
Ce bloc affiche le contenu du jeu de données `means_heart`, qui contient les résultats de `PROC MEANS` calculés sur `sashelp.heart` par la session distante 'worker2'.
Copié !
1title 'Output from worker2';
2PROC PRINT
3DATA=means_heart;
4RUN;
5 
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Name: rsubmit_example.sas, Purpose: Gives an example of running PROC MEANS in parallel on two different datasets using RSUBMIT., Author: Stu Sztukowski, Parameters: N/A, Dependencies/Assumptions: SAS/STAT is licensed, SAS/CONNECT is licensed


Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« L'exécution parallèle avec RSUBMIT est l'une des techniques les plus efficaces pour réduire le temps de traitement des analyses massives. En distribuant les procédures PROC MEANS sur plusieurs sessions esclaves (worker1, worker2), vous exploitez pleinement les capacités multi-cœurs de votre infrastructure. Ce script illustre une architecture "Maître-Esclave" où la session principale orchestre la charge de travail sans être bloquée par l'exécution de chaque tâche. »