Última actualización: 21/05/2023
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.
Contenidos
¿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.
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.
Casos de Uso
Debemos entender Airflow como una herramienta de coordinación de trabajos realizados por otros servicios. Resulta muy útil para gestionar los workflows en Data Warehouses y en pipelines de Machine Learning.
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.
Además, podemos usar Airflow para orquestar testing automático de componentes, backups y generación de métricas y reportes.
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.


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:
- Descargar datos de una base de datos MySQL
- Enviar los datos a un clúster de Apache Kafka
- Realizar transformaciones sobre los datos con Apache Spark
- Generar un mensaje de terminación
Entre los operadores más usados se encuentran los siguientes:
- Bash Operator: Permite ejecutar scripts en Bash, aunque es posible modificarlo.
- Database Operator: Nos permite interactuar con bases de datos. Se usan al obtener datos de una base de datos mediante consultas SQL e información de autenticación. Es compatible con bases de datos populares como MySQL, Postgres, Sqlite o con JDBC.
- Python Operator: Ejecuta scripts en Python y operaciones creadas para el DAG.
- Sensor Operator: Está a la espera de detectar modificaciones en sistemas externos como ficheros o fuentes de datos.
- Email Operator: Este operador permite enviar un email a modo de notificación.
- HTTP Operator: Permite usar una API HTTP que necesite autenticació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.


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.
Aunque las tareas de Airflow pueden intercambiar metadatos, no se deben encargar de mover datos entre ellas.
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, la interfaz de usuario y gestiona las peticiones y de un planificador (Scheduler) encargado de interpretar, ejecutar y monitorizar las tareas definidas en los DAGs. Este planificador contiene un ejecutor, encargado de lanzar los workers y repartir en ellos las tareas. Airflow también tiene una base de datos a modo de backend encargada de almacenar los metadatos, usuarios y ejecuciones. Por defecto usa Sqlite pero podemos usar otra base de datos en entornos de producción, como MySQL.
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.
Astronomer
Astronomer es una empresa fundada en el 2018 que proporciona soporte empresarial a la herramienta Apache Airflow. Integra una CLI para gestionar los despliegues de DAGs y una API para aprovisionar y manejar las instancias de Airflow. También permite controlar los accesos de usuario con un modelo basado en roles (RBAC).
Astronomer ayuda a las organizaciones a adoptar Apache Airflow en la nube pública. Puede ejecuta en un clúster de Kubernetes totalmente gestionado. Existe la versión Cloud y la versión Enterprise. Astronomer está recomendado para despliegues de Airflow en grandes grandes entornos empresariales con altos volúmenes de datos.
Comandos Útiles de Airflow
Instalar Airflow:
export AIRFLOW_HOME=~/directorio-de-airflow
pip install "apache-airflow[celery]==2.2.3" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.2.3/constraints-3.6.txt"
airflow standalone
airflow initdb
: inicializa la base de datos de metadatos de Airflowairflow list_dags
: muestra una lista de todos los flujos de trabajo (DAGs) disponibles en el directorio de DAGs de Airflowairflow list_tasks dag_id
: muestra una lista de todas las tareas en un DAG específicoairflow test dag_id task_id execution_date
: ejecuta una tarea específica en un DAG en una fecha de ejecución determinadaairflow run dag_id task_id execution_date
: ejecuta una tarea específica en un DAG en una fecha de ejecución determinada y enviará la salida a la base de datos de metadatosairflow trigger_dag dag_id
: inicia la ejecución de un DAG específicoairflow pause dag_id
: pausa un DAG específicoairflow unpause dag_id
: reanuda un DAG específicoairflow clear dag_id
: elimina todos los datos de ejecución para un DAG específicoairflow webserver
: inicia el servidor web de Airflowairflow scheduler
: inicia el planificador de Airflow
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.
El foco principal de Airflow son los procesos batch, con una serie de tareas finitas que se ejecutan cada ciertos intervalos o disparadores. Aunque también existen orquestadores para trabajos en streaming, Airflow no es la herramienta adecuada.
Apache Airflow nos permite definir nuestros propios flujos de trabajo para orquestar los servicios y mantener un control y una monitorización centralizada.
Cursos de Apache Airflow
Si quieres continuar aprendiendo, aquí te dejo mis mejores recomendaciones de cursos de Apache Airflow:
ETLs y Pipelines de datos con Airflow y Kafka
Este curso impartido por IBM en la plataforma de formación online Coursera. Podrás aprender a implementar pipelines de datos y ETLs como soluciones completas usando Airflow. Lo completarás en unas 13 horas en las que se incluye un proyecto final para poner en práctica todo lo aprendido.
Introducción a Apache Airflow
Curso perfecto como introducción a Airflow. Aprenderás los conceptos básicos y a implementar tus primeras pipelines con ejemplos prácticos. Ampliarás conocimientos sobre DAGs, buenas prácticas y cómo integrar Apache Airflow en un proyecto Big Data.
El mismo instructor también tiene un curso más avanzado llamado Guía completa de Apache Airflow que te recomiendo hacer como segundo paso.
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.
Airflow vs Oozie ¿Cuál es mejor?
Ambos proyectos tienen licencia open source. Por un lado, Oozie está orientado a la orquestación de servicios del ecosistema Hadoop con código Java y XML. Airflow es un proyecto más moderno y flexible, con lenguaje de programación Python.
A continuación el vídeo-resumen. ¡No te lo pierdas!
Muy buen resumen introductorio. Quizas valga completar la lista de Cluster Executors con el KubernetesExecutor, ya que aporta mucha versatilidad. Saludos!
Gracias Gonzalo! Es una buena idea, lo añadiré a la lista! 🙂