Servidor de historial persistente de Dataproc

Información general

El servidor de historial persistente (PHS) de Dataproc proporciona interfaces web para ver el historial de las tareas que se ejecutan en clústeres de Dataproc activos o eliminados. Está disponible en la versión de imagen 1.5 de Dataproc y 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 del historial de tareas de MapReduce y Spark

  • Archivos del historial de tareas de Flink (consulta el componente opcional de Flink de Dataproc para crear un clúster de Dataproc que ejecute tareas de Flink)

  • Archivos de datos de la cronología de aplicaciones creados por YARN Timeline Service v2 y almacenados en una instancia de Bigtable.

  • Registros de agregación de YARN

Persistent History Server accede a los archivos del historial de tareas de Spark y MapReduce, a los archivos del historial de tareas de Flink y a los archivos de registro de YARN escritos en Cloud Storage durante el tiempo de vida de los clústeres de tareas de Dataproc, y los muestra.

Limitaciones

  • 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 con la versión de imagen 2.0 de Dataproc para ver los archivos del historial de trabajos que se ejecutaron en clústeres de trabajos con la versión de imagen 2.0 de Dataproc que se encontraban en el proyecto en el que está ubicado el clúster de PHS.

  • Un clúster de PHS no admite Kerberos ni Autenticación personal.

