Trabajos

Un trabajo es una manera no interactiva de ejecutar una aplicación en un clúster de Azure Databricks, por ejemplo, un trabajo ETL o una tarea de análisis de datos que desea ejecutar inmediatamente o de forma programada. También puede ejecutar trabajos de forma interactiva en la interfaz de usuario del cuaderno.

Puede crear y ejecutar un trabajo mediante la interfaz de usuario, la CLI e invocar la API jobs. Puede supervisar los resultados de la ejecución de trabajos en la interfaz de usuario, mediante la CLI, consultando la API y alertas por correo electrónico. Este artículo se centra en realizar tareas de trabajo mediante la interfaz de usuario. Para los demás métodos, consulte LA CLI de trabajos y La API de trabajos.

Importante

  • Un área de trabajo está limitada a 1000 ejecuciones de trabajos simultáneas. Se 429 Too Many Requests devuelve una respuesta cuando se solicita una ejecución que no se puede iniciar inmediatamente.
  • El número de trabajos que un área de trabajo puede crear en una hora se limita a 5000 (incluye "ejecutar ahora" y "se envían ejecuciones"). Este límite también afecta a los trabajos creados por los flujos de trabajo de la API REST y del cuaderno.

Visualización de trabajos

Haga clic  en Jobs Icon Jobs (Trabajos de icono de trabajos) en la barra lateral. Se muestra la lista Trabajos. En la página Trabajos se enumeran todos los trabajos definidos, la definición del clúster, la programación si la hay y el resultado de la última ejecución.

Puede filtrar trabajos en la lista Trabajos:

  • Uso de palabras clave.
  • Seleccionar solo los trabajos que posee.
  • Seleccionar todos los trabajos a los que tiene permisos de acceso. El acceso a este filtro requiere que el control de acceso Trabajos esté habilitado.

También puede hacer clic en cualquier encabezado de columna para ordenar la lista de trabajos (descendente o ascendente) por esa columna. La ordenación predeterminada es por nombre de trabajo en orden ascendente.

Lista de trabajos del área de trabajo de Azure

