Servidor de historial persistente de Dataproc

Descripción general

El servidor de historial persistente (PHS) de Dataproc proporciona interfaces web para ver el historial de los trabajos que se ejecutan en clústeres de Dataproc activos o borrados. Está disponible en la versión de la imagen 1.5 y posteriores de Dataproc, y se ejecuta en un clúster de Dataproc de un solo nodo. Brinda interfaces web a los siguientes archivos y datos:

  • Archivos de historial de trabajos de MapReduce y Spark

  • Archivos de datos del cronograma de la aplicación creados por YARN Timeline Service v2 y almacenados en una instancia de Bigtable

  • Registros de agregación YARN

El servidor de historial persistente accede a los archivos de historial de trabajos de Spark y MapReduce y los archivos de registro YARN escritos en Cloud Storage durante el ciclo de vida de los clústeres de Dataproc.

Crea un clúster de PHS

Puedes ejecutar el siguiente comando de gcloud dataproc clusters create en una terminal local o en Cloud Shell con las siguientes marcas y propiedades de clúster para crear un clúster de nodo único de servidor de historial de Dataproc.

gcloud dataproc clusters create cluster-name \
    --region=region \
    --single-node \
    --enable-component-gateway \
    --properties=properties

Notas:

  • --enable-component-gateway: Es obligatorio para habilitar las interfaces web de la puerta de enlace de componentes en el clúster de PHS.
  • Agrega una o más de las siguientes propiedades de clúster para habilitar el historial de trabajos persistentes y otros registros, y usarlos con el servidor del historial persistente.

    Ejemplo:

    --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history 
    --properties=mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done

    • yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/*/yarn-logs: Agrega esta propiedad para especificar la ubicación de Cloud Storage en la que el PHS accederá a los registros YARN escritos por clústeres de trabajo (consulta Crea clústeres de trabajo). El valor que se muestra usa un carácter comodín "*" para permitir que la PHS coincida con varios directorios en el bucket especificado escrito por diferentes clústeres de trabajo (pero consulta Consideración de la eficiencia: usa comodines de ruta de acceso media).
    • spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history: Agrega esta propiedad para habilitar el historial de trabajo de Spark persistente. Esta propiedad especifica la ubicación en la que la PHS accederá a los registros del historial de trabajos de Spark escritos por los clústeres de trabajos (consulta Crea un clúster de trabajos). El valor que se muestra usa un carácter comodín "*" para permitir que la PHS coincida con varios directorios en el bucket especificado escrito por diferentes clústeres de trabajo (pero consulta Consideración de la eficiencia: usa comodines de ruta de acceso media).

      Nota: En los clústeres de Dataproc 2.0 y superiores, también se deben configurar las siguientes propiedades para habilitar los registros del historial de Spark de PHS (consulta Opciones de configuración del servidor del historial de Spark). El valor spark.history.custom.executor.log.url es un valor literal que contiene {{PLACEHOLDERS}} para las variables que establecerá el servidor del historial persistente. Los usuarios no configuran estas variables; pasa el valor de la propiedad como se muestra.

      --properties=spark:spark.history.custom.executor.log.url.applyIncompleteApplication=false
      --properties=spark:spark.history.custom.executor.log.url={{YARN_LOG_SERVER_URL}}/{{NM_HOST}}:{{NM_PORT}}/{{CONTAINER_ID}}/{{CONTAINER_ID}}/{{USER}}/{{FILE_NAME}}
      
    • mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/*/mapreduce-job-history/done: Agrega esta propiedad para habilitar el historial de trabajos de MapReduce persistente. Esta propiedad especifica la ubicación de Cloud Storage en la que PHS accederá a los registros del historial de trabajos de MapReduce escritos por clústeres de trabajos (consulta Crea un clúster de trabajos). El valor que se muestra usa un carácter comodín "*" para permitir que la PHS coincida con varios directorios en el bucket especificado escrito por diferentes clústeres de trabajo (pero consulta Consideración de la eficiencia: usa comodines de ruta de acceso media).

    • dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id: Después de configurar el servicio Yarn Timeline v2, agrega esta propiedad para usar el clúster de PHS a fin de ver los datos del cronograma en las interfaces web YARN Application Timeline Service V2 y Tez (consulta Interfaces web de la puerta de enlace del componente).