Crear un clúster de PHS de Dataproc

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

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 va a asociar al clúster de PHS. Este proyecto debe ser el mismo que el asociado al clúster que ejecuta tus trabajos (consulta Crear 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 un solo nodo de Dataproc.
  • --enable-component-gateway: Esta marca habilita las interfaces web de la pasarela de componentes en el clúster de PHS.
  • COMPONENT: usa esta marca para instalar uno o varios componentes opcionales en el clúster. Debes especificar el componente opcional FLINK para ejecutar el servicio web HistoryServer de Flink en el clúster de PHS y ver los archivos del historial de tareas de Flink.
  • PROPERTIES. Especifica una o varias propiedades de clúster.
  • Si quieres, añade la marca --image-version para especificar la versión de la imagen del clúster de PHS. La versión de la imagen de PHS debe coincidir con la versión de la imagen de los clústeres de trabajo de Dataproc. Consulta las limitaciones.

    Notas:

    • En los ejemplos de valores de propiedad de esta sección se usa el comodín "*" para permitir que el PHS coincida con varios directorios del segmento especificado escritos por diferentes clústeres de trabajos (pero consulte Consideraciones sobre la eficiencia de los comodines).
    • En los siguientes ejemplos se muestran marcas --properties independientes para facilitar la lectura. Cuando se usa gcloud dataproc clusters create para crear un clúster de Dataproc en Compute Engine, se recomienda usar una marca --properties para especificar una lista de propiedades separadas por comas (consulta el formato de las propiedades del clúster).

    Propiedades:

    • yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/*/yarn-logs: Añade esta propiedad para especificar la ubicación de Cloud Storage donde el PHS accederá a los registros de YARN escritos por los clústeres de trabajos.
    • spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history: añade esta propiedad para habilitar el historial de trabajos de Spark persistente. Esta propiedad especifica la ubicación en la que el PHS accederá a los registros del historial de trabajos de Spark escritos por los clústeres de trabajos.

      En los clústeres de Dataproc 2.0 o versiones posteriores, también se deben definir las dos propiedades siguientes para habilitar los registros del historial de Spark de PHS (consulta las opciones de configuración del servidor del historial de Spark). El valor spark.history.custom.executor.log.url es un valor literal que contiene {{MARCADORES DE POSICIÓN}} para las variables que definirá el servidor de historial persistente. Los usuarios no definen estas variables. Transfiere el valor de la propiedad tal 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: Añade esta propiedad para habilitar el historial de trabajos de MapReduce persistente. Esta propiedad especifica la ubicación de Cloud Storage donde el PHS accederá a los registros del historial de tareas de MapReduce escritos por los clústeres de tareas.

    • dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id: Después de configurar el servicio de cronología de Yarn v2, añade esta propiedad para usar el clúster de PHS y ver los datos de la cronología en las interfaces web Servicio de cronología de aplicaciones de YARN V2 y Tez (consulta Interfaces web de Component Gateway).

    • flink:historyserver.archive.fs.dir=gs://bucket-name/*/flink-job-history/completed-jobs: Usa esta propiedad para configurar el HistoryServer de Flink y monitorizar 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 tareas de Dataproc

Puedes ejecutar el siguiente comando en una terminal local o en Cloud Shell para crear un clúster de tareas de Dataproc que ejecute tareas y escriba archivos del historial de tareas 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 trabajos.
  • PROJECT: especifica el proyecto asociado al clúster de trabajos.
  • REGION: especifica la región de Compute Engine en la que se ubicará el clúster de trabajo.
  • --enable-component-gateway: esta marca habilita las interfaces web de la pasarela de componentes en el clúster de trabajo.
  • COMPONENT: usa esta marca para instalar uno o varios componentes opcionales en el clúster. Especifica el FLINKcomponente opcional para ejecutar trabajos de Flink en el clúster.
  • PROPERTIES: añade una o varias de las siguientes propiedades del clúster para definir ubicaciones de Cloud Storage no predeterminadas relacionadas con PHS y otras propiedades del clúster de trabajo.

    Notas:

    • En los ejemplos de valores de propiedad de esta sección se usa el comodín "*" para permitir que el PHS coincida con varios directorios del segmento especificado escritos por diferentes clústeres de trabajos (pero consulte Consideraciones sobre la eficiencia de los comodines).
    • En los siguientes ejemplos se muestran marcas --properties independientes para facilitar la lectura. Cuando se usa gcloud dataproc clusters create para crear un clúster de Dataproc en Compute Engine, se recomienda usar una marca --properties para especificar una lista de propiedades separadas por comas (consulta el formato de las propiedades del clúster).

    Propiedades:

    • yarn:yarn.nodemanager.remote-app-log-dir: De forma predeterminada, los registros de YARN agregados están habilitados en los clústeres de trabajos de Dataproc y se escriben en el cubo temporal del clúster. Añade esta propiedad para especificar otra ubicación de Cloud Storage en la que el clúster escribirá los registros de agregación para que el servidor de historial persistente pueda acceder a ellos.
      --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 del historial de tareas de Spark se guardan en el clúster temp bucket en el directorio /spark-job-history. Puedes añadir estas propiedades para especificar diferentes ubicaciones de Cloud Storage para estos archivos. Si se usan ambas propiedades, deben apuntar a directorios del mismo segmento.
      --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 del 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 mapreduce.jobhistory.intermediate-done-dirubicación intermediamapreduce.jobhistory.done-dir es un almacenamiento temporal. Los archivos intermedios se mueven a la ubicación mapreduce.jobhistory.done-dircuando se completa el trabajo de MapReduce. Puedes añadir estas propiedades para especificar diferentes ubicaciones de Cloud Storage para estos archivos. Si se usan ambas propiedades, deben apuntar a directorios del mismo segmento.
      --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: esta propiedad se aplica a los clústeres de versiones de imágenes de 2.0 y 2.1 que usan la versión 2.0.x del conector de Cloud Storage (la versión predeterminada del conector para los clústeres de versiones de imágenes de 2.0 y 2.1). Controla cómo envían los trabajos de Spark datos a Cloud Storage. El ajuste predeterminado es BASIC, que envía datos a Cloud Storage una vez completado el trabajo. Si se define como FLUSHABLE_COMPOSITE, los datos se copian en Cloud Storage a intervalos regulares mientras se ejecuta el trabajo, tal como se define en spark:spark.history.fs.gs.outputstream.sync.min.interval.ms.
      --properties=spark:spark.history.fs.gs.outputstream.type=FLUSHABLE_COMPOSITE
      
    • spark:spark.history.fs.gs.outputstream.sync.min.interval.ms: Esta propiedad se aplica a los clústeres de versiones de imágenes de 2.0 y 2.1 que usan la versión 2.0.x del conector de Cloud Storage (la versión predeterminada del conector para los clústeres de versiones de imágenes de 2.0 y 2.1). Controla la frecuencia en milisegundos con la que se transfieren los datos a Cloud Storage cuando spark:spark.history.fs.gs.outputstream.type tiene el valor FLUSHABLE_COMPOSITE. El intervalo de tiempo predeterminado es 5000ms. El valor del intervalo de tiempo en milisegundos se puede especificar con o sin el sufijo ms.
      --properties=spark:spark.history.fs.gs.outputstream.sync.min.interval.ms=INTERVALms
      
    • spark:spark.history.fs.gs.outputstream.sync.min.interval: esta propiedad se aplica a los clústeres de versiones de imagen 2.2 y posteriores que usan la versión 3.0.x del conector de Cloud Storage (la versión predeterminada del conector para los clústeres de versiones de imagen 2.2). Sustituye a la propiedad spark:spark.history.fs.gs.outputstream.sync.min.interval.ms y admite valores con sufijo de tiempo, como ms, s y m. Controla la frecuencia con la que se transfieren los datos a Cloud Storage cuando spark:spark.history.fs.gs.outputstream.type se define como FLUSHABLE_COMPOSITE.
      --properties=spark:spark.history.fs.gs.outputstream.sync.min.interval=INTERVAL
      
    • dataproc:yarn.atsv2.bigtable.instance: Después de configurar el servicio de cronología de Yarn v2, añade esta propiedad para escribir datos de cronología de YARN en la instancia de Bigtable especificada para verlos en las interfaces web Servicio de cronología de aplicaciones de YARN v2 y 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: el JobManager de Flink archiva los trabajos de Flink completados subiendo la información de los trabajos archivados a un directorio del sistema de archivos. Usa esta propiedad para definir 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
      

Usar 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, 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.

Usar 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 Component Gateway

En la consola Google Cloud , en la página de Dataproc Clusters (Clústeres), haz clic en el nombre del clúster de PHS para abrir la página Cluster details (Detalles del clúster). En la pestaña Interfaces web, selecciona los enlaces de la pasarela 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 enlaces a las tareas de Spark ejecutadas 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 tareas y la ubicación 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 los trabajos por nombre de aplicación en la interfaz web Spark History Server introduciendo el nombre de una aplicación en el cuadro de búsqueda. El nombre de la aplicación se puede definir de una de las siguientes formas (ordenadas por prioridad):

  1. Se define en el código de la aplicación al crear el contexto de Spark.
  2. Se define mediante la propiedad spark.app.name cuando se envía el trabajo.
  3. Definido por Dataproc como el nombre completo del recurso REST de la tarea (projects/project-id/regions/region/jobs/job-id).

Los usuarios pueden introducir el nombre de una aplicación o un recurso en el cuadro Buscar para encontrar y mostrar los trabajos.

Registros de eventos

La interfaz web de Spark History Server incluye un botón Registro de eventos 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 Spark.

Tareas de Spark

Las aplicaciones de Spark se dividen en varios trabajos, que a su vez se dividen en varias fases. Cada fase puede tener varias tareas, que se ejecutan en nodos de ejecución (trabajadores).

  • Haga clic en un ID de aplicación de Spark en la interfaz web para abrir la página Tareas de Spark, que proporciona una cronología de eventos y un resumen de las tareas de la aplicación.

  • Haz clic en un trabajo para abrir la página Detalles del trabajo, que incluye un grafo acíclico dirigido (DAG) y un resumen de las fases del trabajo.

  • Haz clic en una fase o usa la pestaña Fases para seleccionar una fase y abrir la página Detalles de la fase.

    La sección Detalles de la fase incluye una visualización de DAG, una cronología de eventos y métricas de las tareas de la fase. Puedes usar esta página para solucionar problemas relacionados con tareas bloqueadas, retrasos del programador y errores de falta de memoria. El visualizador de DAG muestra la línea de código de la que se deriva la fase, lo que te ayuda a rastrear los problemas hasta el código.

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

    En esta página se incluye información importante, como el número de núcleos y el número de tareas que se han ejecutado en cada ejecutor.

Interfaz web de Tez

Tez es el motor de ejecución predeterminado de Hive y Pig en Dataproc. Al enviar una tarea de Hive en un clúster de tareas de Dataproc, se inicia una aplicación de Tez.

Si has configurado el servicio de cronología de Yarn v2 y has definido la propiedad dataproc:yarn.atsv2.bigtable.instance al crear los clústeres de trabajo de PHS y Dataproc, YARN escribe los datos de la cronología de los trabajos de Hive y Pig generados 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 cronología de aplicaciones de YARN V2

Si configuraste el servicio de cronología de Yarn v2 y definiste la propiedad dataproc:yarn.atsv2.bigtable.instance al crear los clústeres de trabajo de PHS y Dataproc, YARN escribe los datos de la cronología de los trabajos generados en la instancia de Bigtable especificada para recuperarlos y mostrarlos en la interfaz web del servicio de cronología de aplicaciones de YARN que se ejecuta en el servidor de PHS. Los trabajos de Dataproc se muestran en la pestaña Actividad de flujo de trabajo de la interfaz web.

Configurar el servicio de cronología de Yarn v2

Para configurar Yarn Timeline Service v2, configure una instancia de Bigtable y, si es necesario, compruebe los roles de la cuenta de servicio de la siguiente manera:

  1. Crea una instancia de Bigtable.

  2. Comprueba los roles de la cuenta de servicio si es necesario. La cuenta de servicio de VM predeterminada que usan las VMs del clúster de Dataproc tiene los permisos necesarios para crear y configurar la instancia de Bigtable para el servicio de cronología de YARN. Si creas tu trabajo o clúster de PHS con una cuenta de servicio de VM personalizada, la cuenta debe tener el rol Administrator o Bigtable User de Bigtable.

Esquema de tabla obligatorio

Para que Dataproc PHS sea compatible con YARN Timeline Service v2, es necesario crear un esquema específico en la instancia de Bigtable. Dataproc crea el esquema necesario cuando se crea un clúster de trabajo o un clúster de PHS con la propiedad dataproc:yarn.atsv2.bigtable.instance configurada para que apunte a la instancia de Bigtable.

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

Tablas 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

Puede configurar la recolección de memoria residual de Bigtable basada en la edad para 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 antigü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: el número máximo de días es 30d.