Creación de un trabajo

  1. Realice una de las siguientes acciones:

    • En la lista Trabajos, haga clic en + Crear trabajo.
    • En la barra lateral, haga clic en el botón Crear y seleccione Trabajo en el menú.

    Se muestra la página de detalles del trabajo.

    Detalles del trabajo

  2. Escriba un nombre para el trabajo en el campo de texto con el texto del marcador de posición Job name .

  3. Use Tipo de ejecución para seleccionar si desea ejecutar el trabajo de forma manual o automática según una programación. Seleccione Manual/ En pausa para ejecutar el trabajo solo cuando se desencadene manualmente o Programado para definir una programación para ejecutar el trabajo. Consulte Programación de un trabajo.

  4. Especifique el tipo de tarea que se ejecutará. En la lista desplegable Tipo, seleccione Notebook, JAR o Spark Submit.

    • Cuaderno

      1. Haga clic en Seleccionar cuaderno.
      2. Use el explorador de archivos para buscar el cuaderno y haga clic en el nombre del cuaderno para resaltarlo.
      3. Haga clic en Confirmar.
    • JAR

      1. Especifique la clase Main. Use el nombre de clase completo de la clase que contiene el método main.
      2. Especifique una o varias bibliotecas dependientes. Una de estas bibliotecas debe contener la clase principal.

      Para obtener más información sobre las tareas JAR, vea Sugerencias de trabajo jar.

    • Envío de Spark

      1. En el cuadro de texto Parámetros, especifique la clase principal, la ruta de acceso al ARCHIVO JAR de la biblioteca y todos los argumentos, con el formato de una matriz JSON de cadenas.

      Importante

      Hay varias limitaciones para las tareas de spark-submit:

      • Solo puede ejecutar tareas de spark-submit en clústeres nuevos.
      • Spark-submit no admite el escalado automático del clúster. Para más información sobre el escalado automático, consulte Escalado automático de clústeres.
      • Spark-submit no admite Utilidades de Databricks. Para usar utilidades de Databricks, use tareas JAR en su lugar.
      • Para obtener más información sobre los parámetros que se pueden pasar a una tarea spark-submit, vea SparkSubmitTask.
  5. Configure el clúster para ejecutar la tarea. En la lista desplegable Clúster, seleccione Nuevo clúster de trabajos o Clúster de All-Purpose existente.

    • Nuevo clúster de trabajos: haga clic en Editar en la lista desplegable Clúster y complete la configuración del clúster.
    • Clúster de All-Purpose existente: seleccione un clúster existente en la lista desplegable Clúster. Para abrir el clúster en una nueva página, haga clic en el icono Vínculo externo situado a la derecha del nombre y la  descripción del clúster.

    Para más información sobre cómo seleccionar y configurar clústeres para ejecutar tareas, consulte Sugerencias de configuración de clúster.

  6. Puede pasar parámetros a todos los tipos de tareas, pero la forma de dar formato y pasar los parámetros depende del tipo de tarea.

    • Tareas del cuaderno: haga clic en Agregar y especifique la clave y el valor de cada parámetro que se pasará a la tarea. Puede invalidar o agregar parámetros adicionales al ejecutar manualmente una tarea con Ejecutar ahora con parámetros adicionales. Los parámetros establecen el valor del widget de cuaderno especificado por la clave del parámetro. Use variables de parámetro Task para pasar un conjunto limitado de valores dinámicos como parte de un valor de parámetro.
    • Tareas JAR: use una matriz de cadenas con formato JSON para especificar parámetros. Estas cadenas se pasan como argumentos al método main de la clase main. Consulte Configuración de parámetros de trabajo JAR
    • Tarea De envío de Spark: los parámetros se especifican como una matriz de cadenas con formato JSON. Conforme a la convención Apache Spark spark-submit, los parámetros después de la ruta de acceso JAR se pasan al método main de la clase main.
  7. Para permitir opcionalmente varias ejecuciones simultáneas del mismo trabajo, escriba un nuevo valor para Máximo de ejecuciones simultáneas. Consulte Máximo de ejecuciones simultáneas.

  8. Opcionalmente, especifique direcciones de correo electrónico para recibir alertas de correo electrónico en eventos de trabajo. Vea Alertas.

  9. Para acceder a opciones adicionales, como Bibliotecas dependientes, Directiva de reintentos y Tiempos de espera, haga clic en el icono de puntos suspensivos verticales trabajos en la esquina superior derecha de la tarjeta de  tareas. Vea Opciones de configuración de tareas.

  10. Cuando haya terminado de configurar el trabajo, haga clic en el botón Crear para crear el nuevo trabajo.

Ejecución de un trabajo

Seleccione un trabajo y haga clic en la pestaña Ejecuciones. Puede ejecutar un trabajo inmediatamente o programar el trabajo para que se ejecute más adelante.

Ejecución inmediata de un trabajo

Para ejecutar el trabajo inmediatamente, haga clic en el botón Ejecutar ahora situado junto al nombre del trabajo.

Ejecutar ahora

Sugerencia

Puede realizar una ejecución de prueba de un trabajo con una tarea de cuaderno haciendo clic en Ejecutar ahora. Si necesita realizar cambios en el cuaderno, al hacer clic en Ejecutar ahora de nuevo después de editar el cuaderno, se ejecutará automáticamente la nueva versión del cuaderno.

Ejecución de un trabajo con parámetros diferentes

Puede usar Ejecutar ahora con parámetros diferentes para volver a ejecutar un trabajo con parámetros diferentes o valores diferentes para los parámetros existentes.

  1. Haga clic en Blue Down Caret (Blue Down Caret) junto a Run Now (Ejecutar ahora) y seleccione Run Now with Different Parameters (Ejecutar ahora con parámetros diferentes) o, en la tabla Ejecuciones activas, haga clic en  Ejecutar ahora con parámetros diferentes. Escriba los nuevos parámetros en función del tipo de tarea.

    • Notebook: puede especificar parámetros como pares de clave-valor o un objeto JSON. Puede usar este cuadro de diálogo para establecer los valores de los widgets:

      Ejecución de cuadernos con parámetros

    • JAR y spark-submit: puede escribir una lista de parámetros o un documento JSON. Los parámetros proporcionados se combinan con los parámetros predeterminados para la ejecución desencadenada. Si elimina claves, se usan los parámetros predeterminados. También puede agregar variables de parámetro Task para la ejecución.

      Establecer parámetros spark-submit

  2. Haga clic en Ejecutar.

