Programación y orquestación de flujos de trabajo

Los flujos de trabajo de Databricks tiene herramientas que permiten la programación y orquestación de tareas de procesamiento de datos en Azure Databricks. Los flujos de trabajo de Databricks se usan para configurar trabajos de Databricks.

En este artículo se presentan conceptos y elecciones relacionados con la administración de cargas de trabajo de producción mediante trabajos de Databricks.

¿Qué son los trabajos de Databricks?

Un trabajo es la unidad principal para programar y organizar cargas de trabajo de producción en Azure Databricks. Los trabajos constan de una o varias tareas. De manera conjunta, las tareas y los trabajos permiten configurar e implementar lo siguiente:

  • Lógica personalizada, como Spark, SQL, Python OSS, ML y código arbitrario.
  • Proceso de recursos con bibliotecas y entornos personalizados.
  • Programas y desencadenadores para ejecutar cargas de trabajo.
  • Lógica condicional para el flujo de control entre tareas.

Los trabajos proporcionan un enfoque de procedimientos para definir relaciones entre tareas. Las canalizaciones de Delta Live Tables proporcionan un enfoque declarativo para definir relaciones entre conjuntos de datos y transformaciones. Puede incluir canalizaciones de Delta Live Tables como una tarea en un trabajo. Consulte Tarea de canalizaciones de Delta Live Tables para trabajos.

Los trabajos pueden variar en complejidad, desde una sola tarea que ejecuta un cuaderno de Databricks hasta miles de tareas que se ejecutan con la lógica condicional y las dependencias.

¿Cómo puedo configurar y ejecutar trabajos?

Puede crear y ejecutar un trabajo mediante la interfaz de usuario de trabajos, la CLI de Databricks o invocando la API de trabajos. Mediante la interfaz de usuario o la API, puede reparar y volver a ejecutar un trabajo con errores o cancelados. Puede supervisar los resultados de la ejecución de trabajos mediante la interfaz de usuario, la CLI, la API y las notificaciones (por ejemplo, correo electrónico, destino de webhook o notificaciones de Slack).

Si prefiere un enfoque de infraestructura como código (IaC) para configurar y organizar los trabajos, use Conjuntos de recursos de Databricks (DAB). Las agrupaciones pueden contener definiciones de YAML de trabajos y tareas, se administran mediante la CLI de Databricks y se pueden compartir y ejecutar en diferentes áreas de trabajo de destino (como desarrollo, almacenamiento provisional y producción). Para obtener información sobre el uso de DAB para configurar y orquestar los trabajos, consulte Conjuntos de recursos de Databricks.

Para obtener información sobre cómo usar la CLI de Databricks, consulte ¿Qué es la CLI de Databricks? Para más información sobre el uso de la API de trabajos, consulte la API de trabajos.

¿Cuál es la configuración mínima necesaria para un trabajo?

Todos los trabajos de Azure Databricks requieren lo siguiente:

  • Código fuente (por ejemplo, un cuaderno de Databricks) que contiene lógica que se va a ejecutar.
  • Un recurso de proceso para ejecutar la lógica. El recurso de proceso puede ser un proceso sin servidor, un proceso de trabajos clásico o un proceso multiuso. Consulte Configuración del proceso para trabajos.
  • Una programación especificada para cuándo se debe ejecutar el trabajo.. De manera opcional, puede omitir la configuración de una programación y desencadenar el trabajo manualmente.
  • Un nombre único.

Nota:

Si desarrolla el código en cuadernos de Databricks, puede usar el botón Programar para configurar ese cuaderno como trabajo. Consulte Creación y administración de trabajos de cuaderno programados.

¿Qué es una tarea?

Una tarea representa una unidad de lógica para que se ejecute como un paso en un trabajo. Las tareas pueden variar en complejidad e pueden incluir lo siguiente:

  • Un cuaderno
  • Un archivo JAR
  • Consultas SQL
  • Una canalización DLT
  • Otro trabajo
  • Tareas de flujo de control

Puede controlar el orden de ejecución de las tareas al especificar las dependencias entre ellas. Puede configurar tareas para que se ejecuten en secuencia o en paralelo.

