¿Qué es Apache Airflow?
Apache Airflow es una herramienta de código abierto para orquestar flujos de trabajo complejos y pipes de procesamiento de datos. Es una plataforma para programar y supervisar flujos de trabajos para tareas programadas.
Apache Airflow hace que tu flujo de trabajo sea simple, bien organizado y más sistemático
¿Para qué se utiliza Apache Airflow?
Airflow divide los trabajos en subtareas para automatizarlos programáticamente y permite una planificación y monitorización centralizadas. La automatización de integración de datos, tareas de mantenimiento y tareas administrativas son los casos de uso más comunes. Para ello, permite planificar y ejecutar trabajos como un cronograma.
Airflow también incluye una interfaz de usuario básica y una herramienta CLI para controlar el estado de ejecución de todo el sistema. Su propia API también está en desarrollo.
¿Qué es un flujo de trabajo en Airflow?
Un flujo de trabajo o Workflow, puede ser un simple calculo, hacer algunas consultas a la base de datos, aln scripts, etc.
Los workflows se dividen en una o varias tareas que están relacionadas entre sí y forman un grafo llamado DAG (Directed Acyclic Graph), Además, estas tareas que hay en un Workflow se les llama nodos
¿Qué son los DAGs en Apache Airflow?
Los DAGs, son un conjunto de tareaso o nodos relacionadas con el objetivo de completar una tarea más grande.
Los grafos DAG, deben cumplir dos condiciones:
Deben ser dirigidos, es decir las relaciones que tengan las diferentes tareas deben tener solo un sentido
Deben ser acíclicos, no pueden formar ciclos o bucles esto quiere decir que un nodo.
Solo realizan las tareas especificadas en una rama, dependiendo de una condición evaluada previamente, en cada división del flujo. Al no ser posible definir una rama sin ninguna tarea, se utilizan tareas vacías, también conocidas como tareas vacías, para representar ramas sin acciones.
Un ejemplo de pipeline sencillo
Descargar datos de una BBDD
Enviar los datos a un clúster
Transformar los datos con Apache Spark
Generar un mensaje de finalización
Las DAGS se trabajan a través de un código Python.
Ejemplo con la pipeline anterior:
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.mysql_operator import MySqlOperator
from airflow.operators.python_operator import PythonOperator
from airflow.contrib.operators.spark_submit_operator import SparkSubmitOperator
from airflow.contrib.operators.kafka_producer_operator import KafkaProducerOperator
# Definir la configuración del DAG
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2024, 2, 7),
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
dag = DAG(
'etl_workflow',
default_args=default_args,
description='Descargar datos de MySQL, enviar a Kafka, transformar con Spark y generar mensaje de terminación',
schedule_interval='@daily',
)
# Tarea para descargar datos de MySQL
download_mysql_data = MySqlOperator(
task_id='download_mysql_data',
sql='SELECT * FROM tu_tabla',
mysql_conn_id='tu_mysql_conn_id',
dag=dag,
)
# Tarea para enviar datos a Kafka
send_to_kafka = KafkaProducerOperator(
task_id='send_to_kafka',
topic='tu_topic',
bootstrap_servers='tus_brokers_kafka',
message='Puedes personalizar el mensaje aquí si es necesario',
dag=dag,
)
# Tarea para realizar transformaciones con Spark
def transform_with_spark():
# Código para transformar datos con Spark
pass
transform_data = PythonOperator(
task_id='transform_data',
python_callable=transform_with_spark,
dag=dag,
)
# Tarea para generar mensaje de terminación
def generate_completion_message():
# Código para generar el mensaje de terminación
pass
completion_message = PythonOperator(
task_id='generate_completion_message',
python_callable=generate_completion_message,
dag=dag,
)
# Definir dependencias entre tareas
download_mysql_data >> send_to_kafka >> transform_data >> completion_message
Con una interfaz gráfica se pueden observar mejor las tareas pero para modificarlas es necesario un código Python
Ventajas de Apache Airflow
Apache Airflow tiene varias ventajas que lo convierten en una herramienta mejor en comparación con otras herramientas en el mercado. Primero, discutiremos sus ventajas y luego algunos beneficios de usar Airflow en lugar de otras herramientas similares.
Código abierto / Python: Airflow está desarrollado en Python y es muy fácil diseñar tu flujo de trabajo. Puedes contribuir con tus complementos en código abierto y también utilizar otros complementos según tus necesidades.
Monitoreo: Puedes monitorear fácilmente el estado de tus tareas una vez que se están ejecutando. Airflow proporciona todos los detalles necesarios de cada tarea, como el tiempo de ejecución, el tiempo de llegada, los registros, etc.
Escalabilidad: La mayoría de las empresas orientadas a datos prefieren usar Airflow, por lo que la complejidad del flujo de trabajo crecerá a medida que avanza. Pero Airflow tiene la ventaja sobre otras herramientas, ya que es más escalable.
Programación inteligente: Puedes programar tus tareas como desees. Por ejemplo, si deseas programar tu tarea para que se ejecute todos los domingos a las 4:00 PM, puedes hacerlo.
Gestión de dependencias: Una de las características destacadas que hace que Airflow sea mejor que todas las demás herramientas es la gestión adecuada de dependencias. Si una tarea t2 depende de la tarea t1, que a su vez depende de la tarea t0, puedes establecer dependencias entre ellas.
Resiliencia: Todas las herramientas de flujo de trabajo a veces se comportan de manera inesperada, ya sea por cualquier motivo, como problemas de red, errores humanos, tardar más tiempo de lo esperado, etc. Airflow tiene varias funciones, como reintento. Si por casualidad tu tarea no se ejecuta correctamente, Airflow la vuelve a intentar después de ciertos minutos (si pudo haber fallado debido a otros problemas, como problemas de red, entonces el reintento puede hacer que la tarea sea exitosa). Incluso envía un mensaje de alerta al equipo a través de correo electrónico/Slack.
Alertas: Esta es una de las características más geniales que tiene Airflow. Si deseas que tu equipo sea notificado si alguna de tus tareas falla, te notificará a través de correo electrónico o notificación de Slack. Incluso si tu tarea se ejecuta correctamente, es posible que desees recibir una notificación, y Airflow también tiene esa función.
Acuerdo de nivel de servicio (SLA) Tiempo de espera: Esta podría ser una de las características más cruciales (al menos para algunas empresas) que Airflow ha proporcionado. Si tu tarea generalmente tarda 500 segundos en completarse, pero en un día específico tardó 1500 segundos, ¿no crees que algo inesperado ocurrió? ¿No te gustaría recibir una notificación? Puedes tener tu propia razón para almacenar estos registros, tal vez con fines analíticos u otros trabajos de investigación. Ejemplo: Supongamos que tu empresa recopila datos de registro de usuarios al final del día, pero has notado que cada sábado tu tarea tarda mucho más tiempo, lo que significa que la gente participa más los sábados.
Interfaz de usuario: Tiene una buena interfaz de usuario que lo hace más accesible para el usuario. Puedes ver las tareas en una estructura de árbol bien formateada, puedes ver los detalles de los registros, la base de datos de Airflow, la duración de la tarea, los tiempos de carga, una vista de gráficos completos en la interfaz de usuario.
Apache Airflow es una herramienta robusta y versátil para la gestión de flujos de trabajo.
Titulaciones que pueden interesarte
¿Quieres conocer más sobre Apache Airflow y otros sistemas de código abierto? ¡En Euroinnova tenemos todo lo que necesitas!
Curso de Apache: Servidores Linux (Titulación Universitaria + 8 Créditos ECTS)
CURSO EN DESARROLLO WEB CON JAVA EE Y JAKARTA EE: Curso en Desarrollo Web con Java EE/Jakarta EE (Titulación Universitaria + 8 Créditos ECTS)
...
Leer más