Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Avvia un job Spark in un EMR cluster transitorio utilizzando una funzione Lambda
Creato da Dhrubajyoti Mukherjee () AWS
Ambiente: produzione | Tecnologie: analisi | Carico di lavoro: open source |
AWSservizi: AmazonEMR; AWS Identity and Access Management; AWS Lambda; Amazon VPC |
Riepilogo
Questo modello utilizza l'EMR RunJobFlow APIazione Amazon per avviare un cluster transitorio per eseguire un job Spark da una funzione Lambda. Un EMR cluster temporaneo è progettato per terminare non appena il processo è completo o in caso di errore. Un cluster transitorio offre risparmi sui costi perché viene eseguito solo durante il periodo di calcolo e offre scalabilità e flessibilità in un ambiente cloud.
Il EMR cluster transitorio viene avviato utilizzando il linguaggio di programmazione Boto3 e API Python in una funzione Lambda. La funzione Lambda, scritta in Python, offre la flessibilità aggiuntiva di avviare il cluster quando è necessario.
Per dimostrare il calcolo e l'output di un batch di esempio, questo modello avvierà un job Spark in un EMR cluster da una funzione Lambda ed eseguirà un calcolo in batch con i dati di vendita di esempio di un'azienda fittizia. L'output del job Spark sarà un CSV file di valori separati da virgole () in Amazon Simple Storage Service (Amazon S3). Il file di dati di input, il file Spark .jar, un frammento di codice e un AWS CloudFormation modello per un cloud privato virtuale (VPC) e i ruoli AWS Identity and Access Management (IAM) per eseguire il calcolo vengono forniti come allegato.
Prerequisiti e limitazioni
Prerequisiti
Un account attivo AWS
Limitazioni
Dal codice può essere avviato un solo job Spark alla volta.
Versioni del prodotto
Testato su Amazon EMR 6.0.0
Architettura
Stack tecnologico Target
Amazon EMR
AWSLambda
Amazon S3
Apache Spark
Architettura Target
Automazione e scalabilità
Per automatizzare il calcolo EMR in batch di Spark, puoi utilizzare una delle seguenti opzioni.
Implementa una EventBridge regola Amazon in grado di avviare la funzione Lambda in una pianificazione cron. Per ulteriori informazioni, consulta Tutorial: Schedule AWS Lambda functions using. EventBridge
Configura le notifiche degli eventi di Amazon S3 per avviare la funzione Lambda all'arrivo dei file.
Passa i parametri di input alla funzione AWS Lambda tramite il corpo dell'evento e le variabili di ambiente Lambda.
Strumenti
AWSservizi
Amazon EMR è una piattaforma di cluster gestita che semplifica l'esecuzione di framework di big data AWS per elaborare e analizzare grandi quantità di dati.
AWSLambda è un servizio di elaborazione che ti aiuta a eseguire il codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.
Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.
Altri strumenti
Apache Spark
è un motore di analisi multilingue per l'elaborazione di dati su larga scala.
Epiche
Attività | Descrizione | Competenze richieste |
---|---|---|
Crea i IAM ruoli e ilVPC. | Se disponi già dei EMR IAM ruoli AWS Lambda e Amazon e unVPC, puoi saltare questo passaggio. Per eseguire il codice, sia il EMR cluster che la funzione Lambda richiedono IAM ruoli. Il EMR cluster richiede anche una VPC sottorete pubblica o una sottorete privata con un gateway. NAT Per creare automaticamente tutti i IAM ruoli e unVPC, distribuisci il AWS CloudFormation modello allegato così com'è oppure puoi creare i ruoli e farlo VPC manualmente come specificato nella sezione Informazioni aggiuntive. | Architetto del cloud |
Nota le chiavi AWS CloudFormation di output del modello. | Dopo che il CloudFormation modello è stato distribuito correttamente, vai alla scheda Output nella AWS CloudFormation console. Nota i cinque tasti di output:
Utilizzerai i valori di queste chiavi quando creerai la funzione Lambda. | Architetto del cloud |
Attività | Descrizione | Competenze richieste |
---|---|---|
Carica il file.jar di Spark. | Carica il file Spark .jar nel bucket S3 creato dallo stack. AWS CloudFormation Il nome del bucket è lo stesso della chiave di output. | Generale AWS |
Attività | Descrizione | Competenze richieste |
---|---|---|
Creazione di una funzione Lambda. | Sulla console Lambda, crea una funzione Lambda Python 3.9+ con un ruolo di esecuzione. La politica del ruolo di esecuzione deve consentire a Lambda di avviare un EMR cluster. (Vedi il AWS CloudFormation modello allegato). | Ingegnere dei dati, ingegnere del cloud |
Copia e incolla il codice. | Sostituisci il codice nel | Ingegnere dei dati, ingegnere del cloud |
Modifica i parametri nel codice. | Segui i commenti nel codice per modificare i valori dei parametri in modo che corrispondano al tuo AWS account. | Ingegnere dei dati, ingegnere del cloud |
Avvia la funzione per avviare il cluster. | Avvia la funzione per avviare la creazione di un EMR cluster transitorio con il file Spark .jar fornito. Eseguirà il job Spark e terminerà automaticamente quando il job sarà completo. | Ingegnere dei dati, ingegnere del cloud |
Controlla lo stato EMR del cluster. | Dopo l'avvio, il EMR cluster viene visualizzato nella EMR console Amazon nella scheda Cluster. Eventuali errori durante l'avvio del cluster o l'esecuzione del processo possono essere controllati di conseguenza. | Ingegnere dei dati, ingegnere del cloud |
Attività | Descrizione | Competenze richieste |
---|---|---|
Carica il file.jar di Spark. | Scarica il file Spark .jar dalla sezione Allegati e caricalo nel bucket S3. | Ingegnere dei dati, ingegnere del cloud |
Carica il set di dati di input. | Carica il | Ingegnere dei dati, ingegnere del cloud |
Incolla il codice Lambda e modifica i parametri. | Copia il codice dalla sezione Strumenti e incolla il codice in una funzione Lambda, sostituendo il file di codice. | Ingegnere dei dati, ingegnere del cloud |
Avvia la funzione e verifica l'output. | Dopo che la funzione Lambda ha avviato il cluster con il job Spark fornito, genera un file.csv nel bucket S3. | Ingegnere dei dati, ingegnere del cloud |
Risorse correlate
Informazioni aggiuntive
Codice
""" Copy paste the following code in your Lambda function. Make sure to change the following key parameters for the API as per your account -Name (Name of Spark cluster) -LogUri (S3 bucket to store EMR logs) -Ec2SubnetId (The subnet to launch the cluster into) -JobFlowRole (Service role for EC2) -ServiceRole (Service role for Amazon EMR) The following parameters are additional parameters for the Spark job itself. Change the bucket name and prefix for the Spark job (located at the bottom). -s3://your-bucket-name/prefix/lambda-emr/SparkProfitCalc.jar (Spark jar file) -s3://your-bucket-name/prefix/fake_sales_data.csv (Input data file in S3) -s3://your-bucket-name/prefix/outputs/report_1/ (Output location in S3) """ import boto3 client = boto3.client('emr') def lambda_handler(event, context): response = client.run_job_flow( Name='spark_job_cluster', LogUri='s3://your-bucket-name/prefix/logs', ReleaseLabel='emr-6.0.0', Instances={ 'MasterInstanceType': 'm5.xlarge', 'SlaveInstanceType': 'm5.large', 'InstanceCount': 1, 'KeepJobFlowAliveWhenNoSteps': False, 'TerminationProtected': False, 'Ec2SubnetId': 'subnet-XXXXXXXXXXXXXX' }, Applications=[{'Name': 'Spark'}], Configurations=[ {'Classification': 'spark-hive-site', 'Properties': { 'hive.metastore.client.factory.class': 'com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory'} } ], VisibleToAllUsers=True, JobFlowRole='EMRLambda-EMREC2InstanceProfile-XXXXXXXXX', ServiceRole='EMRLambda-EMRRole-XXXXXXXXX', Steps=[ { 'Name': 'flow-log-analysis', 'ActionOnFailure': 'TERMINATE_CLUSTER', 'HadoopJarStep': { 'Jar': 'command-runner.jar', 'Args': [ 'spark-submit', '--deploy-mode', 'cluster', '--executor-memory', '6G', '--num-executors', '1', '--executor-cores', '2', '--class', 'com.aws.emr.ProfitCalc', 's3://your-bucket-name/prefix/lambda-emr/SparkProfitCalc.jar', 's3://your-bucket-name/prefix/fake_sales_data.csv', 's3://your-bucket-name/prefix/outputs/report_1/' ] } } ] )
IAMruoli e creazione VPC
Per avviare il EMR cluster in una funzione Lambda, sono necessari IAM i ruoli a VPC e. È possibile configurare i IAM ruoli VPC and utilizzando il AWS CloudFormation modello nella sezione Allegati di questo modello oppure è possibile crearli manualmente utilizzando i seguenti collegamenti.
I seguenti IAM ruoli sono necessari per eseguire Lambda e Amazon. EMR
Ruolo di esecuzione Lambda
Il ruolo di esecuzione di una funzione Lambda le concede l'autorizzazione ad accedere a AWS servizi e risorse.
Ruolo di servizio per Amazon EMR
Il EMRruolo Amazon definisce le azioni consentite per Amazon EMR durante il provisioning di risorse e l'esecuzione di attività a livello di servizio che non vengono eseguite nel contesto di un'istanza Amazon Elastic Compute Cloud (EC2Amazon) in esecuzione all'interno di un cluster. Ad esempio, il ruolo di servizio viene utilizzato per fornire EC2 istanze all'avvio di un cluster.
Ruolo di servizio per le istanze EC2
Il ruolo di servizio per EC2 le istanze di cluster (chiamato anche profilo di EC2 istanza per AmazonEMR) è un tipo speciale di ruolo di servizio assegnato a ogni EC2 istanza di un EMR cluster Amazon all'avvio dell'istanza. I processi applicativi eseguiti su Apache Hadoop assumono questo ruolo per le autorizzazioni di interazione con altri servizi. AWS
VPCe creazione di sottoreti
È possibile creare un file VPC dalla VPC console.