Desenvolvimento e teste de pipelines ETL para AWS localmente

Nó Fonte: 997665

Desenvolvimento e teste de pipelines ETL para AWS localmente

Normalmente, o desenvolvimento e o teste de pipelines ETL são feitos em ambientes/clusters reais, o que consome tempo para configurar e requer manutenção. Este artigo se concentra no desenvolvimento e teste de pipelines ETL localmente com a ajuda do Docker e LocalStack. A solução oferece flexibilidade para testar em um ambiente local sem configurar nenhum serviço na nuvem.


By Subhash Sreenivasachar, Engenheiro de Software Líder Técnico da Epsilon

Introdução

 
 
A AWS desempenha um papel fundamental ao ajudar engenheiros e cientistas de dados a se concentrarem na construção de soluções e na solução de problemas sem se preocupar com a necessidade de configurar a infraestrutura. Com uma abordagem de preços sem servidor e com pagamento conforme o uso, a AWS oferece facilidade de criação de serviços dinamicamente.

AWS Glue é amplamente usado por engenheiros de dados para construir pipelines ETL sem servidor. PySpark é uma das pilhas de tecnologia comuns usadas para desenvolvimento. No entanto, apesar da disponibilidade de serviços, existem certos desafios que precisam de ser enfrentados.

Depurar código em ambiente AWS, seja para script ETL (PySpark) ou qualquer outro serviço, é um desafio.

  • O monitoramento contínuo do uso do serviço AWS é fundamental para manter o fator custo sob controle
  • A AWS oferece Dev Endpoint com todas as bibliotecas Spark instaladas, mas considerando o preço, não é viável para uso por grandes equipes de desenvolvimento
  • A acessibilidade dos serviços da AWS pode ser limitado para determinados usuários

Solução

 
 
Soluções para AWS podem ser desenvolvidas e testadas em ambiente local sem preocupação com acessibilidade ou fator de custo. Através deste artigo, estamos abordando dois problemas –

  1. Depuração de código PySpark localmente sem usar endpoints de desenvolvimento da AWS.
  2. Interagindo com os serviços da AWS localmente

Ambos os problemas podem ser resolvidos com o uso de imagens Docker.

  1. Primeiro, eliminamos a necessidade de um servidor no ambiente AWS e, em vez disso, uma imagem docker em execução na máquina atua como ambiente para executar o código.

A AWS fornece uma imagem sandbox que pode ser usada para scripts PySpark. A imagem Docker pode ser configurada para executar o código PySpark. https://aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container/
 

  1. Com a máquina docker disponível para executar o código, há necessidade de um serviço como o S3 para armazenar (leitura/gravação) arquivos durante a construção de um pipeline ETL.

As interações com S3 podem ser substituídas por LocalStackName que fornece uma estrutura de teste/simulação fácil de usar para o desenvolvimento de aplicativos em nuvem. Ele cria um ambiente de teste em sua máquina local que fornece a mesma funcionalidade e APIs que o ambiente real da nuvem AWS.

cabeçalho

Até o momento, o artigo trata da construção de um pipeline ETL e da utilização dos serviços disponíveis. No entanto, uma abordagem semelhante pode ser adaptada a qualquer caso de uso ao trabalhar com serviços AWS como SNS, SQS, CloudFormation, funções Lambda, etc.

Abordagem

  • Use contêineres docker como intérprete remoto
  • Execute a sessão PySpark nos contêineres
  • Ative o serviço S3 localmente usando LocalStack
  • Use o código PySpark para ler e gravar no bucket S3 em execução no LocalStack

Pré-requisitos

 
As seguintes ferramentas devem ser instaladas em sua máquina

  • Estivador
  • Código PyCharm Professional/VisualStudio

instalação

  • Baixe ou extraia imagens do docker (docker pull )
    • libs:glue_libs_1.0.0_image_01
    • pilha local/pilha local
  • Os contêineres Docker podem ser usados ​​como intérpretes remotos na versão profissional do PyCharm.

Implementação

 
Com o Docker instalado e as imagens extraídas para sua máquina local, comece a definir o PyCharm com configurações para iniciar os contêineres.

  • Crie um arquivo docker-compose.yml

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

  • Crie um DockerFile

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

  • Use o arquivo de requisitos com os pacotes a serem instalados

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

  • Configurar o interpretador remoto Python
    • Configure o interpretador Python usando o arquivo docker-compose.
    • Selecione `glue-service` nas configurações do PyCharm Docker Compose.
    • O arquivo Docker-compose cria e executa os contêineres para ambas as imagens
    • LocalStack por padrão é executado na porta 4566 e o ​​serviço S3 está habilitado nela

Code

  • Bibliotecas necessárias a serem importadas

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

  • Adicione um arquivo ao bucket S3 em execução no LocalStack

https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-add_to_bucket
http://host.docker.internal:4566 o S3 está sendo executado localmente dentro do contêiner docker

  • Configure a sessão PySpark para ler do S3

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

  • A sessão PySpark se conecta ao S3 por meio de credenciais simuladas fornecidas
  • Você pode ler diretamente do S3 usando a sessão PySpark criada

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

  • Finalmente, é possível escrever no S3 em qualquer formato preferido

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

Depois que as etapas mencionadas acima forem seguidas, podemos criar um arquivo csv fictício com dados simulados para teste e você deve estar pronto para

  • Adicionar arquivo ao S3 (que está sendo executado no LocalStack)
  • Leia do S3
  • Escreva de volta para S3 como parquet

Você deve ser capaz de executar o arquivo .py para executar e será criada uma sessão PySpark que pode ler do bucket S3 que está sendo executado localmente usando a API LocalStack.

Além disso, você também pode verificar se o LocalStack está sendo executado com http://localhost:4566/health

LocalStack também oferece a capacidade de executar comandos usando AWS CLI.

Conclusão

 
 
O uso do Docker e Localstack fornece uma maneira rápida e fácil de executar o código Pyspark, depurar em contêineres e gravar no S3 que está sendo executado localmente. Tudo isso sem precisar se conectar a nenhum serviço AWS.

 
Referências:

 
Bio: Subhash Sreenivasachar é engenheiro-chefe de software da equipe Epsilon Digital Experience, construindo soluções de engenharia para resolver problemas de ciência de dados, especificamente personalização, e ajudar a gerar ROI para os clientes.

Relacionado:

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

Carimbo de hora:

Mais de KDnuggetsGenericName