Airflow - Automatizando seu fluxo de trabalho

Airflow - Automatizando seu fluxo de trabalho

Apresentação ministrada no Python Sudeste 2018

054d9fa364a9f7db6985df0645b21b42?s=128

Gilson Filho

March 30, 2018
Tweet

Transcript

  1. Airflow Automatizando seu fluxo de trabalho

  2. 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
  3. 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
  4. 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
  5. Princípios

  6. Dinâmico Pipeline as a code

  7. Extensível Estenda os componentes para o seu workflow

  8. Elegante Pipelines enxutos e parametrizáveis com Jinja

  9. Escalável Mensageria e Workers para orquestrar

  10. Instalação

  11. # Instalação Mínima pip install apache-airflow # Instalação com suporte

    a S3 e PostgreSQL pip install apache-airflow[s3, postgres]
  12. # 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
  13. Conceitos

  14. DAG • Directed Acyclic Graphs • Rede de jobs •

    Possui agendamento próprio • Código enxuto e fácil de entender quando criado
  15. Default Arguments • Dicionário de propriedades definidas • Passando para

    a DAG, é aplicado para todos os Operators
  16. 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
  17. Tasks • Instância de um Operator • Ela se torna

    um nó na DAG
  18. Primeira DAG

  19. 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
  20. 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
  21. # 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
  22. # Interligando task1 ao task2 task1.set_downstream(task2) # Interligando task2 ao

    task3 task2.set_downstream(task3) Interligando as tasks
  23. # 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
  24. Demo

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

  26. Arquitetura Executors

  27. Sequential • Modo default • Uso mínimo (SQLite) • 1

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

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

    • Escala vertical e horizontal • Preparado para produção • Precisa de um broker
  30. Airflow UI https://airflow.apache.org/ui.html​

  31. 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
  32. Blog: df.python.org.br Telegram: @grupydf Meetup: meetup.com/pt-BR/pythondf

  33. 18 e 19 de Agosto

  34. Dúvidas? Email: me@gilsondev.in Blog: gilsondev.in Telegram/Github: @gilsondev Telefone: (61) 9

    8334-2344 Twitter: @gilsonfilho