Airflow - Entendendo os DAGs

Airflow - Entendendo os DAGs
Bruno Raphaell
Bruno Raphaell

Compartilhe

Introdução

Vamos supor que você esteja às vésperas de uma prova. Para realizar uma prova devemos seguir alguns passos de forma ordenada, não é ideal ir diretamente para a prova sem ter pesquisado a matéria em livros, lido o conteúdo, feito os exercícios, tirado as dúvidas com a pessoa mediadora ou colegas. Para o desenvolvimento de um projeto de dados, seguimos a mesma ideia, organizando os passos, que juntos formam o que chamamos de pipeline, que representam as etapas do fluxo de trabalho. É aí que entra o Airflow.

O Airflow é uma plataforma open-source escrita em Python que possui como objetivos criar, agendar e monitorar fluxos de trabalho. Pense nessa ferramenta como um maestro que é capaz de orquestrar os músicos durante a execução de determinada música, definindo quem começa, quais instrumentos tocam juntos, o tempo de execução de cada instrumento.

Um ponto relevante na utilização do Airflow é o entendimento do que são os DAGs e sua importância. Eles são apresentado logo na tela inicial do Airflow e ao clicarmos em algum dos DAGs padrão, somos direcionados para uma tela como essa:

Print do fluxograma apresentado ao clicar no DAG. O fluxo é composto por três linhas. A primeira, da esquerda para direita, contém “runme_0”,  “runme_1” e “runme_2”. Seguindo temos as informações “also_run_this”, “run_this_loop” e “this_will_skip”. Por fim, é apresentada a 3 linha com o resultado “run_this_last”.

É natural que de início fiquemos sem saber o que é cada elemento e porque estão organizados dessa maneira. Nesse artigo vamos entender o que é um DAG e os elementos necessários para a sua construção.

Banner da Escola de Data Science: Matricula-se na escola de Data Science. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

O que é um DAG?

DAG é uma abreviação para “Directed Acyclic Graphs” - Grafos Acíclicos Dirigidos em tradução livre. Vamos entender o que significa cada uma dessas palavras?

  • Grafo é uma ferramenta matemática com nós e arestas responsáveis por conectar esses nós.
  • Dirigidos quer nos dizer que o fluxo de trabalho se dá apenas em uma direção.
  • Acíclico significa que a execução não entrará em um laço de repetição, então eventualmente acabaremos em um nó final que não estará conectado com o nó inicial.

A principal ideia do Airflow é dividir um trabalho grande com uma ou mais etapas em “tarefas” individuais que chamaremos de tasks, tarefas em inglês, e essas tasks juntas formam um DAG.

Uma task é a unidade mais básica de um DAG, é responsável por implementar determinada lógica no pipeline. Tomando o exemplo falado anteriormente sobre a prova, uma task pode ser os estudos que devem ser realizados, fazer as atividades, entre outras. Ou seja, estamos quebrando o trabalho completo em várias tasks (tarefas) menores.

Uma boa prática é manter como única dependência a sequência de ações, isso é, o fluxo de trabalho a ser executado. Dessa forma, não existem outras dependências, o que torna a execução mais leve e facilita o processo de debugar o código em um possível erro. Abaixo temos uma imagem de como seria um DAG para realizar a prova com 5 tasks:

Fazer uma Prova. Fluxograma com os seguintes itens da esquerda para a direita: “definir tema da prova”, seguido por “estudar em livros” e “estudar no youtube”, essas duas últimas estão uma acima da outra, o próximo bloco é “fazer atividades” e por último “realizar a prova”.

Analisando a figura acima, cada uma das tasks apresentadas é um nó do grafo; as setas representam a direção em que as tasks devem ser executadas, nesse caso da esquerda para a direita. Como os nós terminam em “Realizar a prova” e esse nó não está conectado novamente ao “Definir tema da prova”, o DAG é acíclico.

Ainda nesse fluxo, temos que a primeira tarefa a ser executada é a task 1, “definir o tema da prova”, seguida por “Estudar em livros” e “Estudar no youtube”, tasks que podem ser executadas em paralelo. Logo em seguida, temos a execução da tarefa “Fazer as atividades” e, na sequência, a task “Realizar a prova”. Um detalhe é que as tasks que não serão executadas em paralelo só podem iniciar quando as anteriores tiverem finalizado - por exemplo “Estudar em livros” e “Estudar no Youtube” somente serão iniciadas após a task “Definir tema da prova” ser finalizada.

Para esses DAGs funcionarem corretamente há a dependência de alguns conceitos, vamos conhecer os principais:

Principais conceitos no Airflow

Webserver

É o responsável por oferecer a interface de usuário do Airflow que torna possível visualizar de forma geral o estado dos DAGs, códigos que estão presentes nesses DAGs, estados de execução, logs de erro, entre outras funcionalidades. Também permite gerenciar usuários, funções e diversas configurações do Airflow.

