Monitorizar y solucionar problemas de cargas de trabajo por lotes

En este documento se describen las herramientas y los archivos que puedes usar para monitorizar y solucionar problemas de las cargas de trabajo por lotes de Serverless para Apache Spark.

Solucionar problemas de cargas de trabajo desde la consola Google Cloud

Cuando un trabajo por lotes falla o tiene un rendimiento deficiente, el primer paso recomendado es abrir su página Detalles del lote desde la página Lotes de la consola de Google Cloud .

Usar la pestaña Resumen: tu centro de asistencia

La pestaña Resumen, que está seleccionada de forma predeterminada cuando se abre la página Detalles del lote, muestra métricas críticas y registros filtrados para ayudarte a hacer una evaluación inicial rápida del estado del lote. Después de esta evaluación inicial, puedes hacer un análisis más detallado con las herramientas especializadas disponibles en la página Detalles del lote, como la interfaz de usuario de Spark, el Explorador de registros y Gemini Cloud Assist.

Aspectos destacados de las métricas de lote

La pestaña Resumen de la página Detalles del lote incluye gráficos que muestran valores importantes de métricas de carga de trabajo por lotes. Los gráficos de métricas se rellenan una vez que se completa el proceso y ofrecen una indicación visual de posibles problemas, como la contención de recursos, la asimetría de datos o la presión de la memoria.

Panel de control de métricas de lote.

Tabla de métricas

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

Métrica ¿Qué muestra?
Métricas a nivel de ejecutor
Proporción del tiempo de recolección de elementos no utilizados de JVM respecto al tiempo de ejecución Esta métrica muestra la proporción del tiempo de recolección de elementos no utilizados de JVM con respecto al tiempo de ejecución por ejecutor. Los ratios altos pueden indicar fugas de memoria en las tareas que se ejecutan en determinados ejecutores o estructuras de datos ineficientes, lo que puede provocar una alta rotación de objetos.
Bytes de disco derramados Esta métrica muestra el número total de bytes de disco que se han derramado en diferentes ejecutores. Si un ejecutor muestra un alto número de bytes de disco derramados, puede indicar un sesgo de datos. Si la métrica aumenta con el tiempo, puede indicar que hay fases con presión de memoria o fugas de memoria.
Bytes leídos y escritos Esta métrica muestra los bytes escritos frente a los bytes leídos por ejecutor. Las grandes discrepancias en los bytes leídos o escritos pueden indicar situaciones en las que las uniones replicadas provocan una amplificación de los datos en ejecutores específicos.
Registros leídos y escritos Esta métrica muestra los registros leídos y escritos por ejecutor. Si se registran grandes cantidades de lecturas con un número bajo de registros escritos, puede haber un cuello de botella en la lógica de procesamiento de ejecutores específicos, lo que provoca que se lean registros mientras se espera. Los ejecutores que se retrasan constantemente en las lecturas y escrituras pueden indicar una contención de recursos en esos nodos o ineficiencias de código específicas del ejecutor.
Ratio entre el tiempo de escritura aleatoria y el tiempo de ejecución La métrica muestra el tiempo que ha dedicado el ejecutor al tiempo de ejecución de la aleatorización en comparación con el tiempo de ejecución general. Si este valor es alto en algunos ejecutores, puede indicar una asimetría de datos o una serialización de datos ineficiente. Puede identificar las fases con tiempos de escritura de aleatorización largos en la interfaz de usuario de Spark. Busca tareas atípicas en esas fases que tarden más del tiempo medio en completarse. Comprueba si los ejecutores con tiempos de escritura aleatoria elevados también muestran una actividad de E/S de disco alta. Puede que te ayude una serialización más eficiente y pasos de partición adicionales. Si las escrituras de registros son muy grandes en comparación con las lecturas de registros, puede deberse a una duplicación de datos no intencionada debido a combinaciones ineficientes o transformaciones incorrectas.
Métricas a nivel de aplicación
Progreso de fases Esta métrica muestra el número de fases fallidas, en espera y en curso. Un gran número de fases fallidas o en espera puede indicar una asimetría de datos. Comprueba si hay particiones de datos y depura el motivo del fallo de la fase mediante la pestaña Fases de la interfaz de usuario de Spark.
Ejecutores de Spark por lotes Esta métrica muestra el número de ejecutores que podrían ser necesarios en comparación con el número de ejecutores en ejecución. Una gran diferencia entre los ejecutores necesarios y los que están en ejecución puede indicar problemas de escalado automático.
Métricas a nivel de máquina virtual
Memoria usada Esta métrica muestra el porcentaje de memoria de la máquina virtual que se está usando. Si el porcentaje de maestro es alto, puede indicar que el controlador está sometido a una presión de memoria. En otros nodos de VM, un porcentaje alto puede indicar que los ejecutores se están quedando sin memoria, lo que puede provocar un alto nivel de desbordamiento en disco y un tiempo de ejecución de la carga de trabajo más lento. Usa la interfaz de usuario de Spark para analizar los ejecutores y comprobar si hay un tiempo de recolección de elementos no utilizados elevado y un número elevado de errores de tareas. También depura el código de Spark para la caché de conjuntos de datos grandes y la emisión innecesaria de variables.

