Supervisa y soluciona problemas de las cargas de trabajo por lotes de Dataproc Serverless

En este documento, se describe cómo supervisar y solucionar problemas de Dataproc Serverless para cargas de trabajo por lotes de Spark con la IU de Spark.

IU de Spark

La IU de Spark recopila detalles de ejecución de Apache Spark de Dataproc sin servidores para cargas de trabajo por lotes de Spark. No se aplican cargos por la función de la IU de Spark, que está habilitada de forma predeterminada.

Los datos recopilados por la función de la IU de Spark se retienen durante 90 días. Puedes usar esta interfaz web para supervisar y depurar cargas de trabajo de Spark sin tener que crear un servidor de historial persistente.

Permisos y roles necesarios de Identity and Access Management

Se requieren los siguientes permisos para usar la función de la IU de Spark con cargas de trabajo por lotes.

  • Permiso de recopilación de datos: dataproc.batches.sparkApplicationWrite. Este permiso se debe otorgar a la cuenta de servicio que ejecuta cargas de trabajo por lotes. Este permiso se incluye en el rol Dataproc Worker, que se otorga automáticamente a la cuenta de servicio predeterminada de Compute Engine que usa Dataproc Serverless de forma predeterminada (consulta Cuenta de servicio de Dataproc Serverless). Sin embargo, si especificas una cuenta de servicio personalizada para tu carga de trabajo por lotes, debes agregar el permiso dataproc.batches.sparkApplicationWrite a esa cuenta de servicio (por lo general, otorgándole a la cuenta de servicio el rol Worker de Dataproc).

  • Permiso de acceso a la IU de Spark: dataproc.batches.sparkApplicationRead. Se debe otorgar este permiso a un usuario para que acceda a la IU de Spark en la consola de Google Cloud. Este permiso se incluye en los roles Dataproc Viewer, Dataproc Editor y Dataproc Administrator. Para abrir la IU de Spark en la consola de Google Cloud, debes tener uno de estos roles o un rol personalizado que incluya este permiso.

Abre la IU de Spark.

La página de la IU de Spark está disponible en la consola de Google Cloud para las cargas de trabajo por lotes de Spark.

  1. Ve a la página Sesiones interactivas sin servidor de Dataproc.

    Ir a Lotes de Dataproc

  2. Haz clic en un ID de lote para abrir la página de detalles del lote.

  3. Haz clic en Ver IU de Spark en el menú de la parte superior.

El botón Ver IU de Spark está inhabilitado en los siguientes casos:

Limitaciones

La IU de Spark no admite las siguientes cargas de trabajo de Dataproc sin servidores:

Servidor de historial persistente

Dataproc Serverless para Spark crea los recursos de procesamiento necesarios para ejecutar una carga de trabajo, la ejecuta en esos recursos y, luego, borra los recursos cuando esta finaliza. Las métricas y los eventos de la carga de trabajo no persisten después de que se completa. Sin embargo, puedes usar un servidor de historial persistente (PHS) para conservar el historial de la aplicación de la carga de trabajo (registros de eventos) en Cloud Storage.

Para usar un PHS con una carga de trabajo por lotes, haz lo siguiente:

  1. Crea un servidor de historial persistente (PHS) de Dataproc.

  2. Especifica tu PHS cuando envíes una carga de trabajo.

  3. Usa la Puerta de enlace de componentes para conectarte a la PHS y ver los detalles de la aplicación, las etapas del programador, los detalles a nivel de la tarea y la información del entorno y el ejecutor.

Registros de Dataproc Serverless para Spark

El registro está habilitado de forma predeterminada en Dataproc Serverless para Spark, y los registros de la carga de trabajo persisten después de que esta finaliza. Dataproc Serverless para Spark recopila registros de cargas de trabajo en Cloud Logging. Puedes acceder a los registros de Dataproc Serverless para Spark en el recurso Cloud Dataproc Batch del Explorador de registros.

Consulta los registros de Dataproc Serverless para Spark