Metadata Database

O Airflow possui suporte para uma grande variedade de bancos de dados. É nesses bancos de dados que estão todas as informações a respeito dos DAGs, suas configurações, além de todas as configurações internas do Airflow, como os usuários e seus níveis de acesso. Ao realizarmos qualquer modificação no Webserver essas modificações são atualizadas no banco de dados de metadados (Metadata Database) pelo Scheduler (Agendador).

Scheduler

O Scheduler (agendador) é responsável por assegurar que as tasks dentro de um DAG sejam executadas no momento adequado. Em outras palavras, o scheduler é um processo que cuida do agendamento dos fluxos de trabalho e faz o envio das tasks para o executor, seguindo as etapas:

  • Faz a leitura dos arquivos DAG criado pelo usuário, extrai as informações e as coloca no banco de dados;
  • Determina quais tarefas serão executadas e as coloca no estado enfileirado para executar na ordem correta; e
  • Busca e executa as tarefas que estão no estado enfileirado.

Executor

Executor é o mecanismo que trata do modo de execução das tasks. O Airflow permite apenas um executor configurado por vez e inicialmente ele é definido no momento da instalação. Existem dois tipos de executores, os que executam as tarefas localmente e os que fazem isso de forma remota. Abaixo estão alguns executores locais e remotos

Executores locais:

Executores remotos:

Operator

Operator é o componente que determina qual ferramenta será utilizada para executar as tasks. As tasks podem utilizar diferentes tecnologias, por exemplo, poderíamos primeiro rodar um script Bash na primeira task, a segunda poderia ser um script em Python, etc. O Airflow fornece uma grande variedade de operadores. Para trabalhar com tasks escritas em Python utilizamos o PythonOperator. Já para trabalhar com scripts Bash será utilizado o BashOperator. Em trabalhos mais complexos poderemos utilizar o DockerOperator que irá executar um comando dentro de um container Docker e você pode ainda criar seu próprio operador.

Print do fluxo DAG. Fluxograma composto por três blocos maiores e dentro de cada bloco maior há um bloco menor. O primeiro bloco possui o título “Task 1” e o bloco menor possui o título “Operator 1”. O segundo bloco possui o título “Task 2” e o bloco menor possui o título “Operator 2”. O terceiro bloco possui o título “Task 2” e o bloco menor possui o título “Operator 3”.

Podemos dizer então que a principal função de um DAG é realizar a orquestração dos operadores definidos, e isso inclui iniciar e parar os operadores, iniciar o operador consecutivo à medida que o anterior tiver finalizado.

DAG run

É a execução de fato do DAG, e isso inclui os horários, tempo de execução de cada uma das tasks, entre outras informações relevantes do DAG. Quando um DAG é executado, um DAG Run é criado e todas as tasks desse DAG são executadas. Um detalhe é que cada DAG run é executado de forma separada dos demais, isso significa que você pode executar o mesmo DAG diversas vezes ao mesmo tempo ou executar vários DAGs diferentes ao mesmo tempo.

Colocando tudo que foi falado anteriormente em ordem, temos uma noção mais ampla da arquitetura do Airflow e de como ele funciona em volta do conceito de DAG.

Fluxograma iniciado com uma ilustração representando o usuário. O segundo nível do fluxograma, da esquerda para a direita, possui três blocos. De cima para baixo, o primeiro é chamado “webserver” que possui os seguintes itens em seu interior “UI”, “logs” e “DAGs”. O segundo é “Pasta com arquivos DAG” que contém o item “arquivos DAG” em seu interior. O terceiro é “Scheduler” que possui os itens “DAG Run” e “DAGs”. No terceiro nível de blocos, há um bloco denominado “metadata” e, em seu interior, há uma representação para banco de dados. No quinto e último nível, há um bloco denominado “Executor”.

Agora que você já sabe o que são os DAGs, como eles funcionam e conhece a arquitetura necessária para o seu funcionamento de forma correta, chegou a hora de se aprofundar ainda mais, de forma mais prática com os conteúdos que a Alura possui, como o curso Engenharia de dados: conhecendo Apache Airflow.


Créditos:

Escrita:

Produção técnica:

Produção didática:

Bruno Raphaell
Bruno Raphaell

Bruno é um instrutor de Data Science e Engenheiro Eletricista pela Universidade Federal do Piauí. Se dedica em áreas como Data Science, Machine Learning e Deep Learning, e possui grande interesse em engenharia de dados e engenharia de machine learning. Além disso, em seu tempo livre, ele gosta de jogar xadrez, tocar instrumentos musicais e jogar League of Legends.

Veja outros artigos sobre Data Science