Skip to content

Priscaruso/Projeto_final_2_Eng_Dados

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 

Repository files navigation

PROJETO FINAL 2 - FORMAÇÃO ENGENHEIRO DE DADOS - UDEMY

Tópicos do Projeto

🔹 Enunciado do projeto

🔹 Etapas

🔹 Arquitetura dos dados

🔹 Pré-requisitos

🔹 Execução

Enunciado do projeto

Este projeto consiste na criação de uma solução que simula um Parque Eólico com a produção de dados de sensores por meio de aplicações Python usando os serviços da AWS. O objetivo é monitorar os dados produzidos e ver se correspondem com o esperado, de modo a garantir a qualidade da produção de energia no Parque Eólico.

Etapas

O projeto consiste nos seguintes passos:

  • Criar um Data Stream no Kinesis Data Stream
  • Criar aplicações Python para gerar os dados
  • Criar um bucket no S3 para receber os dados
  • Criar um Kinesis Data Firehouse para entregar os dados
  • Criar uma database no Glue Data Catalog
  • Criar um crawler no Glue Data Catalog
  • Criar um novo bucket S3
  • Criar um job ETL no Glue para transformar os dados gerados de JSON para Parquet
  • Criar um outro crawler no Glue para inferir o schema dos dados transformados
  • Criar consultas no Athena

Arquitetura dos dados

Esse é um projeto end-to-end, desde a produção dos dados até a disponibilização dos mesmos para consulta, usando os serviços da AWS. A arquitetura completa pode ser visualizada a seguir:

Créditos pela imagem da turbina eólica: Imagem de macrovector no Freepik

Pré-requisitos

Para executar esse projeto é necessário ter o Jupyter Notebook instalado localmente ou uma conta Google para acessar o Colab e uma conta na nuvem AWS.

Execução

Criar um Data Stream no Kinesis Data Stream

Essa primeira etapa consiste em acessar o serviço Kinesis e gerar fluxos de dados (data streams) de nome Stream2, por exemplo, que será usado pela aplicação python geradora de dados para transmitir os dados como streaming.

A imagem abaixo demonstra o fluxo de dados criado.

kinesis data stream

Criar Aplicações Python

Nessa segunda etapa, geram-se as aplicações python que simulam os sensores de um parque eólico e que produzem os dados que serão, posteriormente, usados pelos serviços da AWS. São criadas 3 aplicações python, simulando 3 sensores conforme abaixo:

  • Sensor de fator de potência gerando potências em torno de 1
  • Sensor de temperatura gerando temperaturas em torno de 23°C
  • Sensor de pressão hidráulica gerando pressão em torno de 76 BAR

As aplicações produzem dados a cada 10 segundos no formato JSON contendo os seguintes campos:

  • id - identificador do registro
  • data - o dado em si
  • type - o tipo de dado, podendo ser powerfactor, temperature ou hydraulicpressure
  • timestamp - data e hora que o registro foi gerado

Para transmitir os dados para o data stream Stream2 criado no Kinesis Data Stream, deve-se, primeiramente, iniciar uma conexão cliente com o Kinesis através da biblioteca boto3. Em seguida, deve-se preencher os campos aws_access_key_id e aws_secret_access_key com a chave secreta gerada na sua conta da AWS, e region_name com o nome da região onde o bucket da etapa anterior foi criado. Além disso, precisa também especificar o campo StreamName com o nome do data scream criado na primeira etapa e o campo PartitionKey com o valor da chave que será usada para identificar o shard do Kinesis Data Stream para o qual os registros serão enviados.

Criar um bucket no S3

O terceiro passo consiste em acessar o serviço S3 e criar um bucket de nome projeto2-aws-engdados, por exemplo, para receber os dados vindos do Kinesis Data Firehouse, conforme mostra a imagem abaixo:

bucket para dados da aplicação python

Criar um Kinesis Data Firehouse

