Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Airflow - Automatizando seu fluxo de trabalho

Airflow - Automatizando seu fluxo de trabalho

Apresentação ministrada no Python Sudeste 2018

Gilson Filho

March 30, 2018
Tweet

More Decks by Gilson Filho

Other Decks in Programming

Transcript

  1. 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
  2. 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
  3. 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
  4. # Instalação Mínima pip install apache-airflow # Instalação com suporte

    a S3 e PostgreSQL pip install apache-airflow[s3, postgres]
  5. # 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
  6. DAG • Directed Acyclic Graphs • Rede de jobs •

    Possui agendamento próprio • Código enxuto e fácil de entender quando criado
  7. 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
  8. 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
  9. 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
  10. # 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
  11. # Interligando task1 ao task2 task1.set_downstream(task2) # Interligando task2 ao

    task3 task2.set_downstream(task3) Interligando as tasks
  12. # 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
  13. Sequential • Modo default • Uso mínimo (SQLite) • 1

    tarefa por vez • Bom para testes e usos locais
  14. Local • Executa tarefas paralelas localmente • Gerado por scheduler

    • Escala vertical • Preparado para produção • Não precisa de broker
  15. Celery • Executa tarefas paralelas remotamente • Gerado por scheduler

    • Escala vertical e horizontal • Preparado para produção • Precisa de um broker
  16. 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