Sviluppo e test di pipeline ETL per AWS a livello locale

Nodo di origine: 997665

Sviluppo e test di pipeline ETL per AWS a livello locale

In genere, lo sviluppo e il test delle pipeline ETL vengono eseguiti su ambienti/cluster reali, la cui configurazione richiede molto tempo e richiede manutenzione. Questo articolo si concentra sullo sviluppo e sul test delle pipeline ETL a livello locale con l'aiuto di Docker e LocalStack. La soluzione offre flessibilità per testare in un ambiente locale senza configurare alcun servizio sul cloud.


By Subhash Sreenivasachar, Responsabile tecnico dell'ingegnere del software presso Epsilon

Introduzione

 
 
AWS svolge un ruolo fondamentale nell'aiutare ingegneri e scienziati dei dati a concentrarsi sulla creazione di soluzioni e sulla risoluzione dei problemi senza preoccuparsi della necessità di configurare l'infrastruttura. Con un approccio serverless e con pagamento in base al consumo, AWS offre facilità di creazione di servizi al volo.

AWS Glue è ampiamente utilizzato dai data engineer per creare pipeline ETL serverless. PySpark è uno degli stack tecnologici comuni utilizzati per lo sviluppo. Tuttavia, nonostante la disponibilità dei servizi, ci sono alcune sfide che devono essere affrontate.

Il debug del codice nell'ambiente AWS sia per lo script ETL (PySpark) che per qualsiasi altro servizio è una sfida.

  • Il monitoraggio costante dell'utilizzo dei servizi AWS è fondamentale per tenere sotto controllo il fattore costo
  • AWS offre Dev Endpoint con tutte le librerie Spark installate, ma considerando il prezzo, non è utilizzabile da grandi team di sviluppo
  • L'accessibilità dei servizi AWS potrebbe essere limitato per determinati utenti

Soluzione

 
 
Le soluzioni per AWS possono essere sviluppate, testate in ambiente locale senza preoccuparsi dell'accessibilità o del fattore costo. Attraverso questo articolo, affrontiamo due problemi:

  1. Debug del codice PySpark localmente senza utilizzare endpoint di sviluppo AWS.
  2. Interazione con i servizi AWS a livello locale

Entrambi i problemi possono essere risolti con l'uso delle immagini Docker.

  1. Innanzitutto, eliminiamo la necessità di un server in ambiente AWS e, invece, un'immagine docker in esecuzione sulla macchina funge da ambiente per eseguire il codice.

AWS fornisce un'immagine sandbox che può essere utilizzata per gli script PySpark. L'immagine Docker può essere configurata per eseguire il codice PySpark. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. Con la macchina docker disponibile per eseguire il codice, è necessario che un servizio come S3 archivi (legga/scriva) i file durante la creazione di una pipeline ETL.

Le interazioni con S3 possono essere sostituite con Stack locale che fornisce un framework di test/mocking di facile utilizzo per lo sviluppo di applicazioni cloud. Crea un ambiente di test sul tuo computer locale che fornisce le stesse funzionalità e API dell'ambiente cloud AWS reale.

testata

Finora, l'articolo tratta della costruzione di una pipeline ETL e dell'utilizzo dei servizi disponibili. Tuttavia, un approccio simile può essere adattato a qualsiasi caso d'uso mentre si lavora con servizi AWS come SNS, SQS, CloudFormation, funzioni Lambda ecc.

Approccio

  • Utilizza i contenitori docker come interprete remoto
  • Esegui la sessione PySpark sui contenitori
  • Avvia il servizio S3 localmente utilizzando LocalStack
  • Utilizza il codice PySpark per leggere e scrivere dal bucket S3 in esecuzione su LocalStack

Pre-requisiti

 
Sul computer devono essere installati i seguenti strumenti

  • docker
  • Codice PyCharm Professional/VisualStudio

Impostare

  • Scarica o esegui il pull delle immagini della finestra mobile (docker pull )
    • libs:glue_libs_1.0.0_image_01
    • localstack/localstack
  • I contenitori Docker possono essere utilizzati come interpreti remoti nella versione professionale di PyCharm.

Implementazione

 
Con Docker installato e le immagini trasferite sul tuo computer locale, inizia a impostare PyCharm con le configurazioni per avviare i contenitori.

  • Crea un file docker-compose.yml

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-docker-compose-yml

  • Crea un file Docker

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile

  • Utilizzare il file dei requisiti con i pacchetti da installare

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-requirements-txt
 

  • Configura l'interprete remoto Python
    • Configura l'interprete Python utilizzando il file docker-compose.
    • Seleziona "glue-service" nelle impostazioni di PyCharm Docker Compose.
    • Il file Docker-compose crea ed esegue i contenitori per entrambe le immagini
    • LocalStack viene eseguito per impostazione predefinita sulla porta 4566 e su di essa è abilitato il servizio S3

Code

  • Librerie richieste da importare

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-imports

  • Aggiungi un file al bucket S3 in esecuzione su LocalStack

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 è S3 in esecuzione localmente all'interno del contenitore docker

  • Configura la sessione PySpark per leggere da S3

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-create_pyspark_session

  • La sessione PySpark si connette a S3 tramite le credenziali fittizie fornite
  • Puoi leggere da S3 direttamente utilizzando la sessione PySpark creata

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-read_from_s3

  • Infine, è possibile scrivere su S3 in qualsiasi formato preferito

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-write_to_s3

Una volta seguiti i passaggi sopra menzionati, possiamo creare un file CSV fittizio con dati fittizi per i test e dovresti essere in grado di farlo

  • Aggiungi file a S3 (che è in esecuzione su LocalStack)
  • Leggi da S3
  • Riscrivi a S3 come parquet

Dovresti essere in grado di eseguire il file .py da eseguire e verrà creata una sessione PySpark in grado di leggere dal bucket S3 in esecuzione localmente utilizzando l'API LocalStack.

Inoltre, puoi anche verificare se LocalStack è in esecuzione con http://localhost:4566/health

LocalStack ti offre la possibilità di eseguire comandi anche utilizzando AWS CLI.

Conclusione

 
 
L'uso di Docker e Localstack fornisce un modo semplice e veloce per eseguire il codice Pyspark, eseguire il debug sui contenitori e scrivere su S3 che è in esecuzione localmente. Tutto questo senza doversi connettere ad alcun servizio AWS.

 
Riferimenti:

 
Bio: Subhash Sreenivasachar è Lead Software Engineer presso il team Epsilon Digital Experience, creando soluzioni ingegneristiche per risolvere problemi di data science, in particolare la personalizzazione, e contribuire a incrementare il ROI per i clienti.

Correlato:

Fonte: https://www.kdnuggets.com/2021/08/development-testing-etl-pipelines-aws-locally.html

Timestamp:

Di più da KDnuggets