El Explorador de registros de la consola de Google Cloud proporciona un panel de consulta para ayudarte a crear una consulta que examine los registros de cargas de trabajo por lotes. Estos son los pasos que puedes seguir para crear una consulta que examine los registros de la carga de trabajo por lotes:

  1. Ir al Explorador de registros

  2. Se selecciona tu proyecto actual. Puedes hacer clic en Definir mejor el proyecto para seleccionar un proyecto diferente.
  3. Define una consulta de registros por lotes.

    • Usa los menús de filtros para filtrar una carga de trabajo por lotes.

      1. En Todos los recursos, selecciona el recurso Cloud Dataproc Batch.

        1. En el panel Seleccionar recurso, selecciona la UBICACIÓN del lote y, luego, el ID del lote. Estos parámetros de lotes se enumeran en la página Lots de Dataproc en la consola de Google Cloud.

        2. Haz clic en Aplicar.

        3. En Seleccionar nombres de registro, ingresa dataproc.googleapis.com en el cuadro Buscar nombres de registro para limitar los tipos de registro que se consultarán. Selecciona uno o más de los nombres de archivo de registro que aparecen en la lista.

    • Usa el editor de consultas para filtrar registros específicos de la VM.

      1. Especifica el tipo de recurso y el nombre del recurso de VM como se muestra en el siguiente ejemplo:

        resource.type="cloud_dataproc_batch"
        labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
        
        Notas:

        • BATCH_UUID: El UUID del lote aparece en la página Detalles del lote de la consola de Google Cloud, que se abre cuando haces clic en el ID del lote en la página Lots.

        Los registros por lotes también muestran el UUID del lote en el nombre del recurso de la VM. Este es un ejemplo de un archivo driver.log por lotes:

  4. Haz clic en Ejecutar consulta.

Tipos de registros y consultas de muestra de Dataproc Serverless para Spark

En la siguiente lista, se describen los diferentes tipos de registros de Dataproc sin servidores y se proporcionan consultas de muestra del Explorador de registros para cada tipo de registro.

  1. dataproc.googleapis.com/output: Este archivo de registro contiene el resultado de la carga de trabajo por lotes. Dataproc Serverless para Spark transmite el resultado por lotes al espacio de nombres output y establece el nombre de archivo en JOB_ID.driver.log.

    Consulta de muestra del Explorador de registros para registros de salida:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Foutput"
    

  2. dataproc.googleapis.com/spark: El espacio de nombres spark agrega registros de Spark para los demonios y ejecutores que se ejecutan en las VMs principales y de trabajo del clúster de Dataproc. Cada entrada de registro incluye una etiqueta de componente master, worker o executor para identificar la fuente de registro, como se indica a continuación:

    • executor: Registros de los ejecutores de código del usuario. Por lo general, estos son registros distribuidos.
    • master: Son registros del administrador de recursos independiente de Spark, que son similares a los registros ResourceManager de YARN de Dataproc en Compute Engine.
    • worker: Son registros del trabajador del administrador de recursos independiente de Spark, que son similares a los registros NodeManager de YARN de Dataproc en Compute Engine.

    Ejemplo de consulta del Explorador de registros para todos los registros del espacio de nombres spark:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    

    Ejemplo de consulta del Explorador de registros para registros de componentes independientes de Spark en el espacio de nombres spark:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fspark"
    jsonPayload.component="COMPONENT"
    

  3. dataproc.googleapis.com/startup: El espacio de nombres startup incluye los registros de inicio por lotes (clúster). Se incluyen todos los registros de la secuencia de comandos de inicialización. Los componentes se identifican por etiqueta, por ejemplo:

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    Consulta de muestra del Explorador de registros para los registros de inicio de una VM especificada:
    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fstartup"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCH_UUID-VM_SUFFIX"
    
  4. dataproc.googleapis.com/agent: El espacio de nombres agent agrega los registros del agente de Dataproc. Cada entrada de registro incluye la etiqueta del nombre de archivo que identifica la fuente del registro.

    Ejemplo de consulta del Explorador de registros para los registros de agentes generados por una VM de trabajador especificada:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fagent"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

  5. dataproc.googleapis.com/autoscaler: El espacio de nombres autoscaler agrega los registros del escalador automático de Dataproc Serverless para Spark.

    Ejemplo de consulta del Explorador de registros para los registros de agentes generados por una VM de trabajador especificada:

    resource.type="cloud_dataproc_batch"
    resource.labels.location="REGION"
    resource.labels.batch_id="BATCH_ID"
    logName="projects/PROJECT_ID/logs/dataproc.googleapis.com%2Fautoscaler"
    labels."dataproc.googleapis.com/resource_name"="gdpic-srvls-batch-BATCHUUID-wWORKER#"
    

Para obtener más información, consulta Registros de Dataproc.

Registros de auditoría de Dataproc sin servidores

Si quieres obtener información sobre los registros de auditoría de Dataproc Serverless, consulta Registro de auditoría de Dataproc.

Métricas de cargas de trabajo

De forma predeterminada, Dataproc Serverless para Spark habilita la recopilación de métricas de Spark disponibles, a menos que uses propiedades de recopilación de métricas de Spark para inhabilitar o anular la recopilación de una o más métricas de Spark.