Los trabajos interactúan con la información de estado y los metadatos de las tareas, pero el ámbito de las tareas están aislados. Puede usar los valores de tarea para compartir contexto entre tareas programadas. Consulte Use task values to pass information between tasks (Uso de valores de tareas para pasar información entre tareas).

¿Qué opciones de flujo de control están disponibles para los trabajos?

Al configurar trabajos y tareas dentro de trabajos, puede personalizar la configuración que controla cómo se ejecutan el trabajo completo y las tareas individuales. Estas opciones son:

Tipos de desencadenador

Debe especificar un tipo de desencadenador al configurar un trabajo. Puede elegir entre los siguientes tipos de desencadenador:

También puede optar por desencadenar manualmente el trabajo, pero esto se reserva principalmente para casos de uso específicos, como:

  • Uso de una herramienta de orquestación externa para desencadenar trabajos mediante llamadas a la API de REST.
  • Tiene un trabajo que se ejecuta rara vez y que requiere una intervención manual para la validación o la resolución de problemas de calidad de datos.
  • Está ejecutando una carga de trabajo que solo debe ejecutarse una o varias veces, como una migración.

Consulte Tipos de desencadenadores para trabajos de Databricks.

Reintentos

Reintentos especifica cuántas veces se debe volver a ejecutar una tarea determinada si se produce un error en la tarea con un mensaje de error. Los errores suelen ser transitorios y se resuelven mediante un reinicio. Algunas características de Azure Databricks, como la evolución de esquemas con Structured Streaming, asumen que se ejecutan trabajos con reintentos para restablecer el entorno y permitir que continúe un flujo de trabajo.

Si especifica reintentos para una tarea, la tarea se reinicia hasta el número de veces especificado si encuentra un error. No todas las configuraciones de trabajo admiten reintentos de tareas. Consulte Set a retry policy (Establecimiento de una directiva de reintentos).

Cuando se ejecuta en modo de desencadenador continuo, Databricks vuelve a intentarlo automáticamente con retroceso exponencial. Consulte ¿Cómo se controlan los errores para trabajos continuos?.

Ejecución de tareas condicionales

Puede usar el tipo de tareaEjecutar si para especificar condicionales para tareas posteriores en función del resultado de otras tareas. Agregue tareas al trabajo y especifique tareas dependientes del nivel superior. En función del estado de esas tareas, puede configurar una o varias tareas posteriores para que se ejecuten. Los trabajos admiten las siguientes dependencias:

  • Todo correcto
  • Al menos una correcta
  • No se pudo realizar ninguna
  • Todo listo
  • Al menos un error
  • Todos con errores

Consulte Configure task dependencies (Configuración de dependencias de tareas).

Tareas condicionales If/else

Puede usar el tipo de tarea If/else para especificar condicionales en función de algún valor. Consulte Add branching logic to a job with the If/else task (Agregar lógica de bifurcación al trabajo con una tarea If/else).

Los trabajos admiten taskValues que define dentro de la lógica y permiten devolver los resultados de algún cálculo o estado de una tarea al entorno de trabajos. Puede definir condiciones If/else contra taskValues, parámetros de trabajo o valores dinámicos.

Azure Databricks admite los siguientes operandos para los condicionales:

  • ==
  • !=
  • >
  • >=
  • <
  • <=

Consulte también:

Para cada tarea

Use la tarea For each para ejecutar otra tarea en bucle, pasando un conjunto diferente de parámetros a cada iteración de la tarea.

Agregar la tarea For each a un trabajo requiere definir dos tareas: la tarea For each y una tarea anidada. La tarea anidada es la tarea que se va a ejecutar para cada iteración de la tarea For each y es uno de los tipos de tareas de trabajos de Databricks estándar. Se admiten varios métodos para pasar parámetros a la tarea anidada.

Consulte Ejecución de una tarea parametrizada de trabajo de Azure Databricks en bucle.

Umbral de duración

Puede especificar un umbral de duración para enviar una advertencia o detener una tarea o un trabajo si se supera una duración especificada. Entre los ejemplos de cuándo es posible que desee configurar esta opción se incluyen los siguientes:

  • Tiene tareas propensas a quedarse bloqueadas en un estado bloqueado.
  • Debe advertir a un ingeniero o ingeniera si se supera un contrato de nivel de servicio para un flujo de trabajo.
  • Para evitar costos inesperados, quiere producir un error en un trabajo configurado con un clúster grande.

