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

Avatar for Gilson Filho

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