Puedes ver las métricas de la carga de trabajo desde el Explorador de métricas o la página Detalles del lote en la consola de Google Cloud.

Métricas por lotes

Las métricas de recursos batch de Dataproc proporcionan estadísticas sobre los recursos por lotes, como la cantidad de ejecutores por lotes. Las métricas de lotes tienen el prefijo dataproc.googleapis.com/batch.

Ejemplo de métrica por lotes en el Explorador de métricas.

Métricas de Spark

Las métricas de Spark disponibles incluyen las métricas del controlador y el ejecutor de Spark, y las métricas del sistema. Las métricas de Spark disponibles tienen el prefijo custom.googleapis.com/.

Ejemplo de métrica de Spark en el Explorador de métricas.

Configura alertas de métricas

Puedes crear alertas de métricas de Dataproc para recibir notificaciones sobre problemas de carga de trabajo.

Crea gráficos

Puedes crear gráficos que visualicen las métricas de carga de trabajo con el Explorador de métricas en la consola de Google Cloud. Por ejemplo, puedes crear un gráfico para mostrar disk:bytes_used y, luego, filtrar por batch_id.

Cloud Monitoring

La supervisión usa metadatos y métricas de cargas de trabajo para proporcionar estadísticas sobre el estado y el rendimiento de Dataproc sin servidores para cargas de trabajo de Spark. Las métricas de carga de trabajo incluyen métricas de Spark, métricas por lotes y métricas de operación.

Puedes usar Cloud Monitoring en la consola de Google Cloud para explorar métricas, agregar gráficos, crear paneles y alertas.

Crea paneles

Puedes crear un panel para supervisar cargas de trabajo con métricas de varios proyectos y diferentes productos de Google Cloud. Para obtener más información, consulta Crea y administra paneles personalizados.

Solución avanzada de problemas (versión preliminar)

En esta sección, se describen las funciones avanzadas de solución de problemas (versión preliminar) que están disponibles en la consola de Google Cloud. Estas funciones incluyen la solución de problemas asistida por Gemini para Dataproc Serverless, que forma parte de la oferta de Gemini en BigQuery.

Acceso a las funciones de versión preliminar

Para registrarte en la versión preliminar de las funciones avanzadas de solución de problemas, completa y envía el formulario de registro en la fase previa a la DG de Gemini en BigQuery. Una vez que se apruebe el formulario, los proyectos que se enumeren en él tendrán acceso a las funciones en versión preliminar.

Vista previa de los precios

No se cobra ningún cargo adicional por participar en la vista previa. Se aplicarán cargos a las siguientes funciones de versión preliminar cuando tengan disponibilidad general (DG):

El aviso anticipado de los cargos de GA se enviará a la dirección de correo electrónico que proporciones en el formulario de registro de la versión preliminar.

Requisitos sobre las características

  • Registro: Debes registrarte para usar la función.

  • Permiso: Debes tener el permiso dataproc.batches.analyze.

    gcloud iam roles update CUSTOM_ROLE_ID --project=PROJECT_ID \
    --add-permissions="dataproc.batches.analyze"
    
  • Habilita la solución de problemas asistida por Gemini para Dataproc sin servidores: Habilitas la solución de problemas asistida por Gemini para Dataproc sin servidores cuando envías cada carga de trabajo por lotes recurrente de Spark con la consola de Google Cloud, gcloud CLI o la API de Dataproc. Una vez que se habilita esta función en una carga de trabajo por lotes recurrente, Dataproc almacena una copia de los registros de la carga de trabajo durante 30 días y usa los datos de registro guardados para proporcionar una solución de problemas asistida por Gemini para la carga de trabajo. Para obtener información sobre el contenido de los registros de cargas de trabajo de Spark, consulta Registros de Dataproc Serverless para Spark.

Console

Sigue estos pasos para habilitar la solución de problemas asistida por Gemini en cada carga de trabajo por lotes recurrente de Spark:

  1. En la consola de Google Cloud, ve a la página Lotes de Dataproc.

    Ir a Lotes de Dataproc

  2. Para crear una carga de trabajo por lotes, haz clic en Crear.

  3. En la sección Contenedor, completa el nombre de la Cohorda, que identifica el lote como una de una serie de cargas de trabajo recurrentes. El análisis asistido por Gemini se aplica a la segunda carga de trabajo y a las posteriores que se envían con este nombre de cohorte. Por ejemplo, especifica TPCH-Query1 como el nombre de la cohorte para una carga de trabajo programada que ejecuta una consulta TPC-H diaria.

  4. Completa otras secciones de la página Crear lote según sea necesario y, luego, haz clic en Enviar. Para obtener más información, consulta Cómo enviar una carga de trabajo por lotes.

