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 –
- Depuração de código PySpark localmente sem usar endpoints de desenvolvimento da AWS.
- Interagindo com os serviços da AWS localmente
Ambos os problemas podem ser resolvidos com o uso de imagens Docker.
- 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/
- 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.
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
- Crie um DockerFile
https://gist.github.com/subhash-sreenivasachar/526221a4ede6053b1d576e666db8ec87#file-dockerfile
- Use o arquivo de requisitos com os pacotes a serem instalados
- 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
- 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:
- Ponto final da cola: https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint.html
Docker: https://docs.docker.com/get-docker/ - PyCharm: https://www.jetbrains.com/pycharm/
- Intérprete remoto PyCharm: https://www.jetbrains.com/help/pycharm/using-docker-compose-as-a-remote-interpreter.html
- Pilha Local: https://localstack.cloud
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
- "
- &
- acessibilidade
- Todos os Produtos
- Amazon
- analítica
- api
- APIs
- aplicações
- artigo
- disponibilidade
- AWS
- construir
- Prédio
- desafiar
- clientes
- Na nuvem
- Aplicativos em nuvem
- código
- comum
- Containers
- Criar
- Credenciais
- dados,
- Análise de Dados
- ciência de dados
- data warehouse
- Ofertas
- deep learning
- Dev
- Desenvolvimento
- digital
- Diretor
- Estivador
- Ponto final
- engenheiro
- Engenharia
- Engenheiros
- Meio Ambiente
- etc.
- Flexibilidade
- Foco
- formato
- Quadro
- GitHub
- Bom estado, com sinais de uso
- GPUs
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- Como funciona o dobrador de carta de canal
- HTTPS
- imagem
- Infraestrutura
- IT
- Chave
- grande
- conduzir
- APRENDER
- aprendizagem
- local
- localmente
- ML
- monitoração
- oferecer
- online
- Outros
- Personalização
- essencial
- preço
- preços
- Solução de problemas
- Python
- Requisitos
- Execute
- corrida
- sandbox
- Ciência
- cientistas
- Serverless
- Serviços
- contexto
- Software
- Engenheiro de Software
- Soluções
- RESOLVER
- começo
- loja
- Histórias
- Dados Técnicos:
- teste
- ensaio
- tempo
- topo
- usuários
- Armazém
- X
- anos