¿Qué es Apache Airflow? Introducción

Última actualización: 07/07/2020

Aprende en esta entrada qué es Apache Airflow, una de las herramientas de automatización de flujos de trabajo más potentes que existen que puede ayudar a gestionar cargas Big Data. En el artículo explicaremos las características de Airflow y su evolución.

¿Qué es Apache Airflow? Introducción

¿Qué es Apache Airflow?

Apache Airflow es una herramienta de tipo workflow manager, o en español: gestionar, monitorizar y planificar flujos de trabajo, usada como orquestador de servicios.

El proyecto fue creado en octubre de 2014 en Airbnb por Maxime Beauchemin y publicado con licencia open source en junio de 2015. En marzo de 2016 el proyecto se acoge a la incubadora de la Apache Software Foundation, y en enero de 2019 es graduado como top level project, donde se mantiene en la actualidad. La adopción de Airflow en entornos productivos ha crecido recientemente, integrándose en el stack de Google Cloud en 2018 como su orquestador de servicios.

Airflow se usa para automatizar trabajos programáticamente dividiéndolos en subtareas. Permite su planificación y monitorización desde una herramienta centralizada. Los casos de uso más comunes son la automatización de ingestas de datos, acciones de mantenimiento periódicas y tareas de administración. Para ello, permite planificar trabajos como un cron y también ejecutarlos bajo demanda.

Aunque Airflow no es una herramienta ETL ayuda a gestionar y a monitorizar este tipo de procesos. Además, Airflow integra una interfaz de usuario sencilla, una herramienta CLI que proporciona control del estado de ejecución de todo el sistema. También se encuentra en desarrollo su propia API.

La manera clásica de programar tareas ha sido típicamente con herramientas de tipo cron. Con Airflow se superan algunas de las limitaciones y desventajas que tienen estos sistemas. Entre ellas se encuentra la escalabilidad limitada o la capacidad de establecer relaciones entre las tareas a través de código. Además, añade interfaces de usuario para monitorizar y gestionar la ejecución de los sistemas.

DAGs en Apache Airflow

En Airflow, se trabaja con DAGs (Directed Acyclic Graphs). Son colecciones de tareas o de trabajos a ejecutar conectados mediante relaciones y dependencias. Son la representación de los workflows.

Los grafos deben cumplir dos condiciones: ser dirigidos y acíclicos:

  • Dirigidos: Las relaciones entre los nodos tienen solo un sentido.
  • Acíclicos: No pueden formar ciclos, es decir, la ejecución no puede volver a un nodo que ya ha ejecutado.

Cada una de las tareas del DAG representada como un nodo, se describe con un operador y generalmente es atómica. Existen operadores predefinidos, y es posible extender y crear nuevos operadores si fueran necesarios.

Por ejemplo BashOperator se encarga de ejecutar un comando Bash mientras que PythonOperator se encarga de ejecutar una función de Python.

Ejemplo flujo Apache Airflow
Ejemplo de flujo en Apache Airflow

En este ejemplo, observamos que es posible definir ramas o branches en un grafo. En cada división del flujo solo ejecutan las tareas definidas en una de las ramas, dependiendo de una condición evaluada anteriormente. Al no ser posible definir una rama sin ninguna tarea, para representar ramas sin acciones se usan tareas vacías llamadas dummy tasks.

Por ejemplo, un workflow o pipeline sencillo podría contener las siguientes tareas:

  1. Descargar datos de una base de datos MySQL
  2. Enviar los datos a un clúster de Apache Kafka
  3. Realizar transformaciones sobre los datos con Apache Spark
  4. Generar un mensaje de terminación

La creación de DAGs se realiza a través de código Python. Realmente, el fichero python es un fichero de configuración que especifica la estructura del DAG con código. El propósito de este script es definir el objeto DAG por lo que debe evaluarse rápidamente y por tanto no es el lugar para realizar procesamiento de datos.

La interfaz gráfica permite monitorizar el estado de ejecución de las tareas pero no permite crear nuevos flujos.

Ejemplo de DAGs en Apache Airflow
Ejemplo de DAGs en Apache Airflow

Características

Cuando una tarea se ejecuta en Airflow, se denomina instancia, y tiene un tiempo asociado al momento de ejecución. Además, incorporan un atributo que describe su estado de ejecución: Running, Failed, Success, etc. La combinación de estas instancias de tareas generan un workflow o un flujo de trabajo.

Para establecer los tiempos máximos de ejecución para cada tarea, Airflow trabaja con SLAs (Service Level Agreements). Cuando el SLA no se cumple para alguna tarea, se puede informar al usuario o administrador del sistema.

Las tareas definidas en el script ejecutan en un contexto diferente en los ejecutores y en diferentes instantes de tiempo. Esto significa que no se puede usar el script para comunicación entre tareas. Aun así, es posible gestionar el paso de mensajes y compartir el estado entre las tareas que ejecutan. Para ello se usa XCom (Cross-communication) y también se pueden definir variables en formato clave-valor.

