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 trabajos de los trabajos ejecutados en clústeres de Dataproc activos o borrados. Está disponible en la versión de la imagen 1.5 de Dataproc y en versiones posteriores, y se ejecuta en un clúster de Dataproc de un solo nodo. Proporciona interfaces web para los siguientes archivos y datos:

  • Archivos de historial de trabajos de MapReduce y Spark

  • Archivos de historial de trabajos de Flink (consulta el componente opcional de Flink de Dataproc para crear un clúster de Dataproc a fin de ejecutar trabajos de Flink)

  • Archivos de datos de cronograma de aplicaciones creados por el servicio de cronograma de YARN v2 y almacenados en una instancia de Bigtable.

  • Registros de agregación de YARN

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

Limitaciones

  • Un clúster de PHS de Dataproc te permite ver los archivos del historial de trabajos solo de los trabajos de Dataproc que se ejecutaron en el proyecto en el que se encuentra el clúster de PHS. Además, la versión de la imagen del clúster de PHS y la versión de la imagen de los clústeres de trabajos de Dataproc deben coincidir. Por ejemplo, puedes usar un clúster de PHS de la versión de imagen de Dataproc 2.0 para ver los archivos del historial de trabajos de los trabajos que se ejecutaron en los clústeres de trabajos de la versión de imagen de Dataproc 2.0 que se encontraban en el proyecto en el que se encuentra el clúster de PHS.

  • Un clúster de PHS no es compatible con Kerberos ni la autenticación personal.