Programación de un trabajo

Para definir una programación para el trabajo:

  1. Haga clic en la pestaña Configuración. Establezca Tipo de ejecución en Programado.

    Edición de programación

  2. Especifique el período, la hora de inicio y la zona horaria. Si lo desea, active la casilla Mostrar sintaxis cron para mostrar y editar la programación en Sintaxis cron de Sintaxis cron de Sintaxis de ver.

    Nota

    • Azure Databricks exige un intervalo mínimo de 10 segundos entre las ejecuciones posteriores desencadenadas por la programación de un trabajo, independientemente de la configuración de segundos de la expresión cron.
    • Puede elegir una zona horaria que observe el horario de verano o una hora UTC. Si selecciona una zona que observa el horario de verano, se omitirá un trabajo por hora o puede parecer que no se activa durante una o dos horas cuando comienza o finaliza el horario de verano. Para ejecutar cada hora (hora absoluta), elija una hora UTC.
    • El programador de trabajos, al igual que la interfaz por lotes de Spark, no está pensado para trabajos de baja latencia. Debido a problemas de red o de nube, las ejecuciones de trabajos pueden retrasarse en ocasiones hasta varios minutos. En estas situaciones, los trabajos programados se ejecutarán inmediatamente después de la disponibilidad del servicio.
  3. Haga clic en Save(Guardar).

Pausar y reanudar una programación de trabajo

Para pausar un trabajo, haga clic en la pestaña Configuración. Establezca Tipo de ejecución en Manual/En pausa.

Trabajo programado

Para reanudar una programación de trabajo en pausa, establezca Tipo de ejecución en Programado.

Visualización de ejecuciones de trabajos

En la página Trabajos , haga clic en un nombre de trabajo en la columna Nombre. La pestaña Ejecuciones muestra ejecuciones activas y ejecuciones completadas.

Detalles del trabajo

Puede ver el error estándar, la salida estándar y la salida log4j de una ejecución de trabajo haciendo clic en el vínculo Registros de la columna Spark.

Azure Databricks mantiene un historial de las ejecuciones del trabajo durante un máximo de 60 días. Si necesita conservar las ejecuciones de trabajos, Databricks recomienda exportar los resultados antes de que expiren. Para obtener más información, vea Exportación de resultados de ejecución de trabajos.

Visualización de los detalles de la ejecución del trabajo

La página de detalles de la ejecución del trabajo contiene la salida del trabajo y vínculos a los registros. Puede acceder a los detalles de ejecución del trabajo desde la página Trabajos o la página Proceso.

Detalles de la ejecución del trabajo

Para ver los detalles de la ejecución del trabajo en la página Trabajos, haga clic  en Trabajos Icono de trabajos Trabajos. Haga clic en el vínculo de la ejecución en la columna Ejecutar de la tabla Completado en los últimos 60 días.

Ejecución de trabajos desde trabajos

Para ver los detalles de la ejecución del trabajo en la página Proceso, haga clic  en el icono de proceso Proceso. Haga clic en el vínculo Job Run (Ejecución del trabajo) del trabajo seleccionado en la tabla Clústeres de trabajos.

Ejecución de trabajos desde clústeres

Exportación de los resultados de la ejecución del trabajo

Puede exportar los resultados de la ejecución del cuaderno y los registros de ejecución de trabajos para todos los tipos de trabajo.

Exportación de los resultados de la ejecución del cuaderno

Puede conservar las ejecuciones de trabajos exportando sus resultados. Para las ejecuciones de trabajos de cuaderno, puede exportar un cuaderno representado que se pueda importar más adelante en el área de Azure Databricks trabajo.

  1. En la página de detalles del trabajo, haga clic en un nombre de ejecución de trabajo en la columna Ejecutar .

    Ejecución del trabajo

  2. Haga clic en Exportar a HTML.

    Exportación del resultado de la ejecución

Exportación de registros de ejecución de trabajos

