O orquestrador de workflow Apache Airflow é uma ferramenta que tem recebido muita aceitação nos últimos anos pela comunidade de engenheiros de dados. A ferramenta possui mecanismos que permitem a implementação de distintas abordagens de tratamento de dados. Neste artigo abordamos duas dessas variantes e levantamos alguns pontos a serem considerados para a implementação.
O que são ETLs e ELTs?
A engenharia de dados refere-se à construção de sistemas que permitam a coleta e o uso dos dados. Usualmente, esses dados são usados para permitir análises subsequentes e para aplicação de técnicas da ciência de dados; que podem envolver aprendizado de máquina.
Para a construção desses sistemas existem diferentes tipos de ferramentas de software com distintas abordagens. Por exemplo, extração, transformação e carga (do inglês Extraction, Transformation and Load, ETL) e extração, carga e transformação (do inglês Extraction, Load and Transformation, ELT).
A diferença fundamental entre esses dois paradigmas encontra-se na ordem em que são feitas as operações. O que implica que no caso das ETL (Multistage data transformation) as operações de conciliação de dados devem ser realizadas em uma stage area separada do repositório de dados. O que implica que em alguns contextos possa existir um grande fluxo de intercâmbio de dados. Porém, ELT (In-warehouse data transformation) faz uso das capacidades dos Sistemas de Gerenciamento de Bancos de Dados (SGBD) para realizar as transformações de dados orientadas à conciliação dos dados. Cada uma destas abordagens tem vantagens e desvantagens que as tornam uma ótima escolha ou não dependendo do cenário específico de cada projeto.
Atualmente existem diversas ferramentas que implementam os paradigmas mencionados acima, mas para este artigo iremos abordar o Apache Airflow.
Apache Airflow
O Apache Airflow é uma ferramenta open source de orquestração para pipelines de dados que teve seu início como uma ferramenta desenvolvida pelo Airbnb. A ferramenta foi desenvolvida em python e a criação dos workflows é via python scripts.
Apache Airflow usa gráficos acíclicos direcionados (do inglês Directed Acyclic Graphs, DAG) para gerenciar o fluxo da orquestração e pode ser dividido nos seguintes componentes:
– airflow-scheduler: O scheduler monitora todas as tarefas e DAGs que são lançadas uma vez que as dependências são completadas
– airflow-worker: O worker é o processo encarregado da execução das tarefas. Constitui a unidade de escalonamento de airflow, sendo possível distribuirmos várias instâncias na rede.
– broker: Ferramenta que encarregada do envio de mensagem desde o scheduler para o worker
– airflow-webserver: Ferramenta que fornece a interface gráfica para interagir com o Apache Airflow.
– banco de dados: É comum utilizar um banco de dados como ferramenta para alocar informações relativas ao Apache Airflow.
Apache Airflow e ETL
A arquitetura de Apache Airflow permite que o processamento das DAGs seja distribuído em distintos workers. Isso faz com que a ferramenta seja facilmente escalável enquanto as capacidades de processamento das tarefas. E que seja uma boa opção para a construção de pipelines utilizando o paradigma de ETL. Assim, a responsabilidade de executar as transformações de dados fica para o Apache Airflow.
No contexto do paradigma das ETL, uma forma de usar o Airflow utilizando suas capacidades de processamento distribuído e multicore, consiste no uso do mecanismo XCom (do inglês, cross-comunication). Já que, por padrão, isolam-se as tarefas completamente.
O mecanismo XCom serializa os objetos devolvidos pelas tarefas como metadados dentro do backend configurado para Airflow (Postgresql, SQLite, MySQL). E assim, disponibiliza mecanismos como xcom_pull e xcom_push para interagir com esses metadados. Permitindo estabelecer um fluxo de intercâmbio de dados entre as distintas operações que integram o processo ETL.
Uma recomendação ao fazer uso dos mecanismos XCom consiste em manter pequeno o tamanho dos dados que são intercambiados. Atualmente o backend utilizado é o que define o limite dos pacotes de dados.
Alguns dos utilizados são:
– SQLite 2GB
– Postgres 1GB
– MySQL 64KB
Um dos possíveis usos do ETL no Apache Airflow, usando o XCom, consiste na estruturação das ETL para o processamento por cluster de dados. Assim, fica a critério do desenvolvedor dos pipelines de dados definir a forma em que os dados serão clusterizados para processamento. Note-se que se o cluster de dados for pequeno demais o Apache Airflow terá que inicializar mais tarefas. Isso faz com que sobrem menos recursos para atribuir para outras tarefas. Caso os cluster sejam muito grandes podem-se perder as potencialidades de processamento distribuído e concorrente do Apache Airflow. Além de possivelmente fazer com que exista um incremento no uso de memória RAM.
Um importante ponto a ser considerado na implementação de pipelines de dados no Airflow é a utilização de workers distribuidos, pois não deve-se fazer uso de recursos locais para compartilhar informações. Já que cada tarefa pode ser executada em workers diferentes. O que implica que em caso de processamento de arquivos grandes (MDE, videos, etc) deve-se compartilhar esses arquivos fazendo uso de espaços de memória compartilhada. Um importante ponto a ser considerado na implementação de pipelines de dados no Airflow é a utilização de workers distribuidos, pois não deve-se fazer uso de recursos locais para compartilhar informações.
Apache Airflow e ETL
Por outro lado, pipelines implementados seguindo o paradigma ELT no Apache Airflow podem ser construídos usando linguagem de manipulação de dados como SQL e outros. Aproveitando que existem muitos anos de pesquisa e otimização de algoritmos para tratamento de dados nos SGBD convencionais.
No caso do uso de dados estruturados em banco de dados estruturados, a linguagem SQL tem amplo suporte, possibilitando a implementação de boa parte das operações clássicas de transformação de dados.
Os operadores do Apache Airflow e a linguagem de dados SQL podem implementar boa parte das transformações de dados estruturados. Fazendo possível a construção da abordagem ELT com Apache Airflow. Os operadores do Apache Airflow e a linguagem de dados SQL podem implementar boa parte das transformações de dados estruturados.
Neste tipo de abordagem de forma similar com a abordagem ETL sugere-se estruturar o processamento em clusters de dados mais do que no caso das ELT. Pois, os SGBD estão preparados para fazer uso de discos rígidos (do inglês, Hard Drive) podemos considerar clusters de dados com tamanho razoavelmente grande.
A abordagem ELT implica a transferência da responsabilidade do processamento para o SGBD. Fazendo com que os limites da abordagem estejam mais relacionados com os recursos do SGBD e quantidade de requisições que esteja recebendo o SGBD. Também implica que o desenvolvedor possua alguns conhecimentos em tunning de banco de dados.
Em contextos de bancos de dados distribuídos pode ser uma boa ideia o uso de bancos de dados com menores restrições de consistência e integridade transacional de dados na implementação de processos ELT.
Conclusão
O orquestrador de pipelines Apache Airflow é uma ferramenta facilmente extensível que permite a implementação de distintas alternativas de tratamento de dados. A escolha destas alternativas depende muito do contexto de implementação, dos recursos disponíveis e até do background de conhecimentos da equipe que fará o desenvolvimento.
No presente artigo expomos alguns dos principais elementos para se considerar na hora de decidir a forma em que serão implementados os pipelines usando o airflow.
Quem é a Aquarela Analytics?
A Aquarela Analytics é vencedora do Prêmio CNI de Inovação e referência nacional na aplicação de Inteligência Artificial Corporativa na indústria e em grandes empresas. Por meio da plataforma Vorteris, da metodologia DCM e o Canvas Analítico (Download e-book gratuito), atende clientes importantes, como: Embraer (aeroespacial), Scania, Mercedes-Benz, Grupo Randon (automotivo), SolarBR Coca-Cola (varejo alimentício), Hospital das Clínicas (saúde), NTS-Brasil (óleo e gás), Auren, SPIC Brasil (energia), Telefônica Vivo (telecomunicações), dentre outros.
Acompanhe os novos conteúdos da Aquarela Analytics no Linkedin e assinando a nossa Newsletter mensal!
Autor
Desenvolvedor Python na Aquarela Advanced Analytics. Mestrado em Informatica pela PUC-Rio (CAPES 7). Graduação em Ciência da Computação pela Universidade da Havana. Na minha carreira tenho participado de vários projetos envolvendo desenvolvimento de software, processamento de dados e Ciência de dados.