Airflow: procesos con flujos de trabajo y datos

Autores: Stefano Benco / Oscar Potrony

Airflow[1] es una plataforma open-source creada por la Apache Software Foundation[2] que sirve para gestionar, monitorizar y automatizar flujos de trabajo que culminen en complejos pipelines.

Se utiliza frecuentemente en arquitecturas de datos y de Machine Learning por su buena relación entre facilidad de uso, flexibilidad/customización y escalabilidad a la hora de trabajar las capas de procesamiento y transformación de datos.

¿Qué se necesita para trabajar con Airflow?

Para trabajar con Airflow, básicamente solo necesitamos tener claro cómo se ve el pipeline que queremos montar usando esa tecnología, y conocer una serie de conceptos básicos de éste.

Sabiendo eso, solo tenemos que saber ubicar los distintos elementos de ese pipeline y de los distintos flujos de trabajo que lo conforman dentro de la terminología de la herramienta, y finalmente prepararlo. En el siguiente apartado se comentan, entre otras cosas, los distintos elementos que existen dentro de Airflow, que terminan conformando los flujos.

Conceptos básicos de Airflow

Los conceptos básicos[3] que conforman Airflow son los siguientes:

  • Task: Una tarea a realizar, una unidad de trabajo. Todo Airflow consiste en organizar unidades de trabajo en flujos.
  • DAG, o Directed Acyclic Graph: La colección de todas las tareas que se quieren ejecutar en un grafo que refleja las relaciones y dependencias entre ellas.
  • Operador: Es el nombre que recibe los componentes capaces de realizar las tareas dentro del flujo de trabajo, lo que se ejecuta específicamente para el lenguaje de programación específico que se requiere. Son los componentes disponibles dentro de Airflow para ejecutar o solucionar las tareas que queremos realizar. Para ejecutar una tarea, preparamos el operador correspondiente disponible dentro de Airflow, y lo emparejamos con la tarea a solventar. Algunos ejemplos de operadores disponibles son:
    • [4]: Ejecuta un comando de bash.
    • PythonOperator[5]: Llama a una función de Python.
    • EmailOperator[6]: Envía un email.
    • SimpleHttpOperator[7]: Envía una solicitud HTTP.
    • MySqlOperator[8], SqliteOperator[9], PostgresOperator[10], MsSqlOperator[11], OracleOperator[12], JdbcOperator[13], etc.: Ejecutan comandos SQL, en bases de datos de los respectivos Sistemas Gestores de Bases de Datos.
  • Connections: Los metadatos, credenciales, y otra información que pudiésemos necesitar para conectar con fuentes de datos, aplicaciones, etc. que formen parte del flujo son almacenadas como conexiones. Toda esa información se almacena en una base de datos metastore, o puede almacenarse como variables en el flujo.
  • Variables: Una forma de guardar contenido en forma clave-valor dentro del flujo, para su uso cuando sea pertinente. No diferente al concepto de variable habitual en cualquier entorno de programación.
  • Hooks: Interfaces para manipular fuentes y aplicaciones externas, principalmente bases de datos como Hive, Pig, HDFS, PostgreSQL… Otros ejemplos serían los Jupyter Notebooks de Python, que también son manipulables desde estos hooks.

Flujo de trabajo real

Ahora veremos cómo se juntan todos estos conceptos, en un flujo de trabajo real, simplificado, implementado para un proyecto de extracción de ofertas de empleo de boletines oficiales para Aragón OpenData:

  • El flujo de ejecución cuenta con cinco tareas (Ilustración 1): la ingesta de todos los artículos con ofertas de empleo, la conversión de estos a ficheros de texto plano, la extracción de información de los mismos, el almacenamiento de esta información en la base de datos y el cierre de las ofertas para las que se han encontrado nombramientos.
  • Todo este flujo forma el DAG, que se compone de la ejecución de estas tareas, una tras otra, con los parámetros indicados en el código del DAG.
  • Como todo se ha realizado a través de código python, invocado desde scripts de bash. Excepto para la ingesta, los operadores utilizados son BashOperator. Para la ingesta, y por la razón expuesta en el punto siguiente, se utiliza un SSHOperator.
  • También se cuenta con una connection para unir dos servidores: el de backend y el de frontend, ya que este último dispone de conexión a internet para la descarga de artículos.
  • Se ha utilizado un hook para realizar esta conexión SSH con el frontend.
     

Airflow: procesos con flujos de trabajo y datos

 

 

Última actualización: 23/06/2021

Información y recursos asociados

Enlaces de interés