Registros de tareas

La página Detalles del lote incluye una sección Registros de trabajos que muestra las advertencias y los errores filtrados de los registros de trabajos (cargas de trabajo por lotes). Esta función permite identificar rápidamente los problemas críticos sin tener que analizar manualmente archivos de registro extensos. Puede seleccionar una Gravedad del registro (por ejemplo, Error) en el menú desplegable y añadir un Filtro de texto para acotar los resultados. Para hacer un análisis más detallado, haga clic en el icono Ver en Explorador de registros para abrir los registros del lote seleccionado en Explorador de registros.

Ver registros de lotes en Cloud Logging
Ver registros de lotes en Cloud Logging

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

Explorador de registros por lotes.

Interfaz de Spark

La interfaz de usuario de Spark recoge los detalles de ejecución de Apache Spark de las cargas de trabajo por lotes de Serverless para Apache Spark. La función de interfaz de usuario de Spark no tiene ningún coste y está habilitada de forma predeterminada.

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

Permisos y roles de Gestión de Identidades y Accesos necesarios

Para usar la función de interfaz de usuario de Spark con cargas de trabajo por lotes, se necesitan los siguientes permisos.

  • Permiso de recogida de datos: dataproc.batches.sparkApplicationWrite. Este permiso debe concederse a la cuenta de servicio que ejecuta cargas de trabajo por lotes. Este permiso se incluye en el rol Dataproc Worker, que se concede automáticamente a la cuenta de servicio predeterminada de Compute Engine que usa de forma predeterminada Serverless para Apache Spark (consulta Cuenta de servicio de Serverless para Apache Spark). Sin embargo, si especificas una cuenta de servicio personalizada para tu carga de trabajo por lotes, debes añadir el permiso dataproc.batches.sparkApplicationWrite a esa cuenta de servicio (normalmente, concediendo a la cuenta de servicio el rol Worker de Dataproc).

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

Abrir la interfaz de usuario de Spark

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

  1. Ve a la página Sesiones interactivas de Serverless para Apache Spark.

    Ir a Lotes de Dataproc

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

  3. En el menú superior, haz clic en Ver interfaz de usuario de Spark.

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

Registros de Serverless para Apache Spark

El registro está habilitado de forma predeterminada en Serverless para Apache Spark y los registros de cargas de trabajo se conservan después de que finalice una carga de trabajo. Serverless para Apache Spark recoge los registros de carga de trabajo en Cloud Logging. Puedes acceder a los registros de Serverless para Apache Spark en el recurso Cloud Dataproc Batch del explorador de registros.

Consultar los registros de Serverless para Apache Spark

El Explorador de registros de la Google Cloud consola proporciona un panel de consultas para ayudarte a crear una consulta con la que examinar los registros de cargas de trabajo por lotes. Sigue estos pasos para crear una consulta que examine los registros de carga de trabajo por lotes:

  1. Ir a Explorador de registros

  2. El proyecto actual está seleccionado. Puedes hacer clic en Refinar proyecto para seleccionar otro proyecto.
  3. Define una consulta de registros por lotes.

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

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

        1. En el panel Seleccionar recurso, selecciona el ID DE LOTE del LOTE. Estos parámetros de lote se indican en la página Lotes de Dataproc en la consola de Google Cloud .

        2. Haz clic en Aplicar.

        3. En Seleccionar nombres de registro, introduce dataproc.googleapis.com en el cuadro Buscar nombres de registro para limitar los tipos de registro que se van a consultar. Selecciona uno o varios de los nombres de archivo de registro que aparecen en la lista.

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

      1. Especifica el tipo de recurso y el nombre del recurso de la 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 se indica en la página Detalles del lote de la consola Google Cloud , que se abre al hacer clic en el ID del lote en la página Lotes.

        Los registros de lotes también muestran el UUID del lote en el nombre del recurso de la VM. A continuación, se muestra un ejemplo de un archivo driver.log de un lote:

  4. Haz clic en Realizar una consulta.

Tipos de registros y consultas de ejemplo de Serverless para Apache Spark

En la siguiente lista se describen los diferentes tipos de registros de Serverless para Apache Spark y se proporcionan consultas de ejemplo de Explorador de registros para cada tipo de registro.

  1. dataproc.googleapis.com/output: este archivo de registro contiene la salida de la carga de trabajo por lotes. Sin servidor para Apache Spark envía la salida por lotes al espacio de nombres output y asigna el nombre de archivo JOB_ID.driver.log.

    Consulta de ejemplo 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 los registros de Spark de los daemons y los ejecutores que se ejecutan en las VMs maestras 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 del registro, como se indica a continuación:

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

    Consulta de ejemplo 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"
    

    Consulta de ejemplo del Explorador de registros para los 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 de lote (clúster). Se incluyen los registros de cualquier secuencia de comandos de inicialización. Los componentes se identifican por la etiqueta. Por ejemplo:

    startup-script[855]: ... activate-component-spark[3050]: ... enable spark-worker
    
    Consulta de ejemplo del Explorador de registros para los registros de inicio de una VM específica:
    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 una etiqueta de nombre de archivo que identifica la fuente del registro.

    Consulta de ejemplo del Explorador de registros para los registros de agentes generados por una VM de trabajador específica:

    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 Serverless for Apache Spark.

    Consulta de ejemplo del Explorador de registros para los registros de agentes generados por una VM de trabajador específica:

    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 los registros de Dataproc.

