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 usagcloud 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 elHistoryServer
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
FLINK
componente 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 usagcloud 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
yspark:spark.eventLog.dir
: De forma predeterminada, los archivos del historial de tareas de Spark se guardan en el clústertemp 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
ymapred:mapreduce.jobhistory.intermediate-done-dir
: De forma predeterminada, los archivos del historial de trabajos de MapReduce se guardan en el clústertemp bucket
en los directorios/mapreduce-job-history/done
y/mapreduce-job-history/intermediate-done
. Lamapreduce.jobhistory.intermediate-done-dir
ubicación intermediamapreduce.jobhistory.done-dir
es un almacenamiento temporal. Los archivos intermedios se mueven a la ubicaciónmapreduce.jobhistory.done-dir
cuando 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 de2.0
y2.1
que usan la versión2.0.x
del conector de Cloud Storage (la versión predeterminada del conector para los clústeres de versiones de imágenes de2.0
y2.1
). Controla cómo envían los trabajos de Spark datos a Cloud Storage. El ajuste predeterminado esBASIC
, que envía datos a Cloud Storage una vez completado el trabajo. Si se define comoFLUSHABLE_COMPOSITE
, los datos se copian en Cloud Storage a intervalos regulares mientras se ejecuta el trabajo, tal como se define enspark: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 de2.0
y2.1
que usan la versión2.0.x
del conector de Cloud Storage (la versión predeterminada del conector para los clústeres de versiones de imágenes de2.0
y2.1
). Controla la frecuencia en milisegundos con la que se transfieren los datos a Cloud Storage cuandospark:spark.history.fs.gs.outputstream.type
tiene el valorFLUSHABLE_COMPOSITE
. El intervalo de tiempo predeterminado es5000ms
. El valor del intervalo de tiempo en milisegundos se puede especificar con o sin el sufijoms
.--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 imagen2.2
y posteriores que usan la versión3.0.x
del conector de Cloud Storage (la versión predeterminada del conector para los clústeres de versiones de imagen2.2
). Sustituye a la propiedadspark:spark.history.fs.gs.outputstream.sync.min.interval.ms
y admite valores con sufijo de tiempo, comoms
,s
ym
. Controla la frecuencia con la que se transfieren los datos a Cloud Storage cuandospark:spark.history.fs.gs.outputstream.type
se define comoFLUSHABLE_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 enflink-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:
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:
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 |

Búsqueda por nombre de aplicación
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):
- Se define en el código de la aplicación al crear el contexto de Spark.
- Se define mediante la propiedad spark.app.name cuando se envía el trabajo.
- 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:
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
oBigtable 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
.