A quarta etapa é criar um fluxo de entrega no Kinesis Data Firehouse que entregará todos os dados em um mesmo arquivo particionado por ano, mês e dia ao bucket no S3. Ao criar o fluxo, precisa-se configurar a origem e o destino dos dados como sendo, respectivamente, o Kinesis Data Stream e o bucket criado na etapa anterior. Precisa-se também estabelecer o tempo de latência (da entrega dos dados ao bucket) como 60 segundos. A figura abaixo mostra o Data Firehouse gerado:

kinesis firehose

Criar uma database no Glue Data Catalog

Na quinta etapa, é necessário acessar o Glue Data Catalog e criar uma database, que é repositório de dados, no qual ficarão armazenadas as tabelas que tiveram o seu schema inferido pelo crawler, que será gerado no próximo passo. Nesse projeto foi criada a database dados_sensores, conforme mostra a imagem abaixo:

image

Criar um crawler no Glue Data Catalog

A sexta etapa consiste em criar um crawler no Glue Data Catalog, que inferirá o schema dos objetos armazenados no bucket S3. No caso, esses objetos são os dados gerados pelas aplicações python armazenados no bucket projeto2-aws-engdados, transformando-os em tabelas. Ao criar um crawler, precisa-se associar os dados a uma database, que no caso será a dados_sensores, gerada na etapa anterior. Além disso, é precisa-se configurar uma IAM role que tenha acesso ao bucket S3. O crawler gerado é mostrado na imagem abaixo:

crawler_dados_sensores_atualizado

Ao executar o crawler, é criada a tabela projeto2-aws-engdados, a partir do bucket de mesmo nome, associada a database *dados_sensores, conforme pode ser visto na figura a seguir:

table_1

Criar um novo bucket s3

Essa etapa consiste em criar um novo bucket no S3 chamado projeto2-aws-engdados-datalake, que funciona como um datalake para armazenar os dados transformados gerados pelo Glue job (pasta datalake), seus scripts de transformação (pasta script), seus logs (pasta log) e arquivos temporários (pasta temp). A imagem abaixo ilustra isso:

datalake

Criar um job ETL no Glue

A sétima etapa é criar e executar um job ETL, que extraia a tabela projeto2_aws_engdados gerada no Data Catalog, transforme-a do formato JSON para Parquet e armazene no bucket projeto2-aws-engdados-datalake na pasta datalake, que funciona como um datalake. Para criar o job, usa-se uma interface visual iniciando com um canvas em branco, onde pode-se selecionar os ícones que representam a origem, o tipo de transformação e o destino dos dados. A figura abaixo ilustra isso:

image

Criar um outro crawler no Glue

Após executar o job ETL e gerar os dados transformados, o próximo passo é, primeiramente, criar uma database chamada datalake-sensores. Em seguida, gerar um novo crawler que infira o schema desses dados transformados armazenados na pasta datalake do bucket projeto2-aws-engdados-datalake e associe a tabela datalake produzida a essa nova database no Data Catalog, para que ela possa ser usada no Athena. A database, o crawler e a tabela gerada são demonstrados nas figuras a seguir:

database_2

crawler_datalake_sensores_atualizado

table_2

Criar consultas no Athena

A partir das tabelas armazenadas no Data Catalog, é possível gerar consultas SQL no Athena, sem a necessidade de provisionar um servidor. Para isso, basta acessar o editor de consulta no painel do Athena, configurar o Data Catalog como a origem dos dados, a database e rodar as queries desejadas. Os dados gerados pelas consultas, devem ser armazenados em um bucket S3 específico para o Athena.

A figura, a seguir, mostra o resultado da consulta de todos os dados da tabela datalake:

consulta_com_athena_v2

Também foi rodada uma query no qual retorna todos os campos da tabela datalake cujos dados tenham valores maiores que 0.9 e tipo igual a powerfactor, conforme visto pelas imagens abaixo:

consulta_com_athena_query2

consulta_com_athena_query2_resultado

OBS: Os serviços Kinesis Data Stream, Kinesis Data Firehouse, Glue crawler e Glue Jobs são pagos e podem gerar custos!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors