mardi, novembre 28, 2023

Spark sur AWS Lambda : un environnement d’exécution Apache Spark pour AWS Lambda


Spark sur AWS Lambda (SoAL) est un framework qui fonctionne Apache Spark charges de travail sur AWS Lambda. Il est conçu pour les charges de travail par lots et basées sur des événements, gérant des tailles de charge utile de données allant de 10 Ko à 400 Mo. Ce framework est idéal pour les charges de travail d’analyse par lots de Service de stockage simple Amazon (Amazon S3) et streaming basé sur les événements à partir de Streaming géré par Amazon pour Apache Kafka (Amazon MSK) et Amazon Kinèse. Le cadre intègre de manière transparente les données avec des plateformes telles que Apache Iceberg, Apache Delta Lac, ApacheHUDI, Amazon Redshiftet Flocon de neige, offrant une solution de traitement de données peu coûteuse et évolutive. SoAL fournit un cadre qui vous permet d’exécuter des moteurs de traitement de données comme Apache Spark et de profiter des avantages de l’architecture sans serveur, comme la mise à l’échelle automatique et le calcul pour les charges de travail d’analyse.

Cet article met en évidence l’architecture SoAL, fournit une infrastructure en tant que code (IaC), propose des instructions étape par étape pour configurer le cadre SoAL dans votre compte AWS et décrit les modèles architecturaux SoAL pour les entreprises.

Vue d’ensemble de la solution

Apache Spark propose des déploiements en mode cluster et en mode local, le premier entraînant une latence en raison de l’initialisation et du préchauffage du cluster. Bien que les moteurs basés sur cluster d’Apache Spark soient couramment utilisés pour le traitement des données, en particulier avec les frameworks ACID, ils présentent une surcharge de ressources élevée et des performances plus lentes pour les charges utiles inférieures à 50 Mo par rapport au framework Pandas plus efficace pour les ensembles de données plus petits. Comparé au mode cluster Apache Spark, le mode local offre une initialisation plus rapide et de meilleures performances pour les petites charges de travail d’analyse. Le mode local d’Apache Spark sur le framework SoAL est optimisé pour les petites charges de travail d’analyse, et le mode cluster est optimisé pour les charges de travail d’analyse plus importantes, ce qui en fait un framework polyvalent pour les entreprises.

Nous fournissons un Modèle d’application sans serveur AWS (AWS SAM), disponible dans le Dépôt GitHub, pour déployer le framework SoAL dans un compte AWS. Le modèle AWS SAM crée l’image Docker, la transmet au Registre de conteneurs élastiques Amazon (Amazon ECR), puis crée la fonction Lambda. Le modèle AWS SAM accélère la configuration et l’adoption du cadre SoAL pour les clients AWS.

Architecture SoAL

Le framework SoAL fournit un mode local et un Apache Spark conteneurisé s’exécutant sur Lambda. Dans le cadre SoAL, Lambda s’exécute dans un Docker conteneur avec les dépendances Apache Spark et AWS installées. Lors de l’appel, le gestionnaire Lambda du framework SoAL récupère le script PySpark à partir d’un dossier S3 et soumet la tâche Spark sur Lambda. Les journaux des tâches Spark sont enregistrés dans Amazon CloudWatch.

Pour les tâches de streaming et par lots, l’événement Lambda est envoyé au script PySpark en tant qu’argument nommé. En utilisant un cache d’images basé sur un conteneur ainsi que les fonctionnalités d’instance tiède de Lambda, il a été constaté que le temps de préchauffage global de la JVM était réduit d’environ 1 000 heures. 70 secondes à moins de 30 secondes. Il a été observé que le framework fonctionne bien avec des charges utiles par lots allant jusqu’à 400 Mo et des données en streaming provenant d’Amazon MSK et Kinesis. Les coûts par session pour une charge de travail d’analyse donnée dépendent du nombre de requêtes, de la durée d’exécution et de la mémoire configurée pour les fonctions Lambda.

Le diagramme suivant illustre l’architecture SoAL.

L’architecture d’entreprise

Le script PySpark est développé en standard Spark et est compatible avec le framework SoAL, Amazon DME, Amazon EMR sans serveuret Colle AWS. Si nécessaire, vous pouvez utiliser les scripts PySpark en mode cluster sur Amazon EMR, EMR Serverless et AWS Glue. Pour les charges de travail d’analyse d’une taille comprise entre quelques Ko et 400 Mo, vous pouvez utiliser le framework SoAL sur Lambda et dans des scénarios de charge de travail d’analyse plus importants de plus de 400 Mo, et exécuter le même script PySpark sur des outils basés sur un cluster AWS comme Amazon EMR, EMR Serverless. et AWS Glue. Le script et l’architecture extensibles font de SoAL un cadre évolutif pour les charges de travail d’analyse pour les entreprises. Le diagramme suivant illustre cette architecture.

Conditions préalables

