Este projeto foi desenvolvido como parte de um desafio na disciplina de Processamento Distribuído do curso de pós-graduação em Engenharia de Dados na Universidade de Fortaleza (Unifor).
O objetivo principal do desafio era explorar e aplicar o Apache Spark para processamento de dados distribuído.
Como caso de uso, escolhi trabalhar com dados da API do Yu-Gi-Oh! TCG. Utilizei a biblioteca requests
para a extração dos dados e o pyspark
para a transformação e carregamento, todos executados em um ambiente Docker configurado com o Spark.
A estrutura do projeto foi organizada para ser replicável e de fácil manutenção. Utilizei Docker para criar os containers necessários e configurar o ambiente de execução. O arquivo pyproject.toml
foi utilizado para gerenciar as dependências.
3.11.9-bullseye
- pyspark
- requests
- loguru
- ipykernel
- flake8
- black
- isort
- sparksql_magic
- pre-commit
Como mencionado anteriormente, optei por desenvolver o projeto utilizando a infraestrutura fornecida pelos containers Docker. Todo o ambiente está configurado para fácil replicação. Não abordarei os detalhes técnicos aqui, mas sinta-se à vontade para adaptar o projeto, com ou sem Docker.
No entanto, faz sentido que, ao tentar replicar este projeto, você siga a mesma abordagem que eu e utilize Docker. Isso garantirá que o ambiente e as dependências estejam configuradas corretamente, proporcionando uma experiência mais consistente e eficiente.
Execute o seguinte comando:
git clone https://github.com/tonsatomicos/yugioh-api-with-spark.git
Navegue até a pasta raiz do projeto e execute o seguinte comando para iniciar os containers Docker:
docker compose -f docker-compose.yml up -d --scale spark-worker=2
Nota: Se estiver no Windows, certifique-se de que os arquivos
Dockerfile
,docker-compose.yml
eentrypoint.sh
estejam com a formatação LF, e não CRLF.
Este comando iniciará os containers e escalará o número de workers do Spark conforme definido no arquivo docker-compose.yml
.
Acesse o container master utilizando o terminal ou VSCode. Navegue até a pasta /opt/spark/yugioh-with-spark
e execute:
python yugioh-with-spark/pipeline/pipeline_main.py
Monitore o andamento do pipeline acompanhando os logs gerados durante a execução. Eles serão armazenados na pasta /logs
, e os resultados do processamento estarão disponíveis na pasta /data/output
.
Você também pode monitorar o status dos workers e da aplicação no Spark Master através do link http://localhost:9091/
e visualizar os logs da aplicação no History Server em http://localhost:18081/
.
- A documentação pode não estar totalmente detalhada, e um certo nível de conhecimento pode ser necessário para entender o projeto.
- Um Jupyter Notebook está disponível na pasta
/notebook
, oferecendo uma visão simplificada e mais direta do projeto. - O projeto foi estruturado utilizando os princípios SOLID, visando manter uma arquitetura limpa e extensível.