Database

SAS et Hadoop : Comment conserver la puissance du traitement parallèle

Simon 23/09/2021 2 views

Une idée reçue persiste chez les utilisateurs historiques de SAS© confrontés au Big Data : "Pour analyser mes données Hadoop avec SAS©, je dois d'abord les extraire de HDFS, les convertir en tables SAS© locales, et ensuite lancer mes PROC SQL."

Cette approche (ETL classique) est non seulement inefficace, mais elle annule le principal avantage d'Hadoop : le traitement parallèle distribué. Si vous déplacez des pétaoctets de données vers un serveur SAS© unique (Compute Server), vous créez un goulot d'étranglement massif.

La réponse moderne (depuis SAS© 9.4) repose sur le principe du "In-Database Processing" : déplacer le code vers les données, et non l'inverse. Voici les trois technologies clés pour intégrer SAS© et Hadoop sans perdre la parallélisation.

1. PROC FEDSQL : Le SQL Nouvelle Génération

Si vous êtes habitué à PROC SQL, vous savez qu'elle a des limites en environnement distribué. Elle a souvent tendance à rapatrier les données pour effectuer les jointures ou les tris en local (sur le serveur SAS©).

La solution : PROC FEDSQL Introduite avec SAS© 9.4, FedSQL est une implémentation propriétaire de la norme ANSI SQL:1999, conçue spécifiquement pour le traitement "Scalable".

  • Fonctionnement : FedSQL agit comme un traducteur intelligent. Lorsqu'il cible Hadoop (via Hive ou Impala), il tente de traduire votre requête en dialecte natif (HiveQL ou Impala SQL) et de l'exécuter directement sur le cluster.

  • Avantage : Les jointures, filtres et agrégations sont exécutés par les nœuds Hadoop en parallèle. Seul le résultat final (souvent petit) est renvoyé à SAS©.

  • Connectivité : Supporte Hive, HAWQ, et Impala.

1/* Exemple FedSQL exécuté DANS Hadoop */
2PROC FEDSQL sessref=myHadoopSession;
3 select region, sum(sales)
4 from HadoopLib.LargeSales
5 group BY region;
6QUIT;

2. Le Langage DS2 et le "Code Accelerator"

Le DATA Step classique de SAS© est séquentiel et monothread (il traite une ligne après l'autre sur un seul processeur). Il est donc incompatible avec la nature distribuée d'Hadoop.

La solution : Le langage DS2 DS2 est le successeur multithread du Data Step. Il inclut des concepts de programmation orientée objet et un typage fort, mais surtout, il est conçu pour l'exécution parallèle.

  • SAS© In-Database Code Accelerator : C'est le composant magique. Il permet de prendre un programme DS2 écrit dans votre interface SAS©, et de l'envoyer ("push") pour qu'il s'exécute à l'intérieur des nœuds de données Hadoop (sous forme de tâches MapReduce ou via Spark selon les versions).

  • Data Program & Thread Program : Le programme de données et les threads de traitement tournent en parallèle sur chaque nœud du cluster, exploitant toute la puissance CPU disponible sur votre infrastructure Big Data.

3. SAS© SPD Engine (SPDE) sur HDFS

Parfois, vous avez besoin de la structure physique d'une table SAS© (indexation, compression, métadonnées précises) mais vous voulez stocker ces données sur le système de fichiers distribué (HDFS) pour la fiabilité et la vitesse I/O.

La solution : Scalable Performance Data Engine (SPDE) Le moteur SPDE permet de stocker des tables au format SAS© directement sur HDFS.

  • Il partitionne les données (fichiers de données .dpf, fichiers d'index .hbx, métadonnées .mdf).

  • Cela permet à SAS© de lire et écrire en parallèle depuis plusieurs nœuds, offrant des débits d'I/O bien supérieurs à un stockage disque classique, tout en gardant les données "accessibles" comme si elles étaient locales.

BesoinTechnologie RecommandéeLieu d'exécution
Requêtes SQL (Jointures, Agrégations)PROC FEDSQLDistribué dans Hadoop (via Hive/Impala)
Transformations complexes, Data QualityLangage DS2 (+ Code Accelerator)Distribué dans Hadoop (Nœuds de calcul)
Stockage haute performance format SAS©SPD EngineDistribué sur HDFS
Lecture de fichiers texte brutsSAS©/ACCESS to Hadoop (Hive)Hadoop (via couche Hive)

Ne faites pas d'ETL massif vers SAS©. Utilisez FedSQL et DS2 pour pousser la logique de traitement vers le cluster. Vous conserverez ainsi l'avantage du parallélisme Hadoop tout en codant depuis votre environnement SAS© familier.