Airflow también proporciona interfaces de comunicación llamadas Hooks para conectar con otras plataformas y bases de datos externas como pueden ser HDFS o Apache Hive. Los conectores facilitan la creación de nuevas tareas independientemente del origen y del destino de los datos.

Además, Airflow permite un control visual del estado de cada paso, facilitando la trazabilidad y la localización de errores conservando un histórico de fallos para detectar y prevenir problemas. Cuando una tarea falla, podemos configurar el sistema para que se reintente, o bien definir actuaciones en función del fallo que haya ocurrido.

Arquitectura de Apache Airflow: Ejecutores

Airflow se compone de un servidor web que sirve la API y la interfaz de usuario y de un planificador (Scheduler) encargado de interpretar y ejecutar las tareas definidas en los DAGs. Este planificador contiene un ejecutor, encargado de lanzar los workers y repartir en ellos las tareas.

Existen varias formas de desplegar Apache Airflow, con múltiples arquitecturas para sus ejecutores: Local, Sequential, Celery, Dask, Mesos o Kubernetes. También se puede usar con servicios en la nube de Azure, AWS o Google Cloud. A continuación se listan los más usados.

Single-Node Executors

Los ejecutores de este tipo solo permiten la ejecución de tareas en un nodo o worker, que es el mismo host en el que se encuentra el Scheduler. No debemos considerar estos ejecutores para sistemas en producción ya que no son escalables y son puntos únicos de fallo.

Sequential: Este tipo de ejecutor secuencial se usa para debugging de DAGs y es compatible con SQLite a través de una única conexión de escritura. Ejecuta solo una tarea en cada instante.

Local: Ejecuta las tareas en paralelo. Es el entorno mínimo que se podría considerar para una aplicación real. También es compatible con SQLite

Cluster Executors

Para gestionar los recursos, Apache Airflow necesita una asignación fija de workers sobre los que distribuir las carga de trabajo.

Celery: Ejecuta tareas en paralelo en varios nodos separados, por lo que permite escalar el sistema de forma horizontal y vertical. Este tipo de ejecutor requiere desplegar un gestor de colas como puede ser RabbitMQ. Además, se puede asignar cada tarea a una cola de procesamiento. En caso de fallo en algún worker podría desplegar uno nuevo.

Dask: Ejecuta cada una de las tareas en varios nodos dividiendo la carga de trabajo, por lo que puede conseguir un rendimiento mayor a Celery si se tiene en cuenta la localidad del dato (el trabajo ejecuta en el nodo que contenga el dato).

Kubernetes: Ejecuta cada tarea en un pod de Kubernetes, desplegando nuevos pods según la demanda de recursos. De esta forma, se consigue aprovechar los recursos de manera más eficiente.

Conclusión

En esta introducción a Apache Airflow hemos repasado las características más importantes de este orquestador. Se ha consolidado como un proyecto open source con una gran comunidad y crecimiento apoyado por empresas como Google y Airbnb.

Apache Airflow nos permite definir nuestros propios flujos de trabajo para orquestar los servicios y mantener un control y una monitorización centralizada.

Preguntas Frecuentes Apache Airflow – FAQ

¿Para qué se usa Apache Airflow?

Airflow es una herramienta open source de planificación y automatización de flujos de trabajo basada en Python. Se usa para automatizar ingestas de datos, cargas big data, acciones periódicas de mantenimiento y tareas de administración.

¿Qué es un DAG en Apache Airflow?

Los DAGs (Grafos Acíclicos Dirigidos) en Airflow son la forma lógica de organizar todas las tareas, sus relaciones y dependencias. Son dirigidos porque las relaciones entre los nodos tienen solo un sentido y acíclicos porque la ejecución no puede formar ciclos, es decir, volver a un nodo que ya ha ejecutado.

¿Apache Airflow es una herramienta ETL?

Airflow no es una herramienta ETL, ya que no realiza la extracción, transformación y carga de datos. Sin embargo, ayuda a gestionar y a monitorizar los procesos y herramientas ETL mediante grafos DAG.


A continuación el vídeo-resumen. ¡No te lo pierdas!


¡Echa un ojo a mi lista de reproducción de Big Data en Youtube!

Si te ayuda el contenido del blog, por favor considera unirte a la lista de correo para reconocer el trabajo!

Esta entrada tiene 2 comentarios

  1. Gonzalo

    Muy buen resumen introductorio. Quizas valga completar la lista de Cluster Executors con el KubernetesExecutor, ya que aporta mucha versatilidad. Saludos!

    1. oscarfmdc

      Gracias Gonzalo! Es una buena idea, lo añadiré a la lista! 🙂

Deja una respuesta