L'architecture repose sur un lac de données S3 central entouré de composants complémentaires : bases de données, EMR pour Hadoop, entrepôts de données, et outils d'analyse. Cette structure permet une circulation fluide des données entre les différents services.
Composants Clés
- Amazon EMR : Service managé pour l'exécution de frameworks Big Data (Spark, Hive, Flink)
- Redshift : Entrepôt de données cloud avec capacités de requête fédérée
- Apache DolphinScheduler : Orchestrateur de workflows open-source
Avantages d'EMR Face aux Clusters Hadoop On-Premise
- Mises à jour automatiques des composants open-source
- Dimensionnement élastique selon la charge
- Modèles de tarification flexibles (Spot, On-Demand)
Optimisations Complémentaires
EMR Serverless : Exécution sans gestion d'infrastructure
EMR sur EKS : Déploiement conteneurisé sur Kubernetes
Cas Pratique : Migration vers EMR
Un client utilisant initialmeent un cluster CDH on-premise (13 nœuds, traitement en 13h) a migré vers EMR :
- Migration initiale sur EMR EC2 (6 nœuds) : réduction à 10h
- Passage à Spark : 3.5h
- Optimisations (format Parquet, scaling élastique) : 2.4h
Orchetsration avec DolphinScheduler
Répartition des charges de travail :
| Type de tâche | Plateforme cible | Avantage |
|---|---|---|
| Petites tâches | EMR Serverless | Faible consommation mémoire |
| Tâches volumineuses | EMR sur EC2 | Arrêt/démarrage programmé |
| Tâches critiques | EMR Serverless | Analyse coût/performance |
Gestion des Métadonnées
Utilisation d'AWS Glue pour un catalogue unifié, permettant une interopérabilité entre EMR EC2 et EMR Serverless.
Défis Techniques et Solutions
- Soumission asynchrone : Abstraction via bibliothèque Python
- Journalisation hétérogène : Uniformisation via DolphinScheduler
- Interfaces API divergentes : Normalisation des appels
Implémentation Technique
from emr_integration import ProcessingSession
# Configuration pour EMR EC2
emr_ec2 = ProcessingSession(engine_type=0)
emr_ec2.run_query("requete_sql")
emr_ec2.execute_script("pyspark_script")
# Configuration pour EMR Serverless
emr_serverless = ProcessingSession(engine_type=1)
emr_serverless.run_query("requete_sql")
emr_serverless.execute_script("pyspark_script")
Intégration avec Redshift
Fonctionnalités clés :
- Requêtes fédérées sur sources externes
- Intégration S3 via Redshift Spectrum
- Mode Serverless disponible
Contrôle de Concurrence
Deux approches pour gérer les limitations de concurrence :
- Extension de concurrence Redshift (coût supplémentaire)
- Groupes de ressources dans DolphinScheduler
Intégration CI/CD
Workflow recommandé :
Developer → GitLab → Jenkins → S3 → DolphinScheduler → Redshift