Engenharia de dados: Conhecendo Apache Airflow | Alura Cursos Online
Primeiras aulas do curso Engenharia de dados: Conhecendo Apache Airflow
O que são Data Pipelines - Apresentação
Boas-vindas ao curso de introdução a Data Pipelines, meu nome é Rafael Boittega e neste curso vamos aprender conceitos por trás de Data Pipelines e o motivo pelo qual movemos dados de fontes a destinos.
Vamos criar um projeto ELT que significa extração, carga e transformação. Com isso, vamos extrair dados da rede social do Twitter, carregar em um Data Lake e, por fim, transformar esses dados para ajudar na análise de informação, como por exemplo, a quantidade de mensagens trocadas entre usuários no Twitter. Com isso, teremos um projeto automatizado e escalável, e também vamos entender a diferença entre batch e streaming.
Neste projeto, nós vamos utilizar duas ferramentas: uma delas é o Apache Airflow, que é o nosso orquestrador e agendador de tarefas. Vamos aprender conceitos como conexões, ganchos, operadores e, por fim, criaremos um DAG que vai possuir dois passos.
O primeiro passo vai extrair os dados da API do Twitter, movendo o primeiro estágio do nosso Data Lake. Depois vai pegar esses dados e transformar utilizando a nossa segunda ferramenta, para o segundo estágio do Data Lake, onde teremos informações como mensagens e usuários separados.
A segunda ferramenta, então, vai ser o Apache Spark. O Apache Spark é utilizado para o processamento distribuído. Nele, nós vamos aprender a manipular os dados, como por exemplo, extrair as informações que precisamos, extrair utilizando partições e também vamos aprender a criar o cluster do Spark localmente na nossa máquina.
Com isso, no final deste curso, nós vamos ter um projeto de engenharia de dados completo. Te vejo na próxima aula. Tenha um bom curso.
O que são Data Pipelines - Projeto: Extraindo dados do Twitter
Parabéns, você é o novo engenheiro de dados da Alura e no seu primeiro dia de trabalho o time de marketing precisa da sua ajuda para seu primeiro projeto. O projeto envolve extrair dados do Twitter. As informações que vamos extrair serão mensagens, ou tweets, e seus usuários trocados com o perfil da Alura.
Esses dados serão disponibilizados para um time de analistas e cientistas de dados para que eles possam criar uma análise de engajamento, como o número de curtidas e retweets, e também modelos de machine learning para análise de sentimentos. Como eles vão ser avaliados quão positivas são as mensagens trocadas com o perfil da @AluraOnline no Twitter. Interessante esse projeto, mas como vamos desenvolver?
A solução parece fácil. Vou escrever um código em Python, exportar alguns dados no arquivo JSON e depois inserimos isso em um banco de dados. Simples. Solução simples pode funcionar por um bom tempo, mas precisamos construir um projeto robusto para estar preparado para que mais trabalhos, ou mais carga de dados seja adicionada.
Em um projeto como esse precisamos garantir algumas funções. Primeiro, o escalonamento, possibilitando adicionar mais processamento, memória ou armazenamento para a grande quantidade de dados que vamos estar processando, que chamamos de Big Data.
Tudo isso também precisa ser orquestrado em uma plataforma que permita automação da execução de cada trabalho, e também o monitoramento de trabalhos e o gerenciamento de logs e alertas.
Isso tudo para diminuir a quantidade de manutenção e o tempo gasto em tarefas repetitivas como investigação de falhas ou adição de novos trabalhos. Esse projeto deverá estar pronto para a adição de novas fontes de dados, como a expansão para novas contas do Twitter ou Facebook, e também para outros bancos de dados ou arquivos que possamos utilizar para o cruzamento de dados.
Isso tudo é apenas alguns dos pontos que o nosso projeto deve abranger, mas conforme o time de engenharia de dados cresce, os processos de integração e entrega contínua também devem ser adicionados.
Já deve ter imaginado diversos problemas com uma solução simples, não? Para isso, vamos criar uma prova de conceito de um Data Pipeline, que é o encanamento de dados, e utilizando os requisitos que temos nesse projeto, vamos quebrar o desenvolvimento em etapas, buscando entender cada ferramenta utilizada e o motivo pelo qual escolhemos elas.
O primeiro passo antes de começar o nosso pipeline, vai ser verificar se essa fonte de dados está acessível. Para isso, vamos acessar a página de desenvolvedor do Twitter e nela vamos registrar uma conta de desenvolvedor que vai ser vinculada à sua conta do Twitter.
Na atividade "Preparando o ambiente", você vai encontrar o passo a passo para criar uma conta gratuita para uso educacional. Se fôssemos usar essa ferramenta em uma empresa, teríamos que usar a versão paga, como a versão enterprise. Utilizaremos a versão 2 da API do Twitter. Com ela, em uma conta gratuita, podemos solicitar 500 mil tweets por mês, um limite de 180 requisições a cada 15 minutos e só temos o limite de sete dias de informações.
Após essa conta ser aprovada, o que pode levar alguns dias, você terá acesso ao portal desenvolvedor, onde você vai criar um novo projeto e adicionar um app a ele, para ter acesso às chaves de autenticação. Tudo isso está descrito na atividade Preparando o Ambiente.
Vamos então revisar os requisitos do nosso projeto. Vamos extrair os dados do Twitter, as entidades extraídas serão mensagens e usuários, a frequência de extração será uma vez ao dia e o armazenamento das informações será em um local que permita acesso fácil, usando linguagem SQL.
Este projeto precisa ser escalonável, com código reutilizável para extrair e processar os dados, preparando para quando a quantidade de dados e de trabalho crescerem. Também criarem um local centralizado para armazenamento de dados que chamamos de Data Lake. Além disso, o projeto estará pronto para ser implementado na nuvem.
A seguir, vamos entender o conceito por trás de Data Pipelines, e vamos escolher qual forma se encaixa com o nosso projeto. Até lá.
O que são Data Pipelines - Conceito de Data Pipelines
Já conhecemos os requisitos do nosso primeiro projeto. Vamos então entender por que queremos um data pipeline e que problemas vamos mitigar com essa abordagem.
O Data Pipeline é uma cadeia de processos ou fluxo de trabalho, que em inglês é chamado de workflows. Pipelines manipulam dados, normalmente esses processos seguem formato ETL ou ELT. Sendo "E" para extração, "T" para transformação e o "L" para armazenamento, ou do inglês, load.
Esses fluxos vão possuir vários pontos de extração, opções de transformação e carregamento e local de armazenamento. Basicamente, movimentar dados de várias fontes para um ou mais destinos.
A palavra pipeline, do inglês, significa encanamento. Podemos usar a analogia de um encanamento de água que é usado para ligar um produtor a um consumidor. O engenheiro de dados nada mais é do que um encanador. Ele é quem vai planejar e manter esse encanamento e funcionamento sem quebras ou vazamentos.
Existem dois modelos de processamento de dados em um data pipeline. Pode ser batch ou pode ser streaming. O batch significa lotes, ou pacotes, e streaming significa fluxo ou transmissão.
No formato batch, agrupamos uma quantidade de dados para serem processado de tempos em tempos. Por exemplo, em nosso projeto, vamos extrair do Twitter um dia de informações neste batch, um pacote que será movido pelo pipeline até a área de armazenamento uma vez ao dia.
Essa frequência e tamanho do pacote pode variar, dependendo da necessidade de consumo e da disponibilidade dos dados, podendo ser uma vez por segundo, que chamamos de micro batching, ou até mesmo uma vez ao ano.
No outro formato, ou outro modelo, no streaming, recebemos um constante fluxo de dados que são processados assim que novos registros são gerados ou enviados para o pipeline. Esse formato é usado para processar os dados em tempo real.
Por exemplo, uma empresa de transações financeiras pode precisar identificar fraudes toda vez que uma nova transação é efetuada. A resposta desse processamento deve retornar em apenas alguns milissegundos para que a decisão possa ser tomada imediatamente.
Em nosso caso, o modelo batch será suficiente, pois a fonte de dados que estamos utilizando é baseada em requisições a uma API solicitando dados de um período de tempo determinado, não permitindo um estime das informações. O outro motivo é que o time que irá consumir os dados não necessita dessas informações em tempo real.
Vale ressaltar que o custo de um pipeline pode aumentar conforme a velocidade que os dados são processados. Ou seja, normalmente um streaming de dados vai custar mais caro que um batch.
Já sabemos a nossa fonte de dados e forma de processá-los. Vamos discutir agora sobre o armazenamento. No nosso caso, vamos implementar um data lake.
Um data lake é um repositório de arquivos, podendo ser esses arquivos estruturados, como formato Parquet ou AVRO, ou arquivos semiestruturados, como arquivos CSV e JSON, ou arquivos não estruturados, como textos, áudios e vídeos. O data lake possibilita um armazenamento praticamente infinito quando utilizamos em uma nuvem. O custo é muito inferior comparado a um armazenamento limitado que temos em um banco de dados.
Em contrapartida, é necessário o uso de ferramentas externas para esse processamento no data lake comparado a um banco de dados que possui um sistema de gerenciamento junto aos dados.
Essas ferramentas normalmente utilizam processamento distribuído e processamento de larga que escala que é necessário para o big data, além de funcionar em ambos os modelos, em batch e streaming, a integração com o processo de machine learning e também disponibilizarem o consumo através de uma linguagem SQL.
data lakes são amplamente utilizados hoje em dia e eles não necessariamente são implementados no lugar de um Data Warehouse. Pelo contrário, ambos são conceitos que podem trabalhar em paralelo. Por exemplo, um data lake serve como um estado intermediário para que os dados sejam importados mais tarde em um data warehouse.
Um data warehouse é um conceito bem conhecido. Inclusive, há vários cursos aqui na Alura. Resumindo, um data warehouse é um sistema de business intelligence, ou BI, utilizado para gerar relatórios e análises.
Normalmente, possui uma estrutura de banco de dados mais focado para o processamento analítico, chamamos de OLAP, onde os dados são muitas vezes estruturados e armazenados de forma histórica, divididos em dimensões, modelo chamado star schema ou esquema estrela.
Para o nosso projeto, vamos construir um trabalho no modelo batch. O processo de ELT extraindo uma vez por dia os dados brutos e carregando um data lake no formato JSON. O conceito ELT é muito utilizado em relação ao data lake, onde o armazenamento vem antes da transformação.
Assim, o dado é armazenado em seu formato original, também chamado bruto, quando necessário pode ser transformado em um uso específico, possibilitando o reprocessamento em caso de mudanças ou erros de processamento.
Após a carga, utilizaremos uma ferramenta de processamento distribuído para transformar os dados em formato estruturado e preparamos os dados para consumo utilizando SQL diretamente no data lake. A seguir, vamos ver ferramentas que serão utilizadas no nosso projeto.
Sobre o curso Engenharia de dados: Conhecendo Apache Airflow
O curso Engenharia de dados: Conhecendo Apache Airflow possui 246 minutos de vídeos, em um total de 64 atividades. Gostou? Conheça nossos outros cursos de Engenharia de Dados em Data Science, ou leia nossos artigos de Data Science.