Airflow
Automatizando seu fluxo de trabalho
O que é?
-
Execução de workflow de dados
- Escritos em Python
- Forma de DAGs
- Criado pelo Airbnb
- Open Source (Apache License)
-
Desenvolvido em Python
- Flask, SQLAlchemy, Jinja, etc
- Alternativa ao Luigi do Spotify
O que não é?
- Não trabalha com streaming de dados
- Spark Streaming
- Storm
- Não transfere dados de uma tarefa para outra
- Tasks transferem metadados
Princípios
Dinâmico
Pipeline as a code
Extensível
Estenda os componentes para o seu workflow
Elegante
Pipelines enxutos e parametrizáveis com Jinja
Escalável
Mensageria e workers para orquestrar
Instalação
# Instalação mínima
pip install apache-airflow
# Instalação com suporte extra (S3 e PostgreSQL)
pip install "apache-airflow[s3, postgres]"
# Define a pasta em que o airflow vai trabalhar
# Isso é necessário
export AIRFLOW_HOME=~/airflow
# Inicializa o banco de dados (padrão: SQLite)
airflow initdb
# Iniciar o seridor local (porta padrão: 8080)
airflow webserver -p 8080
Conceitos
DAG
- Directed Acyclic Graphs
- Rede de jobs
- Possui agendamento próprio
- Código enxuto e fácil de entender quando criado
Default Arguments
- Dicionário de propridades definidas
- Passando para a DAG, é aplicado para todos os Operators
Operators
- Representa um uma tarefa na DAG
- Eles são usualmente (não sempre) atômicos
- Podem trocar uma quantidade pequena de informações entre eles
Tasks
- Instância de um Operator
- Ela se torna um nó na DAG
Primeira DAG
Caso de Exemplo
- Imprime a data na saída padrão
- Define um sleep de 5 segundos
- Salva a data em um arquivo texto
import airflow
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import, timedelta
args = {
'owner': 'airflow',
'start_date': airflow.utils.dates.days_ago(2)
}
dag = DAG(
dag_id='tutorial',
default_args=args,
schedule_interval=timedelta(days=1),
dagrun_timeout=timedelta(minutes=60)
)
Definindo a DAG
# 1. Imprime a data na saída padrão
task1 = BashOperator(
task_id='print_date',
bash_command='date',
dag=dag)
# 2. Faz uma sleep de 5 segundos.
# Dando errado tente em no máximo 3 vezes
task2 = BashOperator(
task_id='sleep',
bash_command='sleep 5',
retries=3,
dag=dag)
# 3. Salve a data em um arquivo texto
task3 = BashOperator(
task_id='save_date',
bash_command='date > /tmp/date_output.txt',
retries=3,
dag=dag)
Registrando as tasks
# Interligando task1 ao task2
task1.set_downstream(task2)
# Interligando task2 ao task3
task2.set_downstream(task3)
Interligando as tasks
# salve o módulo na pasta dags (definido por padrão)
$ cd $AIRFLOW_HOME/dags
$ vim tutorial_dag.py
# Executando em linha de comando
# mas pode executar via interface também
$ airflow backfill tutorial -s 2018-03-30 -e 2015-03-30
Salvar e executar a DAG
Demo
Comandos com Airflow
Arquitetura
Executors
Sequential
- Modo default
- Uso mínimo (SQLite)
- 1 tarefa por vez
- Bom para testes e usos locais
Local
- Executa tarefas paralelas localmente
- Gerado por scheduler
- Escala vertical
- Preparado para produção
- Não precisa de broker
Celery
- Executa tarefas paralelas remotamente
- Gerado por scheduler
- Escala vertical e horizontal
- Preparado para produção
- Precisa de um broker
Airflow UI
Alguns processos feitos com Airflow
-
Data warehousing: cleanse, organize, data quality check
-
Growth analytics
-
Experimentation: compute our A/B testing
-
Email targeting
-
Sessionization: compute clickstream
-
Search: compute search ranking related metrics
-
Data infrastructure maintenance: database scrapes, folder cleanup, applying data retention policies, …
feitos pelo Airbnb
Outras informações
Documentação Airflow
Awesome Apache Airflow
Apache Airflow in the Cloud: Programmatically orchestrating workloads
Automatizando seu fluxo de trabalho com Airflow
http://gilsondev.in/airflow/dados/2018/06/23/automatizando-fluxo-de-trabalho-com-airflow/
Usando o Airflow no Heroku
http://gilsondev.in/airflow/dados/2018/12/24/usando-o-airflow-no-heroku/
Blog: df.python.org.br
Telegram: @grupydf
Meetup: PyData-Brasilia
Telegram: @pydatabsb
Email: me@gilsondev.in
Blog: gilsondev.in
Telegram: @gilsondev
Github: @gilsondev
Twitter: @gilsonfilho
Dúvidas?
Automatize seus fluxos de trabalho com Airflow
By Gilson Filho
Automatize seus fluxos de trabalho com Airflow
Palestra sobre Apache Airflow
- 1,089