Slide 1

Slide 1 text

Airflow Automatizando seu fluxo de trabalho

Slide 2

Slide 2 text

Gilson Filho ● Desenvolvedor web a 8 anos (Java, PHP e Python) ● Trabalho com soluções web diversas ○ Sistemas sob demanda ○ Raspagem e mineração de dados ● Entusiasta em Software Livre ● GruPy-DF

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Princípios

Slide 6

Slide 6 text

Dinâmico Pipeline as a code

Slide 7

Slide 7 text

Extensível Estenda os componentes para o seu workflow

Slide 8

Slide 8 text

Elegante Pipelines enxutos e parametrizáveis com Jinja

Slide 9

Slide 9 text

Escalável Mensageria e Workers para orquestrar

Slide 10

Slide 10 text

Instalação

Slide 11

Slide 11 text

# Instalação Mínima pip install apache-airflow # Instalação com suporte a S3 e PostgreSQL pip install apache-airflow[s3, postgres]

Slide 12

Slide 12 text

# 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 servidor local (porta padrão: 8080) airflow webserver -p 8080

Slide 13

Slide 13 text

Conceitos

Slide 14

Slide 14 text

DAG ● Directed Acyclic Graphs ● Rede de jobs ● Possui agendamento próprio ● Código enxuto e fácil de entender quando criado

Slide 15

Slide 15 text

Default Arguments ● Dicionário de propriedades definidas ● Passando para a DAG, é aplicado para todos os Operators

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Tasks ● Instância de um Operator ● Ela se torna um nó na DAG

Slide 18

Slide 18 text

Primeira DAG

Slide 19

Slide 19 text

Caso de Exemplo 1. Imprime a data na saída padrão 2. Define um sleep de 5 segundos 3. Salvar a data em um arquivo texto

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

# 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

Slide 22

Slide 22 text

# Interligando task1 ao task2 task1.set_downstream(task2) # Interligando task2 ao task3 task2.set_downstream(task3) Interligando as tasks

Slide 23

Slide 23 text

# Salve o módulo na pasta $AIRFLOW_HOME/dags (definido no airflow.cfg) $ 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

Slide 24

Slide 24 text

Demo

Slide 25

Slide 25 text

Comandos do Airflow https://airflow.apache.org/cli.html​

Slide 26

Slide 26 text

Arquitetura Executors

Slide 27

Slide 27 text

Sequential ● Modo default ● Uso mínimo (SQLite) ● 1 tarefa por vez ● Bom para testes e usos locais

Slide 28

Slide 28 text

Local ● Executa tarefas paralelas localmente ● Gerado por scheduler ● Escala vertical ● Preparado para produção ● Não precisa de broker

Slide 29

Slide 29 text

Celery ● Executa tarefas paralelas remotamente ● Gerado por scheduler ● Escala vertical e horizontal ● Preparado para produção ● Precisa de um broker

Slide 30

Slide 30 text

Airflow UI https://airflow.apache.org/ui.html​

Slide 31

Slide 31 text

Alguns processos feitos pelo 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 https://medium.com/airbnb-engineering/airflow-a-workflow-management-platform-46318b977fd8

Slide 32

Slide 32 text

Blog: df.python.org.br Telegram: @grupydf Meetup: meetup.com/pt-BR/pythondf

Slide 33

Slide 33 text

18 e 19 de Agosto

Slide 34

Slide 34 text

Dúvidas? Email: [email protected] Blog: gilsondev.in Telegram/Github: @gilsondev Telefone: (61) 9 8334-2344 Twitter: @gilsonfilho