O projeto Breweries visa buscar informações abertas sobre cervejaria ao redor do mundo.
O projeto foi desenvolvido de forma a executar localmente, de forma a facilitar a configuração e simplificar o a execução do projeto.
-
- Postgres como armazenamento do Apache Airflow
-
Dremio é uma plataforma de Lakehouse e foi principalmente utilizado para catálogo
Pastas versionadas:
- 📁 dags
- Orquestração de Jobs utilizanod Apache Airflow
- 📁 src
- Jobs em Apache Spark
- 📁 tests
- Testes unitários
Pastas geradas:
- 📁 data
- Volume montado com o Data Lake gerado
- 📁 logs
- Volume montado com o logs de execução do Apache Airflow
A estratégia de monitoramento deve ser feito em camadas:
- Periodicamente devemos verificar a interface do Apache Airflow para verificar:
- Erros catastróficos nos Jobs executados
- Tempo de processamento em cada execução
- Logs de execução de cada execução.
Em casos de erros catastróficos serão enviados para um email com acesso aos responsáveis de plantão.
Em relação as métricas de qualiade podemos mensurar:
- Volume de dados processados a cada execução vs histórico
- Contagem de valores nulos em colunas críticas
- Regras de negócio específicas
Objetivo: download das informações da base aberta de cervejaria.
Frequência: podemos verificar a frequência de atualização da base de dados aberta e nos adaptarmos a essa frequência.
Fonte de dados:
Destino dos dados:
- Spark warehouse no container
spark-master- Caminho:
spark-warehouse/breweries_bronze - É montado um volume entre o container e o host
./data:/opt/bitnami/spark/spark-warehouse
- Caminho:
Apache Airflow:
- DAG:
Breweries - Operadores:
SparkSubmitOperator - Script:
src/breweries_bronze.py - Dependência: nenhum
- Política de retentativa: máximo de 3
- Execuções concorrentes: 1 execução concorrente
O List Breweries é endpoint que retorna todas as cervejarias paginadas, exemplo:
# GET https://api.openbrewerydb.org/v1/breweries?page=15&per_page=3Assim, foi desenvolvido um UDF (User Defined Function) para fazer essas requisições e poder utilizar todos os recursos do cluster.
Para isso partimos do endpoint Metadata que provê a quantidade de cervejaria e dividimos isso me páginas.
O Job breweries_bronze pode apresentar as seguintes exceções:
- Falha ao buscar os metadados
- Falha ao analisar os metadados
- Falha ao buscar os dados de cervejarias
Para qualquer um dos casos acima o Job irá ser encerrado e marcado como falha.
Objetivo: refinamento dos dados de cervejaria e particionamento para preparar os dados para futuros processamentos analíticos.
Frequência: podemos verificar a frequência de atualização da base de dados aberta e nos adaptarmos a essa frequência.
Fonte de dados:
- Resultado do Job
breweries_bronze
Destino dos dados:
- Spark warehouse no container
spark-master- Caminho:
spark-warehouse/breweries - É montado um volume entre o container e o host
./data:/opt/bitnami/spark/spark-warehouse
- Caminho:
Apache Airflow:
- DAG:
Breweries - Operadores:
SparkSubmitOperator - Script:
src/breweries_silver.py - Dependência: Dados atualizados
breweries_bronze - Política de retentativa: máximo de 3
- Execuções concorrentes: 1 execução concorrente
Particionamento por localização. Localização é composta pelo campo country da cervejaria.
É necessário fazer uma transformação no campo country para remover espaços brancos desnecessários no começo e no final do nome.
Objetivo: agregação das cervejarias por tipo de localização para buscar informações como o total de cervejarias.
Frequência: podemos verificar a frequência de atualização da base de dados aberta e nos adaptarmos a essa frequência.
Fonte de dados:
- Resultado do Job
breweries_silver
Destino dos dados:
- Spark warehouse no container
spark-master- Caminho:
spark-warehouse/breweries_by_type_and_location_VW - É montado um volume entre o container e o host
./data:/opt/bitnami/spark/spark-warehouse
- Caminho:
Apache Airflow:
- DAG:
Breweries - Operadores:
SparkSubmitOperator - Script:
src/breweries_silver.py - Dependência: Dados atualizados
breweries - Política de retentativa: máximo de 3
- Execuções concorrentes: 1 execução concorrente
Nenhum processamento complexo foi empregado.