Consulte Configuración de un tiempo de finalización esperado o un tiempo de espera para un trabajo y Configuración de una hora de finalización esperada o un tiempo de espera para una tarea.

Simultaneidad

La mayoría de los trabajos se configuran con la simultaneidad predeterminada de un trabajo simultáneo. Esto significa que si una ejecución de trabajo anterior no se ha completado en el momento en que se debe desencadenar un nuevo trabajo, se omite la siguiente ejecución del trabajo.

Algunos casos de uso existen para aumentar la simultaneidad, pero la mayoría de las cargas de trabajo no requieren modificar esta configuración.

Para obtener más información sobre cómo configurar la simultaneidad, consulte Databricks Jobs queueing and concurrency settings (Configuración de colas y simultaneidad de trabajos de Databricks).

¿Cómo puedo supervisar los trabajos?

La interfaz de usuario de trabajos le permite ver las ejecuciones de trabajos, incluidas las ejecuciones en curso. Consulte Supervisión y observabilidad de los trabajos de Databricks.

Puede recibir notificaciones cuando se inicia un trabajo o tarea, se completa o se produce un error. Puede enviar notificaciones a una o varias direcciones de correo electrónico o destinos del sistema. Consulte Adición de notificaciones por correo electrónico y sistema para eventos de trabajo.

Las tablas del sistema incluyen un esquema de lakeflow en el que puede ver registros relacionados con la actividad del trabajo en su cuenta. Vea Referencia de la tabla del sistema de trabajos.

También puede unir las tablas del sistema de trabajos con tablas de facturación para supervisar el costo de los trabajos en toda la cuenta. Vea Supervisar los costos de trabajo con tablas del sistema.

Limitaciones

Existen las siguientes limitaciones:

  • Un área de trabajo está limitada a 2000 ejecuciones de tareas simultáneas. Se devuelve una respuesta 429 Too Many Requests cuando se solicita una ejecución que no se puede iniciar inmediatamente.
  • El número de trabajos que puede crear un área de trabajo en una hora está limitado a 10000 (incluye "envío de ejecuciones"). Este límite también afecta a los trabajos creados por los flujos de trabajo de la API REST y del cuaderno.
  • Un área de trabajo puede contener hasta 12 000 trabajos guardados.
  • Un trabajo puede contener hasta 100 tareas.

¿Puedo administrar flujos de trabajo mediante programación?

Databricks tiene herramientas y API que permiten programar y orquestar los flujos de trabajo mediante programación, incluidos los siguientes:

Para obtener más información sobre las herramientas de desarrollo, consulte Herramientas de desarrollo.

Orquestación de flujos de trabajo con Apache AirFlow

Puede usar Apache Airflow para administrar y programar los flujos de trabajo de datos. Con Airflow, define el flujo de trabajo en un archivo de Python y Airflow administra la programación y la ejecución del flujo de trabajo. Consulte Orquestación de trabajos de Azure Databricks con Apache Airflow.

Orquestación de flujos de trabajo con Azure Data Factory

Azure Data Factory (ADF) es un servicio de integración de datos en la nube que permite componer servicios de almacenamiento, traslado y procesamiento de datos en canalizaciones de datos automatizadas. Puede usar ADF para organizar un trabajo de Azure Databricks como parte de una canalización de ADF.

ADF también tiene compatibilidad integrada para ejecutar cuadernos de Databricks, scripts de Python o código empaquetado en JAR en una canalización de ADF.

Para obtener información sobre cómo ejecutar un cuaderno de Databricks en una canalización de ADF, consulte Ejecución de un cuaderno de Databricks con la actividad del cuaderno de Databricks en Azure Data Factory, seguido de Transformación de datos mediante la ejecución de un cuaderno de Databricks.

Para obtener información sobre cómo ejecutar un script de Python en una canalización de ADF, consulte Transformación de datos mediante la ejecución de una actividad de Python en Azure Databricks.

Para más información sobre cómo ejecutar código empaquetado en un archivo JAR en una canalización de ADF, consulte Transformación de datos mediante la ejecución de una actividad JAR en Azure Databricks.