Cree un clúster de trabajo de Dataproc

Puedes ejecutar el siguiente comando en una terminal local o en Cloud Shell para crear un clúster de trabajo de Dataproc que escriba los archivos del historial de trabajos en un servidor de historial persistente (PHS).

gcloud dataproc clusters create cluster-name \
    --region=region \
    --enable-component-gateway \
    --properties=properties
    other args ...

Notas:

  • --enable-component-gateway: Esta marca es necesaria para habilitar las interfaces web de puerta de enlace de componentes en el clúster de trabajo.
  • Agrega una o más de las siguientes propiedades de clúster para configurar ubicaciones de Cloud Storage no predeterminadas relacionadas con PHS y otras propiedades del clúster de trabajo.

    Ejemplo:

    --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/job-cluster-1/spark-job-history 
    --properties=mapred:mapreduce.jobhistory.read-only.dir-pattern=gs://bucket-name/job-cluster-1/mapreduce-job-history/done
    • yarn:yarn.nodemanager.remote-app-log-dir: De forma predeterminada, los registros YARN agregados se habilitan en los clústeres de trabajo de Dataproc y se escriben en el bucket temporal del clúster. Agrega esta propiedad para especificar una ubicación de Cloud Storage diferente en la que el clúster escribirá registros de agregación a fin de acceder al servidor del historial persistente.
      yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/directory-name/yarn-logs
      
    • spark:spark.history.fs.logDirectory y spark:spark.eventLog.dir: De forma predeterminada, los archivos del historial de trabajos de Spark se guardan en el clúster temp bucket en el directorio /spark-job-history. Puedes agregar estas propiedades a fin de especificar diferentes ubicaciones de Cloud Storage para estos archivos. Si se usan ambas propiedades, deben apuntar a directorios en el mismo bucket.
      spark:spark.history.fs.logDirectory=gs://bucket-name/directory-name/spark-job-history,
      spark:spark.eventLog.dir=gs://bucket-name/directory-name/spark-job-history
      
    • mapred:mapreduce.jobhistory.done-dir y mapred:mapreduce.jobhistory.intermediate-done-dir: De forma predeterminada, los archivos de historial de trabajos de MapReduce se guardan en el clúster temp bucket en los directorios /mapreduce-job-history/done y /mapreduce-job-history/intermediate-done. La ubicación intermedia mapreduce.jobhistory.intermediate-done-dir es almacenamiento temporal; los archivos intermedios se mueven a la ubicación mapreduce.jobhistory.done-dir cuando se completa el trabajo de MapReduce. Puedes agregar estas propiedades a fin de especificar diferentes ubicaciones de Cloud Storage para estos archivos. Si se usan ambas propiedades, deben apuntar a directorios en el mismo bucket.
      mapred:mapreduce.jobhistory.done-dir=gs://bucket-name/directory-name/mapreduce-job-history/done,
      mapred:mapreduce.jobhistory.intermediate-done-dir=gs://bucket-name/directory-name/mapreduce-job-history/intermediate-done
      
    • spark:spark.history.fs.gs.outputstream.type y spark:spark.history.fs.gs.outputstream.sync.min.interval.ms: Agrega estas propiedades de conector de Cloud Storage para cambiar el comportamiento predeterminado de cómo el clúster de trabajo envía datos a Cloud Storage. El spark:spark.history.fs.gs.outputstream.type predeterminado es BASIC, que envía datos a Cloud Storage después de completar el trabajo. Puedes cambiar esta configuración a FLUSHABLE_COMPOSITE para cambiar el comportamiento de limpieza a fin de copiar datos en Cloud Storage en intervalos regulares mientras se ejecuta el trabajo.
      spark:spark.history.fs.gs.outputstream.type=FLUSHABLE_COMPOSITE
      
      El spark:spark.history.fs.gs.outputstream.sync.min.interval.ms predeterminado, que controla la frecuencia a la que se transfieren datos a Cloud Storage, es 5000ms y se puede cambiar a un intervalo de tiempo ms diferente:
      spark:spark.history.fs.gs.outputstream.sync.min.interval.ms=intervalms
      
      Nota: Para establecer estas propiedades, la versión de la imagen del clúster de trabajo de Dataproc debe usar la versión 2.2.0 o posterior del conector de Cloud Storage. Puedes verificar la versión del conector instalada en las versiones de imágenes desde la página Lista de versiones de imágenes de Dataproc.
    • dataproc:yarn.atsv2.bigtable.instance: Después de configurar el servicio Yarn Timeline v2, agrega esta propiedad para escribir los datos del cronograma de YARN en la instancia de Bigtable especificada a fin de visualizarlos en las interfaces web YARN Application Timeline Service V2 y Tez del clúster de PHS. Nota: La creación del clúster fallará si la instancia de Bigtable no existe.
      dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id
      