También puede exportar los registros de la ejecución del trabajo. Para automatizar este proceso, puede configurar el trabajo para entregar registros automáticamente a DBFS a través de job API. Para obtener más información, consulte los campos NewCluster y ClusterLogConf en la llamada a job create API.

Edición de un trabajo

Para cambiar la configuración de un trabajo, haga clic en el vínculo nombre del trabajo de la lista Trabajos y, a continuación, haga clic en la pestaña Configuración .

Clonación de un trabajo

Puede crear rápidamente un nuevo trabajo clonando la configuración de un trabajo existente. La clonación de un trabajo crea una copia idéntica del trabajo, excepto el identificador del trabajo. En la página del trabajo, haga clic en Más ... junto al nombre del trabajo y seleccione Clonar en el menú desplegable.

Eliminación de un trabajo

En la página del trabajo, haga clic en Más ... junto al nombre del trabajo y seleccione Eliminar en el menú desplegable.

Opciones de configuración de trabajos

Número máximo de ejecuciones simultáneas

Número máximo de ejecuciones que se pueden ejecutar en paralelo. Al iniciar una nueva ejecución, Azure Databricks omite la ejecución si el trabajo ya ha alcanzado su número máximo de ejecuciones activas. Establezca este valor mayor que el valor predeterminado de 1 para realizar varias ejecuciones del mismo trabajo simultáneamente. Esto resulta útil, por ejemplo, si desencadena el trabajo según una programación frecuente y desea permitir que las ejecuciones consecutivas se superpongan entre sí, o si desea desencadenar varias ejecuciones que difieren en función de sus parámetros de entrada.

Alertas

Alertas de correo electrónico enviadas en caso de error de trabajo, éxito o tiempo de espera. Puede configurar alertas para el inicio del trabajo, el trabajo correcto y el error del trabajo (incluidos los trabajos omitidos), proporcionando varias direcciones de correo electrónico separadas por comas para cada tipo de alerta. También puede rechazar las alertas de ejecuciones de trabajos omitida.

Configuración de alertas de correo electrónico

Integre estas alertas de correo electrónico con sus herramientas de notificación favoritas, entre las que se incluyen:

Control del acceso a los trabajos

El control de acceso al trabajo permite a los propietarios y administradores de trabajos conceder permisos específicos en sus trabajos. Con los controles de acceso al trabajo, los propietarios de trabajos pueden elegir qué otros usuarios o grupos pueden ver los resultados del trabajo. Los propietarios también pueden elegir quién puede administrar las ejecuciones de su trabajo (Ejecutar ahora y Cancelar permisos de ejecución).

Consulte Control de acceso de trabajos para obtener más información.

Opciones de configuración de tareas

Bibliotecas dependientes

Las bibliotecas dependientes se instalarán en el clúster antes de que se ejecute la tarea. Debe establecer todas las dependencias de tarea para asegurarse de que están instaladas antes de que se inicie la ejecución.

Para agregar una biblioteca dependiente, haga clic en el icono de puntos suspensivos verticales Trabajos en la esquina superior  derecha de la tarjeta de tareas. Haga clic en Agregar bibliotecas dependientes para abrir el elegir Agregar biblioteca dependiente. Siga las recomendaciones de Dependencias de biblioteca para especificar dependencias.

Importante

Si ha configurado una biblioteca para que se instale automáticamente en todos los clústeres o selecciona un clúster terminado existente que tenga instaladas bibliotecas, la ejecución del trabajo no espera a que se complete la instalación de la biblioteca. Si un trabajo requiere una biblioteca específica, debe adjuntar la biblioteca al trabajo en el campo Bibliotecas dependientes.

Variables de parámetro de tarea

Puede pasar variables con plantilla a una tarea de trabajo como parte de los parámetros de la tarea. Estas variables se reemplazan por los valores adecuados cuando se ejecuta la tarea de trabajo. Puede usar valores de parámetro de tarea para pasar el contexto sobre una ejecución de trabajo, como el identificador de ejecución o la hora de inicio del trabajo.

Cuando se ejecuta un trabajo, la variable de parámetro de tarea entre llaves dobles se reemplaza y se anexa a un valor de cadena opcional incluido como parte del valor. Por ejemplo, para pasar un parámetro denominado con un valor de para cualquier ejecución MyJobId del identificador de trabajo my-job-6 6, agregue el siguiente parámetro de tarea:

