Empezando con Apache Airflow: Orquestando flujos de trabajo

David Castro
3 min readMar 9, 2021

--

Photo by Samuel Sianipar on Unsplash

Airflow es una plataforma para programáticamente crear, programar y monitorizar flujos de trabajo, es de código abierto y fue escrita en Python. Un flujo de trabajo es una secuencia de pasos que conforman un proceso, dentro de la herramienta se define como un grafo acíclico dirigido DAG (Directed Acyclic Graphs) de tareas atómicas. Para ejecutar estas tareas existen operadores predefinidos y también contamos con la posibilidad de desarrollarlos de forma sencilla. Mas información en https://airflow.apache.org/

🤓 Conceptos básicos

Componentes

  • Webserver: Un server Flask con Gunicorn para acceder a la intefaz gráfica
  • Scheduler: Responsable de programar las tareas
  • Metadata database: Base de datos donde se guardan los metadatos de Airflow: información sobre DAGs, conexiones, variables, usuarios
  • Executor: Define como son ejecutadas las tareas

Conceptos clave

  • DAG: Una representación gráfica de varias tareas
  • Operator: Representa una tarea en Airflow
  • Task: Una instancia de un Operator
  • Task Instances: Una ejecución especifica de una tarea (tiene timestamp)
  • Workflow: Combinación de todos los anteriores

¿Qué es un DAG?

Es un grupo de tareas que quieres ejecutar, organizadas de forma que se reflejen sus relaciones y dependencias. Define cómo se va ejecutar un flujo de trabajo.

Ejemplo de un DAG

¿Qué es un Operator?

Es una tarea en un flujo de trabajo.

  • Representan una única tarea
  • Al instanciarlos se crea una tarea

Tipos de Operator

  • Acciones: PostgreSQL, MySQL
  • Transferencia: S3ToRedshift, BigQueryToGCS, MySqlToS3
  • Sensores: S3Sensor, SQL Sensor

¿Qué son los Hooks?

Los Hooks son interfaces para conectarse con servicios externos. Sirven para conectarse a servicios externos desde PythonOperator. Tambén sirven para utilizarlos para hacer Operators.

¿Qué es XCom?

La forma que tiene Airflow de que las tareas compartan información entre ellas.

⛴️ Desplegando Apache Airflow con Docker Compose

A continuación les comparto un proyecto para levantar los servicios de Apache Airflow con Docker Compose. El ambiente tiene las siguientes características:

  • Base de datos: Postgres 12.3
  • Airflow 2.0.1 (init, webserver, scheduler)
  • Gestor de bases de datos: Pgadmin 4

Además cuenta con un ejemplo de un DAG sencillo llamado hello_world, lo podrás encontrar en la carpeta DAG

⌨️ Creando nuestro primer DAG (Hello World DAG)

Un DAG es un script de Python en el que se configuran y se definen las tareas que hacen parte del flujo de trabajo. A continuación vamos a crear archivo en la carpeta de dags, este ejemplo lo titulé: hello_world.py, este archivo tendrá tres tareas sencillas que se ejecutarán de forma secuencial, cada una con un operador diferente.

from datetime import datetimefrom airflow.models import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.bash_operator import BashOperator
from airflow.operators.python_operator import PythonOperator
default_args = {
'owner': 'davidcasr',
'start_date': datetime(2021, 3, 1, 12, 0, 0)
}
def hello_world_loop():
for palabra in ['hello', 'world']:
print(palabra)
with DAG(
dag_id='hello_world',
default_args = default_args,
schedule_interval='@once'
) as dag:
test_start = DummyOperator(task_id='test_start') test_python = PythonOperator(task_id='test_python', python_callable=hello_world_loop) test_bash = BashOperator(task_id='test_bash', bash_command='echo Hello World!')test_start >> test_python >> test_bash

Los operadores usados fueron:

  • DummyOperator: Es un operador que literalmente no hace nada. Puede usarse para agrupar tareas en un DAG
  • BashOperator: Es un operador para ejecutar comandos en un shell Bash
  • PythonOperator: Es un operador para ejecutar llamadas a funciones Python

⚡ Ejecutar el DAG

Con el DAG definido y ubicado en la carpeta de DAG, podemos abrir nuestro navegador e ir a localhost:8080. Después buscamos el DAG creado y lo habilitamos en el switch button ubicado en la parte izquierda del DAG hello_world.

Interfaz principal de Apache Airflow

Referencias

--

--

David Castro
David Castro

Written by David Castro

🚀 Software Engineer 🖥️ Backend Developer 🐍 Python https://davidcasr.com/

No responses yet