Usa PHS con cargas de trabajo por lotes de Spark

Para usar el servidor de historial persistente con Dataproc Serverless para cargas de trabajo por lotes de Spark, haz lo siguiente:

  1. Crea un clúster de PHS.

  2. Selecciona o especifica el clúster de PHS cuando envíes una carga de trabajo por lotes de Spark.

Usa PHS con Dataproc en Google Kubernetes Engine

Para usar el servidor de historial persistente con Dataproc en GKE, haz lo siguiente:

  1. Crea un clúster de PHS.

  2. Selecciona o especifica el clúster de PHS cuando crees un clúster virtual de Dataproc en GKE.

Interfaces web de puerta de enlace de componentes

En la consola, en la página Clústeres de Dataproc, haz clic en el nombre del clúster de PHS para abrir la página Detalles del clúster. En la pestaña Interfaces web, selecciona los vínculos de puerta de enlace de componentes para abrir interfaces web que se ejecutan en el clúster de PHS.

Interfaz web del servidor de historial de Spark

En la siguiente captura de pantalla, se muestra la interfaz web del servidor de historial de Spark, en la que se muestran vínculos a los trabajos de Spark que se ejecutan en job-cluster-1 y job-cluster-2 después de configurar los clústeres de trabajo y las ubicaciones spark.history.fs.logDirectory y spark:spark.eventLog.dir de PHS spark.history.fs.logDirectory de la siguiente manera:

job-cluster-1 gs://example-cloud-storage-bucket/job-cluster-1/spark-job-history
job-cluster-2 gs://example-cloud-storage-bucket/job-cluster-2/spark-job-history
phs-cluster gs://example-cloud-storage-bucket/*/spark-job-history

Puedes enumerar trabajos por nombre de aplicación en la interfaz web del servidor de historial de Spark si ingresas el nombre de una aplicación en el cuadro de búsqueda. El nombre de la app se puede establecer de una de las siguientes maneras (en orden de prioridad):

  1. Configurar dentro del código de la aplicación cuando se crea el contexto de Spark
  2. Configurar por la propiedad spark.app.name cuando se envía el trabajo
  3. Configurar por Dataproc para el nombre completo del recurso de REST para el trabajo (projects/project-id/regions/region/jobs/job-id)

Los usuarios pueden ingresar un término de nombre de recurso o aplicación en el cuadro de búsqueda para buscar y enumerar trabajos.

Registros de eventos

La interfaz web del servidor de historial de Spark proporciona un botón de Registro de eventos en el que puedes hacer clic para descargar los registros de eventos de Spark. Estos registros son útiles para examinar el ciclo de vida de la aplicación de Spark.

Trabajos de Spark

Las aplicaciones de Spark se dividen en varios trabajos, que se desglosan en varias etapas. Cada etapa puede tener varias tareas, que se ejecutan en nodos ejecutores (trabajadores).

  • Haz clic en un ID de la aplicación Spark en la interfaz web para abrir la página Trabajos de Spark, que proporciona un cronograma de eventos y un resumen de los trabajos dentro de la aplicación.

  • Haz clic en un trabajo para abrir una página de detalles de trabajo con un grafo acíclico dirigido (DAG) y el resumen de las etapas del trabajo.

  • Haz clic en una etapa o usa la pestaña Etapas para seleccionar una etapa a fin de abrir la página Detalles de la etapa.

    Los detalles de la etapa incluyen una visualización de DAG, un cronograma de eventos y métricas para las tareas dentro de la etapa. Puedes usar esta página para solucionar problemas relacionados con tareas suprimidas, retrasos del programador y errores de memoria insuficiente. El visualizador de DAG muestra la línea de código a partir de la cual se deriva la etapa, lo que te ayuda a hacer un seguimiento de los problemas hasta el código.

  • Haz clic en la pestaña Ejecutores para obtener información sobre el controlador de la aplicación de Spark y los nodos ejecutores.

    La información importante de esta página incluye la cantidad de núcleos y la cantidad de tareas que se ejecutaron en cada ejecutor.