{
  "MyJobID": "my-job-{{job_id}}"
}

El contenido de las llaves dobles no se evalúa como expresiones, por lo que no se pueden realizar operaciones o funciones entre llaves dobles. El espacio en blanco no se quita dentro de las llaves, por lo que {{ job_id }} no se evaluará.

Se admiten las siguientes variables de parámetro de tarea:

Variable Descripción
{{job_id}} Identificador único asignado a un trabajo
{{run_id}} Identificador único asignado a una ejecución de trabajo
{{start_date}} Fecha en que se inició la ejecución de un trabajo. El formato es yyyy-MM-dd en zona horaria UTC.
{{start_time}} Marca de tiempo del inicio de ejecución de la ejecución después de crear y preparar el clúster. El formato es de milisegundos desde la época de UNIX en zona horaria UTC, tal y como devuelve System.currentTimeMillis() .
{{task_retry_count}} Número de reintentos que se han intentado ejecutar una tarea si se produce un error en el primer intento. El valor es 0 para el primer intento y se incrementa con cada reintento.

Puede establecer estas variables con cualquier tarea al crear un trabajo, editarun trabajo o ejecutar un trabajo con parámetros diferentes.

Tiempo de espera

Tiempo máximo de finalización de un trabajo. Si el trabajo no se completa en este tiempo, Azure Databricks establece su estado en "Tiempo de espera".

Reintentos

Directiva que determina cuándo y cuántas veces se reinterio la realización de ejecuciones con errores.

Directiva de reintentos

Nota

Si configura tanto Tiempo de espera como Reintentos, el tiempo de espera se aplica a cada reintento.

Sugerencias de configuración del clúster

La configuración del clúster es una parte importante del traslado de un trabajo a producción. A continuación se proporcionan instrucciones generales sobre cómo elegir y configurar clústeres de trabajos, seguidas de recomendaciones para tipos de trabajo específicos.

Elección del tipo de clúster correcto para el trabajo

  • Los nuevos clústeres de trabajos son clústeres dedicados que se crean e inician al ejecutar un trabajo y finalizan inmediatamente después de que se complete el trabajo. Son ideales para trabajos de nivel de producción o trabajos que son importantes de completar, ya que proporcionan un entorno completamente aislado.
  • Cuando se ejecuta un trabajo en un nuevo clúster de trabajos, el trabajo se trata como una carga de trabajo de ingeniería de datos (trabajo) sujeta a los precios de las cargas de trabajo. Cuando se ejecuta un trabajo en un clúster de uso completo existente, el trabajo se trata como una carga de trabajo de análisis de datos (todos los propósitos) sujeta a los precios de cargas de trabajo de uso completo.
  • Si selecciona un clúster existente finalizado y el propietario del trabajo tiene el permiso Puede reiniciar ,Azure Databricks inicia el clúster cuando el trabajo está programado para ejecutarse.
  • Los clústeres de uso general existentes funcionan mejor para tareas como la actualización de paneles a intervalos regulares.

Uso de un grupo para reducir las horas de inicio del clúster

Para reducir la hora de inicio del nuevo clúster de trabajos, cree un grupo y configure el clúster del trabajo para que use el grupo.

Sugerencias para trabajos de cuadernos

La salida total de celda del cuaderno (la salida combinada de todas las celdas del cuaderno) está sujeta a un límite de tamaño de 20 MB. Además, la salida de celda individual está sujeta a un límite de tamaño de 8 MB. Si la salida total de la celda supera los 20 MB de tamaño, o si la salida de una celda individual es mayor que 8 MB, la ejecución se cancela y se marca como con errores. Si necesita ayuda para buscar celdas que están cerca o más allá del límite, ejecute el cuaderno en un clúster de uso general y use esta técnica de autoguardado de cuadernos.

Sugerencias de trabajo jar

Al ejecutar un trabajo JAR, tenga en cuenta lo siguiente:

Límites de tamaño de salida

Nota

Disponible en Databricks Runtime 6.3 y posteriores.

La salida del trabajo, como la salida del registro emitida a stdout, está sujeta a un límite de tamaño de 20 MB. Si la salida total tiene un tamaño mayor, la ejecución se cancela y se marca como con errores.