Para obtener información sobre los registros de auditoría de Serverless para Apache Spark, consulta Registros de auditoría de Dataproc.

Métricas de cargas de trabajo

Serverless para Apache Spark proporciona métricas de Spark y de lotes que puedes ver en el explorador de métricas o en la página Detalles del lote de la consola de Google Cloud .

Métricas de lote

Las métricas de recursos de Dataproc batch proporcionan información valiosa sobre los recursos de los lotes, como el número de ejecutores de lotes. Las métricas de lote tienen el prefijo dataproc.googleapis.com/batch.

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

Métricas de Spark

De forma predeterminada, Serverless para Apache Spark habilita la recogida de métricas de Spark disponibles, a menos que uses las propiedades de recogida de métricas de Spark para inhabilitar o anular la recogida de una o varias métricas de Spark.

Las métricas de Spark disponibles incluyen métricas de controladores y ejecutores de Spark, así como 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.

Configurar alertas de métricas

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

Crear gráficos

Puedes crear gráficos que visualicen las métricas de carga de trabajo con el explorador de métricas de laGoogle Cloud consola. Por ejemplo, puede crear un gráfico para mostrar disk:bytes_used y, a continuación, filtrar por batch_id.

Cloud Monitoring

La monitorización usa metadatos y métricas de las cargas de trabajo para proporcionar información valiosa sobre el estado y el rendimiento de las cargas de trabajo de Serverless para Apache Spark. Las métricas de carga de trabajo incluyen métricas de Spark, métricas de lote y métricas de operación.

Puedes usar Cloud Monitoring en la Google Cloud consola para consultar métricas, añadir gráficos, crear paneles de control y crear alertas.

Crear paneles de control

Puedes crear un panel de control para monitorizar cargas de trabajo usando métricas de varios proyectos y diferentes productos Google Cloud . Para obtener más información, consulta el artículo Crear y gestionar paneles personalizados.

Servidor de historial persistente

Serverless para Apache Spark crea los recursos de computación necesarios para ejecutar una carga de trabajo, ejecuta la carga de trabajo en esos recursos y, a continuación, elimina los recursos cuando finaliza la carga de trabajo. Las métricas y los eventos de carga de trabajo no se conservan una vez que se completa una carga de trabajo. Sin embargo, puedes usar un servidor de historial persistente (PHS) para conservar el historial de aplicaciones de cargas 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 Component Gateway para conectarte a PHS y ver los detalles de la aplicación, las fases del programador, los detalles a nivel de tarea y la información del entorno y del ejecutor.

Sintonización automática

  • Habilita la optimización automática en Serverless para Apache Spark: puedes habilitar la optimización automática en Serverless para Apache Spark cuando envíes cada carga de trabajo por lotes de Spark periódica mediante la Google Cloud consola, la CLI de gcloud o la API de Dataproc.

Consola

Sigue estos pasos para habilitar la optimización automática en cada carga de trabajo de Spark por lotes periódica:

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

    Ir a Lotes de Dataproc

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

  3. En la sección Contenedor, indica el nombre del grupo, 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 y a las siguientes cargas de trabajo que se envíen con este nombre de cohorte. Por ejemplo, especifica TPCH-Query1 como nombre de cohorte de una carga de trabajo programada que ejecuta una consulta TPC-H diaria.

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

gcloud

Ejecuta el siguiente comando de gcloud CLI gcloud dataproc batches submit de forma local en una ventana de terminal o en Cloud Shell para habilitar el ajuste automático en cada carga de trabajo de Spark recurrente:

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

Haz los cambios siguientes:

  • COMMAND: el tipo de carga de trabajo de Spark, como Spark, PySpark, Spark-Sql o Spark-R.
  • REGION: la región en la que se ejecutará tu carga de trabajo.
  • COHORT: 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 y a las siguientes cargas de trabajo que se envíen con este nombre de cohorte. Por ejemplo, especifica TPCH Query 1 como nombre de cohorte de una carga de trabajo programada que ejecuta una consulta TPC-H diaria.

API

Incluye el RuntimeConfig.cohort nombre en una solicitud batches.create para habilitar la optimización automática en cada carga de trabajo de Spark por lotes periódica. El ajuste automático se aplica a la segunda y las siguientes cargas de trabajo enviadas con este nombre de cohorte. Por ejemplo, especifica TPCH-Query1 como nombre de cohorte para una carga de trabajo programada que ejecute una consulta de TPC-H diaria.

Ejemplo:

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