Interfaz web de Tez

Tez es el motor de ejecución predeterminado para Hive y Pig en Dataproc. Si envías un trabajo de Hive en un clúster de trabajo de Dataproc, se iniciará una aplicación de Tez (consulta Usa Apache Hive en Dataproc).

Si configuraste el servicio Yarn Timeline v2 y configuraste la propiedad dataproc:yarn.atsv2.bigtable.instance cuando creaste los clústeres de trabajo de PHS y Dataproc, YARN escribirá los datos del cronograma del trabajo de Hive y Pig en la instancia de Bigtable especificada para recuperarlos y mostrarlos en la interfaz web de Tez que se ejecuta en el servidor de PHS.

Interfaz web de la aplicación Timeline V2 de YARN

Si configuraste la versión 2 del servicio de línea de tiempo de Yarn y configuraste la propiedad dataproc:yarn.atsv2.bigtable.instance cuando creaste los clústeres de trabajo de PHS y Dataproc, YARN escribirá los datos del cronograma del trabajo generado en la instancia de Bigtable especificada para su recuperación y visualización en la interfaz web del servicio de cronograma de la aplicación YARN que se ejecuta en el servidor PHS. Los trabajos de Dataproc se enumeran en la pestaña Actividad de flujo en la interfaz web.

Configura Yarn Timeline Service v2

Para configurar Yarn Timeline Service v2, configura una instancia de Bigtable y, si es necesario, verifica las funciones de la cuenta de servicio de la siguiente manera:

  1. Crear una instancia de Bigtable.

  2. Verifica las funciones de la cuenta de servicio, si es necesario. La cuenta de servicio de VM predeterminada que usan las VM de clúster de Dataproc tiene los permisos necesarios para crear y configurar la instancia de Bigtable para el servicio de cronograma de YARN. Si creas tu trabajo o clúster de PHS con una cuenta de servicio de VM administrada por el usuario, la cuenta debe tener la función Administrator o Bigtable User de Bigtable.

Esquema de tabla obligatorio

La asistencia de PHS de Dataproc para el servicio de cronograma de YARN v2 requiere un esquema específico creado en la instancia de Bigtable. Dataproc crea el esquema requerido cuando se crea un clúster de trabajo o PHS con la propiedad dataproc:yarn.atsv2.bigtable.instance configurada para apuntar a la instancia de Bigtable.

A continuación, se muestra el esquema de instancia de Bigtable requerido:

Tablas Familias de columnas
prod.timelineservice.application c,i,m
prod.timelineservice.app_flow min
prod.timelineservice.entity c,i,m
prod.timelineservice.flowactivity i
prod.timelineservice.flowrun i
prod.timelineservice.subapplication c,i,m

Recolección de elementos no utilizados de Bigtable

Puedes configurar la recolección de elementos no utilizados de Bigtable según las tablas de ATSv2:

  • Instala cbt (incluida la creación de .cbrtc file).

  • Crea la política de recolección de elementos no utilizados basada en la edad de ATSv2:

export NUMBER_OF_DAYS = number \
cbt setgcpolicy prod.timelineservice.application c maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.application i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.application m maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.app_flow m maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.entity c maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.entity i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.entity m maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.flowactivity i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.flowrun i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.subapplication c maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.subapplication i maxage=${NUMBER_OF_DAYS} \
cbt setgcpolicy prod.timelineservice.subapplication m maxage=${NUMBER_OF_DAYS}

Notas:

NUMBER_OF_DAYS: La cantidad máxima de días es 30d.