Pour mettre en œuvre cette solution, vous avez besoin d’un Gestion des identités et des accès AWS (IAM) avec l’autorisation de AWS CloudFormationAmazon ECR, Lambda et AWS CodeBuild.

Mettre en place la solution

Pour configurer la solution dans un compte AWS, procédez comme suit :

  1. Clonez le référentiel GitHub sur le stockage local et remplacez le répertoire du dossier cloné par le dossier CloudFormation :
    git clone https://github.com/aws-samples/spark-on-aws-lambda.git

  2. Exécutez le modèle AWS SAM sam-imagebuilder.yaml en utilisant la commande suivante avec le nom de la pile et le framework de votre choix. Dans cet exemple, le framework est Apache HUDI :
    sam deploy --template-file sam-imagebuilder.yaml --stack-name spark-on-lambda-image-builder --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --resolve-s3 --parameter-overrides 'ParameterKey=FRAMEWORK,ParameterValue=HUDI'

La commande déploie une pile CloudFormation appelée spark-on-lambda-image-builder. La commande exécute un projet CodeBuild qui crée et transmet l’image Docker avec la dernière balise vers Amazon ECR. La commande possède un paramètre appelé ParameterValue pour chaque framework open source (Apache Delta, Apache HUDI et Apache Iceberg).

  1. Une fois la pile déployée avec succès, copiez l’URI du référentiel ECR (spark-on-lambda-image-builder) qui s’affiche dans la sortie de la pile.
  2. Exécutez le package AWS SAM Lambda avec la région et le référentiel ECR requis :
    sam deploy --template-file sam-template.yaml --stack-name spark-on-lambda-stack --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --resolve-s3 --image-repository <accountno>.dkr.ecr.us-east-1.amazonaws.com/sparkonlambda-spark-on-lambda-image-builder --parameter-overrides 'ParameterKey=ScriptBucket,ParameterValue=<Provide the s3 bcucket of the script> ParameterKey=SparkScript,ParameterValue=<provide s3 folder lcoation> ParameterKey=ImageUri,ParameterValue=<accountno>.dkr.ecr.us-east-1.amazonaws.com/sparkonlambda-spark-on-lambda-image-builder:latest'

Cette commande crée la fonction Lambda avec l’image du conteneur du référentiel ECR. Un fichier de sortie packaged-template.yaml est créé dans le répertoire local.

  1. Facultativement, pour publier l’application AWS SAM sur le Référentiel d’applications sans serveur AWS, exécutez la commande suivante. Cela permet le partage de modèles AWS SAM avec l’interface graphique à l’aide d’AWS Serverless Application Repository et d’autres développeurs pour utiliser des déploiements rapides à l’avenir.
    sam publish --template packaged-template.yaml

Après avoir exécuté cette commande, une fonction Lambda est créée à l’aide du runtime du framework SoAL.

  1. Pour le tester, utilisez les scripts PySpark du scripts Spark dossier. Placez l’exemple de script et l’ensemble de données accomodations.csv dans un dossier S3 et indiquez l’emplacement via les variables d’environnement Lambda. SCRIPT_BUCKET et SCRIPT_LOCATION.

Une fois Lambda invoqué, il télécharge le script PySpark du dossier S3 vers un stockage local de conteneur et l’exécute sur le conteneur du framework SoAL à l’aide de SPARK-SUBMIT. L’événement Lambda est également transmis au script PySpark.

Nettoyer

Le déploiement d’un modèle AWS SAM entraîne des coûts. Supprimez l’image Docker d’Amazon ECR, supprimez la fonction Lambda et supprimez tous les fichiers ou scripts de l’emplacement S3. Vous pouvez également utiliser la commande suivante pour supprimer la pile :

sam delete --stack-name spark-on-lambda-stack

Conclusion

Le framework SoAL vous permet d’exécuter des tâches sans serveur Apache Spark sur AWS Lambda de manière efficace et rentable. Au-delà des économies de coûts, il garantit des délais de traitement rapides pour les fichiers de petite et moyenne taille. En tant que vision d’entreprise holistique, SoAL comble de manière transparente le fossé entre le traitement des grandes et petites données, en utilisant la puissance du runtime Apache Spark sur Lambda et d’autres ressources AWS basées sur des clusters.

Suivez les étapes de cet article pour utiliser le framework SoAL dans votre compte AWS et laissez un commentaire si vous avez des questions.


À propos des auteurs

John Chérian est Senior Solutions Architect (SA) chez Amazon Web Services qui aide les clients avec la stratégie et l’architecture pour créer des solutions sur AWS.

Emerson Antoine est Senior Cloud Architect chez Amazon Web Services et aide les clients à mettre en œuvre les solutions AWS.

Kiran Anand est l’architecte principal du laboratoire de données AWS chez Amazon Web Services qui aide les clients avec l’architecture Big Data et Analytics.

Related Articles

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Latest Articles