Para evitar encontrar este límite, puede evitar que stdout se devuelva desde el controlador a Azure Databricks estableciendo la spark.databricks.driver.disableScalaOutput configuración de Spark en true . De forma predeterminada, el valor de marca es false . La marca controla la salida de celda para los trabajos JAR de Scala y los cuadernos de Scala. Si la marca está habilitada, Spark no devuelve los resultados de la ejecución del trabajo al cliente. La marca no afecta a los datos escritos en los archivos de registro del clúster. Esta marca solo se recomienda para los clústeres de trabajos para trabajos JAR, ya que deshabilitará los resultados del cuaderno.

Uso del compartidoSparkContext

Dado Azure Databricks es un servicio administrado, es posible que algunos cambios de código sean necesarios para asegurarse de que los Apache Spark de trabajo se ejecutan correctamente. Los programas de trabajo JAR deben usar la SparkContext API compartida para obtener SparkContext . Dado Azure Databricks inicializa , se producirá un error SparkContext en los programas que new SparkContext() invocan. Para obtener SparkContext , use solo el objeto compartido creado por SparkContext Azure Databricks:

val goodSparkContext = SparkContext.getOrCreate()
val goodSparkSession = SparkSession.builder().getOrCreate()

También hay varios métodos que debe evitar al usar el compartido SparkContext .

  • No llame a SparkContext.stop().
  • No llame a System.exit(0) ni al final del sc.stop() Main programa. Esto puede provocar un comportamiento indefinido.

Uso try-finally de bloques para la limpieza de trabajos

Considere un archivo JAR que consta de dos partes:

  • jobBody() que contiene la parte principal del trabajo.
  • jobCleanup() que se debe ejecutar después de si esa función se ejecutó correctamente jobBody() o devolvió una excepción.

Por ejemplo, jobBody() puede crear tablas y puede usar para quitar estas jobCleanup() tablas.

La manera segura de asegurarse de que se llama al método de limpieza es colocar un try-finally bloque en el código:

try {
  jobBody()
} finally {
  jobCleanup()
}

No debe intentar limpiar con o el código sys.addShutdownHook(jobCleanup) siguiente:

val cleanupThread = new Thread { override def run = jobCleanup() }
Runtime.getRuntime.addShutdownHook(cleanupThread)

Debido a la forma en que se administra la duración de los contenedores de Spark Azure Databricks, los enlaces de apagado no se ejecutan de forma confiable.

Configuración de parámetros de trabajo JAR

Los parámetros se pasan a trabajos JAR con una matriz de cadenas JSON. Para obtener más información, vea SparkJarTask. Para acceder a estos parámetros, inspeccione la String matriz que se pasa a la main función.

Dependencias de biblioteca

El controlador de Spark tiene determinadas dependencias de biblioteca que no se pueden invalidar. Estas bibliotecas tienen prioridad sobre cualquiera de sus propias bibliotecas que entren en conflicto con ellas.

Para obtener la lista completa de las dependencias de la biblioteca de controladores, ejecute el siguiente comando dentro de un cuaderno conectado a un clúster de la misma versión de Spark (o el clúster con el controlador que desea examinar).

%sh
ls /databricks/jars

Administración de dependencias de biblioteca

Una buena regla general cuando se trabaja con dependencias de biblioteca al crear ARCHIVOS JAR para trabajos es enumerar Spark y Hadoop como provided dependencias. En Maven, agregue Spark o Hadoop como dependencias proporcionadas, como se muestra en el ejemplo siguiente.

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_2.11</artifactId>
  <version>2.3.0</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.apache.hadoop</groupId>
  <artifactId>hadoop-core</artifactId>
  <version>1.2.1</version>
  <scope>provided</scope>
</dependency>

En sbt , agregue Spark y Hadoop según las dependencias proporcionadas, como se muestra en el ejemplo siguiente.

libraryDependencies += "org.apache.spark" %% "spark-core" % "2.3.0" % "provided"
libraryDependencies += "org.apache.hadoop" %% "hadoop-core" % "1.2.1" % "provided"

Sugerencia

Especifique la versión de Scala correcta para las dependencias en función de la versión que esté ejecutando.