gcloud

Ejecuta el siguiente comando gcloud dataproc batches submit de gcloud CLI de forma local en una ventana de la terminal o en Cloud Shell para habilitar la solución de problemas asistida por Gemini en cada carga de trabajo por lotes recurrente de Spark:

gcloud dataproc batches submit COMMAND \
    --region=REGION \
    --cohort=COHORT \
    other arguments ...

Reemplaza lo siguiente:

  • COMMAND: Es el tipo de carga de trabajo de Spark, como Spark, PySpark, Spark-Sql o Spark-R.
  • REGION: Es la región en la que se ejecutará tu carga de trabajo.
  • COHORT: Es el nombre de la cohorte, que identifica el lote como una de una serie de cargas de trabajo recurrentes. El análisis asistido por Gemini se aplica a la segunda carga de trabajo y a las posteriores que se envían con este nombre de cohorte. Por ejemplo, especifica TPCH Query 1 como el nombre de la cohorte para una carga de trabajo programada que ejecuta una consulta TPC-H diaria.

API

Incluye el nombre RuntimeConfig.cohort en una solicitud batches.create para habilitar la solución de problemas asistida por Gemini en cada carga de trabajo de lote recurrente de Spark. El análisis asistido por Gemini se aplica a la segunda carga de trabajo y a las posteriores que se envíen con este nombre de cohorte. Por ejemplo, especifica TPCH-Query1 como el nombre de la cohorte para una carga de trabajo programada que ejecuta una consulta TPC-H diaria.

Ejemplo:

...
runtimeConfig:
  cohort: TPCH-Query1
...

Solución de problemas asistida por Gemini para Dataproc Serverless

Las siguientes funciones de vista previa de solución de problemas asistidas por Gemini están disponibles en las páginas de lista Detalles del lote y Lots de la consola de Google Cloud.

  • Pestaña Investigar: La pestaña Investigar en la página Detalles del lote proporciona una sección Resumen de estado (versión preliminar) con los siguientes paneles de solución de problemas asistidos por Gemini:

    • ¿Qué recibió Autotune? Si habilitaste el ajuste automático en una o más cargas de trabajo, este panel muestra los cambios de ajuste automático más recientes que se aplicaron a las cargas de trabajo en ejecución, completadas y con errores.

    Panel de investigación de ajuste automático.

    • ¿Qué está pasando ahora? y ¿Qué puedo hacer al respecto? Haz clic en Preguntarle a Gemini para solicitar recomendaciones que te ayuden a corregir cargas de trabajo fallidas o mejorar las cargas de trabajo correctas, pero lentas.

    Botón Preguntarle a Gemini.

    Si haces clic en Ask Gemini, Gemini para Google Cloud generará un resumen de los errores, las anomalías o los aspectos destacados de los registros de cargas de trabajo, las métricas de Spark y los eventos de Spark. Gemini para Google Cloud también puede mostrar una lista de pasos recomendados que puedes seguir para corregir una carga de trabajo que falló o mejorar el rendimiento de una carga de trabajo correcta, pero lenta.

    Estadísticas generadas por Gemini para Google Cloud.

  • Columnas de solución de problemas asistidas por Gemini: Como parte de la versión preliminar, la página de la lista Lotes de Dataproc en la consola de Google Cloud incluye las columnas What was Autotuned, What is happening now? y What can I do about it?.

    Los lotes enumeran las columnas de Gemini.

    El botón Ask Gemini se muestra y habilita solo si un lote completado está en un estado Failed, Cancelled o Succeeded. Si haces clic en Ask Gemini, Gemini para Google Cloud genera un resumen de los errores, las anomalías o los aspectos destacados de los registros de cargas de trabajo, las métricas de Spark y los eventos de Spark. Gemini para Google Cloud también puede mostrar una lista de pasos recomendados que puedes seguir para corregir una carga de trabajo que falló o mejorar el rendimiento de una carga de trabajo correcta, pero lenta.

Aspectos destacados de las métricas de lotes

Como parte de la versión preliminar, la página Detalles del lote en la consola de Google Cloud incluye gráficos que muestran valores importantes de las métricas de la carga de trabajo por lotes. Los gráficos de métricas se completan con valores después de que se completa el lote.

Panel de métricas por lotes

Tabla de métricas