Crea un clúster de PHS en Dataproc

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

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT \
    --region=REGION \
    --single-node \
    --enable-component-gateway \
    --optional-components=COMPONENT \
    --properties=PROPERTIES
  • CLUSTER_NAME: Especifica el nombre del clúster de PHS.
  • PROJECT: Especifica el proyecto que se asociará con el clúster de PHS. Este proyecto debe ser el mismo que está asociado con el clúster que ejecuta tus trabajos (consulta Crea un clúster de trabajos de Dataproc).
  • REGION: Especifica una región de Compute Engine en la que se ubicará el clúster de PHS.
  • --single-node: Un clúster de PHS es un clúster de nodo único de Dataproc.
  • --enable-component-gateway: Esta marca habilita las interfaces web de la puerta de enlace de componentes en el clúster de PHS.
  • COMPONENT: Usa esta marca para instalar uno o más componentes opcionales en el clúster. Debes especificar el componente opcional FLINK para ejecutar el servicio web de Flink HistoryServer en el clúster de PHS y ver los archivos de historial de trabajos de Flink.
  • PROPERTIES. Especifica una o más propiedades del clúster.
  • De forma opcional, agrega la marca --image-version para especificar la versión de la imagen del clúster de PHS. La versión de imagen de PHS debe coincidir con la versión de imagen de los clústeres de trabajos de Dataproc. Consulta Limitaciones.

    Notas:

    • En los ejemplos de valores de propiedad de esta sección, se usa un carácter comodín “*” para permitir que el PHS coincida con varios directorios del bucket especificado escrito por clústeres de trabajos diferentes (pero consulta Consideraciones de eficiencia del comodín).
    • En los siguientes ejemplos, se muestran marcas --properties independientes para facilitar la legibilidad. Cuando se usa gcloud dataproc clusters create para crear un clúster de Dataproc on Compute Engine, se recomienda usar una marca --properties a fin de especificar una lista de propiedades separadas por comas (consulta el formato de propiedades del clúster).

    Propiedades:

    • 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 de YARN que escriben los clústeres de trabajos.
    • spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history: Agrega esta propiedad para habilitar el historial de trabajos persistente de Spark. Esta propiedad especifica la ubicación en la que el PHS accederá a los registros del historial de trabajos de Spark que escriben los clústeres de trabajos.

      En los clústeres de Dataproc 2.0+, también se deben configurar las siguientes dos propiedades para habilitar los registros del historial de PHS Spark (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 variables que establecerá el servidor de historial persistente. Los usuarios no establecen 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 persistente de MapReduce. Esta propiedad especifica la ubicación de Cloud Storage en la que el PHS accederá a los registros del historial de trabajos de MapReduce escritos por los clústeres de trabajos.

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

    • flink:historyserver.archive.fs.dir=gs://bucket-name/*/flink-job-history/completed-jobs: Usa esta propiedad para configurar HistoryServer de Flink a fin de supervisar una lista de directorios separados por comas.

    Ejemplos de propiedades:

    --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
    
    --properties=flink:flink.historyserver.archive.fs.dir=gs://bucket-name/*/flink-job-history/completed-jobs
    

Crear 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 trabajos de Dataproc que ejecute trabajos y escriba archivos del historial de trabajos en un servidor de historial persistente (PHS).

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT \
    --region=REGION \
    --optional-components=COMPONENT \
    --enable-component-gateway \
    --properties=PROPERTIES \
    other args ...
  • CLUSTER_NAME: Especifica el nombre del clúster de trabajo.
  • PROJECT: Especifica el proyecto asociado con el clúster de trabajos.
  • REGION: Especifica la región de Compute Engine en la que se ubicará el clúster de trabajos.
  • --enable-component-gateway: Esta marca habilita las interfaces web de Puerta de enlace de componentes en el clúster de trabajo.
  • COMPONENT: Usa esta marca para instalar uno o más componentes opcionales en el clúster. Especifica el componente opcional FLINK para ejecutar trabajos de Flink en el clúster.
  • PROPERTIES: Agrega una o más de las siguientes propiedades del clúster para establecer ubicaciones de Cloud Storage no predeterminadas relacionadas con PHS y otras propiedades del clúster de trabajos.

    Notas:

    • En los ejemplos de valores de propiedad de esta sección, se usa un carácter comodín “*” para permitir que el PHS coincida con varios directorios del bucket especificado escrito por clústeres de trabajos diferentes (pero consulta Consideraciones de eficiencia del comodín).
    • En los siguientes ejemplos, se muestran marcas --properties independientes para facilitar la legibilidad. Cuando se usa gcloud dataproc clusters create para crear un clúster de Dataproc on Compute Engine, se recomienda usar una marca --properties a fin de especificar una lista de propiedades separadas por comas (consulta el formato de propiedades del clúster).

    Propiedades:

    • yarn:yarn.nodemanager.remote-app-log-dir: De forma predeterminada, los registros de 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 para que acceda el servidor de historial persistente.
      --properties=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 de historial de trabajos de Spark se guardan en el clúster temp bucket en el directorio /spark-job-history. Puedes agregar estas propiedades si quieres especificar diferentes ubicaciones de Cloud Storage para estos archivos. Si se usan ambas propiedades, deben apuntar a directorios en el mismo bucket.
      --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/directory-name/spark-job-history
      
      --properties=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 el 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 si quieres especificar diferentes ubicaciones de Cloud Storage para estos archivos. Si se usan ambas propiedades, deben apuntar a directorios en el mismo bucket.
      --properties=mapred:mapreduce.jobhistory.done-dir=gs://bucket-name/directory-name/mapreduce-job-history/done
      
      --properties=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 del conector de Cloud Storage para cambiar el comportamiento predeterminado de cómo el clúster de trabajos 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 que se completa el trabajo. Puedes cambiar esta configuración a FLUSHABLE_COMPOSITE para modificar el comportamiento de limpieza y copiar datos a Cloud Storage a intervalos regulares mientras se ejecuta el trabajo.
      --properties=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 con la que se transfieren los datos a Cloud Storage, es 5000ms y se puede cambiar a un intervalo de tiempo ms diferente:
      --properties=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 del 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 con 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 de cronograma de Yarn v2, agrega esta propiedad para escribir datos del cronograma de YARN en la instancia de Bigtable especificada a fin de visualizarla en las interfaces web del Servicio de cronograma de la aplicación de YARN V2 y de Tez del clúster de PHS. Nota: La creación del clúster fallará si la instancia de Bigtable no existe.
      --properties=dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id
      
    • flink:jobhistory.archive.fs.dir: JobManager de Flink archiva los trabajos de Flink completados mediante la carga de información del trabajo archivada a un directorio del sistema de archivos. Usa esta propiedad para configurar el directorio de archivos en flink-conf.yaml.
      --properties=flink:jobmanager.archive.fs.dir=gs://bucket-name/job-cluster-1/flink-job-history/completed-jobs
      

Usa PHS con cargas de trabajo por lotes de Spark

Si quieres usar el servidor de historial persistente con Dataproc Serverless para cargas de trabajo por lotes de Spark, sigue estos pasos:

  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, sigue estos pasos:

  1. Crea un clúster de PHS.

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

Interfaces web de puerta de enlace de componentes

En la consola de Google Cloud, 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 las 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 con vínculos a los trabajos de Spark que se ejecutan en job-cluster-1 y job-cluster-2 después de configurar las ubicaciones spark.history.fs.logDirectory y spark:spark.eventLog.dir de los clústeres de trabajo y las ubicaciones spark.history.fs.logDirectory del clúster de PHS 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 app en la interfaz web del Servidor de historial de Spark si ingresas el nombre de una app en el cuadro de búsqueda. El nombre de la app se puede establecer de una de las siguientes maneras (se enumeran según la 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 app o recurso en el cuadro de búsqueda para buscar trabajos y enumerarlos.

Registros de eventos

La interfaz web del servidor de historial de Spark proporciona un botón 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 el ID de la app de 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 a fin de seleccionar una para abrir su página de detalles.

    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 los nodos del controlador y ejecutor de la aplicación de Spark.

    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. Cuando se envía un trabajo de Hive en un clúster de trabajos de Dataproc, se inicia una aplicación de Tez (consulta Usa Apache Hive en Dataproc ).

Si configuraste Yarn Timeline Service v2 y estableciste la propiedad dataproc:yarn.atsv2.bigtable.instance cuando creaste los clústeres de trabajo de PHS y Dataproc, YARN escribe los datos del cronograma del trabajo de Hive y Pig generados en la instancia de Bigtable especificada para su recuperación y mostrarla en la interfaz web de Tez que se ejecuta en el servidor de PHP.

Interfaz web de YARN Application Timeline V2

Si configuraste Yarn Timeline Service v2 y estableciste la propiedad dataproc:yarn.atsv2.bigtable.instance cuando creaste los clústeres de trabajo de PHS y Dataproc, YARN escribe los datos del cronograma de trabajos generados en la instancia de Bigtable especificada para recuperarla y mostrarla en la interfaz web del servicio de cronograma de aplicaciones de YARN que se ejecuta en el servidor de PHP. Los trabajos de Dataproc se enumeran en la pestaña Actividad de flujo en la interfaz web.

Configura el servicio de cronograma de hilo v2

Si quieres configurar Yarn Timeline Service v2, configura una instancia de Bigtable y, si es necesario, verifica los roles de la cuenta de servicio de la siguiente manera:

  1. Crear una instancia de Bigtable.

  2. Verifica los roles de la cuenta de servicio, si es necesario. La cuenta de servicio de VM predeterminada que usan las VM del clúster de Dataproc tiene los permisos necesarios a fin de 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 personalizada, la cuenta debe tener la función Bigtable Administrator o Bigtable User.

Esquema de tabla obligatorio

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

El siguiente es el esquema de instancia de Bigtable requerido:

Tables Familias de columnas
prod.timelineservice.application c,i,m
prod.timelineservice.app_flow m
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 basada en la antigüedad para tablas de ATSv2:

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

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

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.