Hola Mundo Apache Airflow

Category : Noticias

Apache Airflow es una plataforma creada para desarrollar, planificar y monitorizar flujos de trabajo. Y esa es la definición exacta (que dan sus creadores). Eso hace de Apache Airflow un candidato perfecto para usarlo cómo herramienta ETL aunque, realmente, no sea exactamente una herramienta ETL como Apache Hop o Apache Nifi. Si quieres hacerte una idea de lo que Airflow es y no es, te recomiendo este video y saca tus propias conclusiones.

Hay que decir que la instalación, aunque no es excesivamente compleja, supone cierta complejidad y Airflow corre sobre linux. Por lo que, si estás usando una máquina windows, como es mi caso, tienes que ejecutarlo mediante un contenedor docker. Cómo instalar docker sobre windows no es el objetivo de este tutorial. Aunque puedes encontrar mucha documentación sobre ello.

Así, pues nuestros requisitos son:

  • Python3 ( airflow está escrito en python y corre código python)
  • Docker para ejecutar Ariflow

Una vez satisfecho los requisitos podemos descagarnos este docker-compose.yaml con el docker-compose que nos proporciona Ariflow

Cosas que nos interesan en este primer momento:

  • En la carpeta en la que guardaremos nuestro archivo docker-compose.yaml crearemos los siguientes directorios:
  • dags: Donde crearemos nuestros dags
  • logs: donde ese almacenarán los logs de ejecución
  • plugins: donde pondremos nuestros plugins

Una vez hecho eso ya podemos inicializar la base de datos:

docker-compose up airflow-init

Y arrancar:

docker-compose up

Una vez que ha acabado podemos ir a http://localhost:8080 y comprobar que la interfaz web está funcionando. El usuario y password por defecto es ariflow

En caso de que queramos pararlo todo y borrarlo todo siempre podemos usar este comando:

docker-compose down --volumes --rmi all

Y si comprobamos docker-desktop veremos que tenemos 6 contenedores funcionando:

O.K. Ya estamos con la parte de la instalación. Ya podemos ir a la carpeta dags que hemos creado y empezar a escribir nuestros DAGS.

¿Que es un DAG?

Un DAG es un Gráfico Acíclico Direccionado (Directed Acyclic Graph). Es decir un flujo de trabajo que va de la tarea A a la tarea B y la C . De la tarea B y C va a la tarea D pero que no puede volver atrás a la A.

Hay que decir que, para bien y para mal, lo que vamos a escribir es puro código Python. Por lo que es conveniente que estés familiarizado.

Veamos ´cómo queda un DAG con la pinta de arriba:

from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash import BashOperator
default_args = {
    'owner':'Jortilles',
    'retries':5,
    'retry_delay':timedelta(minutes=1)
}
with DAG(
    dag_id='a_simple_dag_jortilles',
    description='Esto es una descripción',
    default_args=default_args,
    start_date=datetime(2022,1,1,1),
    schedule_interval='@daily'
) as dag: 
    tarea_A = BashOperator(
        task_id ='primera_tarea',
        bash_command = 'echo "hello world"'
    ) 
    tarea_B = BashOperator(
        task_id ='segunda_tarea',
        bash_command = 'echo "existo"'
    )
    tarea_C = BashOperator(
        task_id ='tercera_tarea',
        bash_command = 'echo "pero no tanto"'
    )
    tarea_D = BashOperator(
        task_id ='cuarta_tarea',
        bash_command = 'echo "Adios"'
    )
    tarea_A >> [tarea_B, tarea_C] >> tarea_D

Donde tenemos:

Con esto ya podemos ver el log de ejecución donde hace todo el proceso y se despide.

Resumen rápido:

  • Apache Airflow es un gestor y planificador de flujos de datos extraordinario.
  • Está escrito en Python y escribiremos código Python.
  • No es una herramienta visual ETL con componentes predefinidos que nosotros configuramos. Es un entorno de trabajo en el que desarrollaremos y planificaremos nuestros flujos de datos. Con lo bueno (flexibilidad) y lo malo (complejidad) que ello supone.