En la siguiente tabla, se enumeran las métricas de la carga de trabajo de Spark que se muestran en la página Detalles del lote de la consola de Google Cloud y se describe cómo los valores de las métricas pueden proporcionar estadísticas sobre el estado y el rendimiento de la carga de trabajo.

Métrica ¿Qué muestra?
Métricas a nivel del ejecutor
Relación del tiempo de GC de JVM con el tiempo de ejecución Esta métrica muestra la proporción del tiempo de GC (recolección de elementos no utilizados) de JVM al tiempo de ejecución por ejecutor. Las proporciones altas pueden indicar fugas de memoria dentro de tareas que se ejecutan en ejecutores particulares o estructuras de datos ineficientes, lo que puede generar una alta deserción de objetos.
Bytes volcados al disco Esta métrica muestra la cantidad total de bytes de disco derramados en diferentes ejecutores. Si un ejecutor muestra una gran cantidad de bytes de disco derramados, esto puede indicar un sesgo de datos. Si la métrica aumenta con el tiempo, esto puede indicar que hay etapas con presión de memoria o fugas de memoria.
Bytes leídos y escritos Esta métrica muestra los bytes escritos en comparación con los bytes leídos por ejecutor. Las discrepancias importantes en los bytes leídos o escritos pueden indicar situaciones en las que las uniones replicadas generan una amplificación de datos en ejecutores específicos.
Registros leídos y escritos Esta métrica muestra los registros leídos y escritos por ejecutor. Una gran cantidad de registros leídos con una baja cantidad de registros escritos puede indicar un cuello de botella en la lógica de procesamiento en ejecutores específicos, lo que genera que se lean registros mientras se espera. Los ejecutores que tienen retrasos constantes en las operaciones de lectura y escritura pueden indicar una contención de recursos en esos nodos o ineficiencias de código específicas del ejecutor.
Razón entre el tiempo de escritura aleatoria y el tiempo de ejecución La métrica muestra la cantidad de tiempo que el ejecutor pasó en el tiempo de ejecución de shuffle en comparación con el tiempo de ejecución general. Si este valor es alto para algunos ejecutores, puede indicar un sesgo de datos o una serialización de datos ineficiente. Puedes identificar etapas con tiempos de escritura de shuffle largos en la IU de Spark. Busca tareas anómalas dentro de esas etapas que demoren más que el tiempo promedio en completarse. Verifica si los ejecutores con tiempos de escritura de shuffle altos también muestran una actividad de E/S de disco alta. Una serialización más eficiente y pasos de particionamiento adicionales podrían ser útiles. Las operaciones de escritura de registros muy grandes en comparación con las operaciones de lectura de registros pueden indicar una duplicación de datos no deseada debido a uniones ineficientes o a transformaciones incorrectas.
Métricas a nivel de la aplicación
Avance entre etapas Esta métrica muestra la cantidad de etapas en las fases de error, espera y ejecución. Una gran cantidad de etapas fallidas o en espera puede indicar un sesgo de datos. Verifica si hay particiones de datos y depura el motivo de la falla de la etapa con la pestaña Etapas en la IU de Spark.
Ejecutores de Spark por lotes Esta métrica muestra la cantidad de ejecutores que podrían ser necesarios en comparación con la cantidad de ejecutores en ejecución. Una gran diferencia entre los ejecutores requeridos y los ejecutores en ejecución puede indicar problemas de ajuste de escala automático.
Métricas a nivel de la VM
Memoria usada Esta métrica muestra el porcentaje de memoria de la VM en uso. Si el porcentaje principal es alto, puede indicar que el controlador está bajo presión de memoria. En el caso de otros nodos de VM, un porcentaje alto puede indicar que los ejecutores se están quedando sin memoria, lo que puede provocar un alto desbordamiento de disco y un tiempo de ejecución de la carga de trabajo más lento. Usa la IU de Spark para analizar los ejecutores y verificar si hay un tiempo de GC alto y fallas de tareas altas. También depura el código de Spark para la caché de conjuntos de datos grandes y la transmisión innecesaria de variables.

Registros del trabajo

Como parte de la versión preliminar, la página Detalles de lotes de la consola de Google Cloud muestra los registros de trabajo (carga de trabajo por lotes). Los registros incluyen advertencias y errores filtrados de los resultados de la carga de trabajo y los registros de Spark. Puedes seleccionar la Gravedad del registro, agregar un Filtro y, luego, hacer clic en el ícono Ver en el Explorador de registros para abrir los registros por lotes seleccionados en el Explorador de registros.

Ejemplo: El Explorador de registros se abre después de elegir Errors en el selector de gravedad en la página Detalles del lote de la consola de Google Cloud.

Explorador de registros por lotes.