Engenheiros de dados: projeto de engenharia de dados passo a passo

Nov 28 2022
se você está planejando melhorar suas habilidades e se envolver em alguns projetos técnicos pesados, eu entendi, este artigo é para você, os próximos também, vou destacar o melhor para você, como sempre menciono, o bom conhecimento é distribuído aqui. Neste artigo, vamos detalhar como construir uma pilha de dados usando a ferramenta de gerenciamento de fluxo de trabalho apache airflow, criar painéis com Dash plottly, reunir métricas com Statsd e visualizar o desempenho usando Prometheus e Grafana.

se você está planejando melhorar suas habilidades e se envolver em alguns projetos técnicos pesados, eu entendi, este artigo é para você, os próximos também, vou destacar o melhor para você, como sempre menciono, o bom conhecimento é distribuído aqui.

Figura 1: arquitetura do projeto

Neste artigo, vamos detalhar como construir uma pilha de dados usando a ferramenta de gerenciamento de fluxo de trabalho apache airflow , criar painéis com Dash plottly , reunir métricas com Statsd e visualizar o desempenho usando Prometheus e Grafana .

Todas as atribuições especificadas acima estão progredindo para serem conectadas usando a composição do docker . alguns de vocês não tiveram a chance de trabalhar com isso, então vamos dar uma breve definição dele.

Figura 2: Composição do Docker

Imagine que você está trabalhando com muitos containers ao mesmo tempo, cada um deles tem sua função específica, você vai manusear cada um deles separadamente? CLARO QUE NÃO ! . O Docker Compose é uma ferramenta que ajuda a superar esse problema e lidar facilmente com vários contêineres de uma só vez.

Posso ver você se perguntando por que comecei o artigo falando sobre o docker compose , mas tudo bem, vou explicar o porquê. Quero que vocês entendam que é obrigatório pensar nos fundamentos de todo projeto de TI antes de começar a se aprofundar. O Docker Compose nos permitirá iniciar todos os serviços necessários para o nosso projeto.

Vamos dar uma olhada em nosso arquivo docker compose ( docker-compose-LocalExecutor.yml ):

todo arquivo docker-compose tem atributos que precisamos entender:

  • versão: versão do docker compose
  • image: imagem do docker a ser extraída do hub do docker
  • depende_on: aqui precisamos mencionar quais serviços estão vinculados ao serviço atual, por exemplo, o apache airflow precisa de Postgres e Mysql para armazenar metadados dos dags
  • ambiente: aqui definimos as variáveis ​​de ambiente do serviço, por exemplo POSTGRES_USER = airflow que será usado quando iniciarmos o serviço.
  • command : o primeiro comando bash que você precisa que seja executado sempre que o serviço for iniciado
  • volumes : o local dentro do seu contêiner que será montado em seu sistema de arquivos, por exemplo, os dados transformados dos pipelines serão armazenados em um local de armazenamento persistente
  • portas: é a mídia de onde seus contêineres usariam para se comunicar com outros serviços, por exemplo, os dados serão ingeridos no Statsd do fluxo de ar através da porta 8125 usando o protocolo udp (confira a captura de tela abaixo).
  • Inicie os serviços de banco de dados:
  • Figura 3: serviço mysql
    Figura 4: servidor web airflow

    3.Iniciar estatísticas:

    Figura 5: Serviço Statsd

    4. Inicie o Prometheus e o Grafana:

    Figura 6: serviço Prometheus
    Figura 7: Serviço Grafana

    Então, como podemos ver, todas essas definições estão escritas no mesmo arquivo e serão iniciadas todas juntas com um simples comando para atingir o objetivo do projeto.

    O projeto está dividido em 3 grandes etapas:

    1. raspagem de dados e automatizá-lo usando o fluxo de ar do Apache .
    2. painéis usando Dash plotly .
    3. monitore-o usando 3 ferramentas: Statsd, Prometheus, Grafana.
    • fonte de dados :https://www.fahrrad.de/
    Figura 8: Captura de tela do site Fahrrad.de

    vamos extrair:

    • o nome da marca
    • a categoria
    • o nome do modelo
    • o preço
    • a foto da bicicleta

    Os scripts de raspagem serão automatizados usando a ferramenta mais poderosa apache airflow, mas se você nunca a usou antes, darei uma breve visão geral sobre a ferramenta.

    Apache airflow é uma ferramenta de gerenciamento de fluxo de trabalho que possui muitos operadores que podem ajudar qualquer engenheiro de dados a projetar e orquestrar os trabalhos de projetos de cientistas de big data, por exemplo, automatizar scripts de coleta de dados. os operadores usados ​​neste projeto são:

    • PythonOperator : para o script de raspagem da web
    • BashOperator: para definir tarefas de administração do Linux
    • EmailOperator: Para enviar e-mails quando o pipeline terminar

    o Dag é uma sequência de tarefas e cada tarefa é definida usando um operador

    a tarefa deve ter um lugar definido e ordenado (t1 >> t2: a tarefa um deve ser executada antes da tarefa 2)

    Figura 9: captura de tela do pipeline

    Depois de coletar dados da fonte (o site usando o método de raspagem), agora é hora de obter insights dele, é por isso que construímos um painel interativo usando o Dash plotly .

    Dash plotly : é um framework para escrever aplicações web interativas, escritas em cima do Flask, Plotly. js e React. js .

    Figura 10: painel para visualizar dados

    Agora, vamos fazer um trabalho pessoal, enquanto o trabalho está sendo executado, ele irá gerar métricas que devem ser monitoradas, essas métricas serão enviadas do fluxo de ar através da porta 8125 para Statsd usando o protocolo udp (você pode verificar no arquivo de composição do docker ), os dados das métricas não podem ser exibidos em uma interface organizada se usarmos apenas statsd , portanto, contaremos com o Prometheus e o Grafana para alcançar o que estamos procurando.

    Figura 11: métricas no Statsd
    Figura 12: métricas exibidas no Prometheus
    Figura 13: Painel do Grafana

    todo o processo é feito desta forma:

    Figura 14: monitoramento do fluxo de ar

    Vídeo do projeto:

    Conclusão:

    Neste artigo, construímos toda uma pilha de dados: começando com a coleta de dados usando um script python, passando para a construção de um painel para extrair insights úteis dele, também monitorando o pipeline de dados e vendo o desempenho das diferentes tarefas. Espero que tenha gostado de ler meu artigo e sinta-se à vontade para me fazer qualquer pergunta e estou ansioso para ouvir suas idéias sobre o próximo artigo.

    repositório GIT:

    https://github.com/chiheb08/data_enginnering_project