Skip to main content

Command Palette

Search for a command to run...

Ejecutando notebooks en paralelo usando runMultiple

Updated
3 min read
Ejecutando notebooks en paralelo usando runMultiple

NotebookUtils (aka MSSparkUtils) en Microsoft Fabric es como tu caja de herramientas secreta para trabajar con notebooks. En esta ocasión nos centraremos en las utilidades de cuaderno runMultiple(), que te permite ejecutar notebooks en paralelo. La API utiliza un mecanismo de implementación multihilo dentro de una sesión de spark, lo que significa que los recursos de computación son compartidos por las ejecuciones de los notebooks referenciados.

Las ventajas que ofrece son:

  • Definición de las dependencias y el orden de ejecución de los notebooks

  • Ejecución de notebooks en paralelo, sin esperar a que finalice cada uno

  • Optimización de uso de los recursos de Spark, reduciendo así el coste de los proyectos en Microsoft Fabric

En este artículo, voy a mostrar cómo utilizar runMultiple con DAG (Directed Acyclic Graph) en Notebooks en Microsoft Fabric para lograr una alta concurrencia, flexibilidad y escalabilidad.

Ejecutar múltiples notebooks en paralelo

Ejemplo simple de uso de runMultiple para ejecutar múltiples notebooks en paralelo.

  • Notebook Orquestador – Notebook principal que ejecutará los otros notebooks.

  • Notebook1, Notebook2, Notebook3 – son los notebooks de trabajo que se ejecutarán desde el notebook principal, obtendrán los valores de los parámetros y devolverán la salida al notebook principal.

En su forma más simple, puedes ejecutar todos los notebooks en paralelo pasados como una lista:

notebookutils.notebook.runMultiple(["Notebook1", "Notebook2", "Notebook3"])

Aunque tengo 3 notebooks en este pipeline, en el hub de monitorización sólo veo uno porque todos los cuadernos comparten el cómputo del notebook orquestador

Ejecutar múltiples notebooks con DAG

De esta forma, se pueden ejecutar varios notebooks con parámetros y con un orden especifico, respetando las dependencias.

DAG = {
    "activities": [
        {
            "name": "dimension_fecha",
            "path": "dimesionFecha",
            "timeoutPerCellInSeconds": 120,
            "args": {"fecha_inicio": "2024-01-01", "fecha_fin": "2024-12-31"},
        },
        {
            "name": "dimension_cliente",
            "path": "dimesionCliente",
            "timeoutPerCellInSeconds": 120,
            "args": {"filas": 1000},
        },
        {
            "name": "dimension_producto",
            "path": "dimensionProducto",
            "timeoutPerCellInSeconds": 120
        },
        {
            "name": "fact_venta",
            "path": "factVenta",
            "timeoutPerCellInSeconds": 600,
            "retry": 1,
            "retryIntervalInSeconds": 10,
            "dependencies": ["dimension_fecha","dimension_cliente","dimension_producto"]
        }
    ],
    "timeoutInSeconds": 43200,
    "concurrency": 5 
}

Name: Nombre de la NotebookActivity, debe ser único

Path: Nombre del notebook

Args: Parámetros del notebook

Retry: Número de reintentos cuando falla el notebook

Dependencies: List of NotebookActivity names that this activity depends on

TimeoutPerCellInSeconds: Tiempo máximo de espera para cada celda, por defecto 90 segundos

TimeoutInSeconds: Tiempo de expiración para el DAG completo. Por defecto es de 12 horas

Concurrency: Número máximo de notebooks a ejecutar en paralelo, por defecto 50

Para ejecutar y visualizar el DAG:

notebookutils.notebook.runMultiple(DAG, {"displayDAGViaGraphviz":True, "DAGLayout":"spectral", "DAGSize":11})

Puedes ver la barra de progreso interactiva a medida que los cuadernos se ejecutan en el orden especificado, respetando las dependencias y con una visión directa de qué Notebook se ha ejecutado con éxito y cuál ha fallado.

BONUS

Documentación runMultiple

Para poder ver un ejemplo y el uso detallado, ejecuta el siguiente código:

notebookutils.notebook.help("runMultiple")

Referenciar notebooks en otras áreas de trabajo

Por defecto, si no se especifica lo contrario, el notebook de referencia se buscará en la misma área de trabajo donde se ejecuta el notebook orquestador, pero puedes referenciar notebooks de otras áreas de trabajo:

Validar DAG

También existe un método para comprobar si el DAG está definido correctamente

notebookutils.notebook.validateDAG(DAG)

Referencias

NotebookUtils (antiguo MSSparkUtils) para Fabric – Microsoft Fabric | Microsoft Learn

More from this blog

D

DataGym | Microsoft Fabric

35 posts