Serveur d'historique persistant Dataproc

Présentation

Le serveur d'historique persistant de Dataproc fournit des interfaces Web permettant d'afficher l'historique des tâches pour des tâches exécutées sur des clusters Dataproc actifs ou supprimés. Il est disponible dans la version 1.5 de Cloud Dataproc et les versions ultérieures, et s'exécute sur un cluster Dataproc à nœud unique. Il fournit des interfaces Web pour les fichiers et les données suivants:

  • Fichiers d'historique des tâches MapReduce et Spark

  • Les fichiers de données de la chronologie d'application créés par YARN Timeline Service v2 et stockés dans une instance Bigtable

  • Journaux d'agrégation YARN

Le serveur d'historique persistant accède et affiche les fichiers d'historique des tâches Spark et MapReduce, ainsi que les fichiers journaux consignés dans Cloud Storage pendant la durée de vie des clusters de tâches Dataproc.

Créer un cluster PHS

Vous pouvez exécuter la commande gcloud dataproc clusters create suivante dans un terminal local ou dans Cloud Shell avec les options et les propriétés de cluster suivantes pour créer un cluster de nœuds à historique persistant Dataproc.

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

Remarques :

  • --enable-component-gateway : obligatoire pour activer les interfaces Web de composants sur le cluster PHS.
  • Ajoutez une ou plusieurs des propriétés de cluster suivantes pour pouvoir conserver et afficher l'historique des tâches et d'autres journaux à l'aide du serveur d'historique persistant.

    Exemple :

    --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 : ajoutez cette propriété pour spécifier l'emplacement Cloud Storage auquel les PHS accéderont aux journaux YARN écrits par les clusters de tâche (consultez la section Créer des clusters de tâches). La valeur indiquée utilise un caractère générique "*" pour permettre au PHS de correspondre à plusieurs répertoires du bucket spécifié, écrits par différents clusters de tâches (mais consultez la section Considération de l'efficacité: Utiliser des caractères génériques de chemin d'accès).
    • spark:spark.history.fs.logDirectory=gs://bucket-name/*/spark-job-history : ajoutez cette propriété pour activer l'historique des tâches Spark persistantes. Cette propriété spécifie l'emplacement dans lequel le PHS accède aux journaux d'historique des tâches Spark écrits par les clusters de tâche (voir Créer un cluster de tâches). La valeur indiquée utilise un caractère générique "*" pour permettre au PHS de correspondre à plusieurs répertoires du bucket spécifié, écrits par différents clusters de tâches (mais consultez la section Considération de l'efficacité: Utiliser des caractères génériques de chemin d'accès).

      Remarque: Dans les clusters Dataproc 2.0 et versions ultérieures, les propriétés suivantes doivent également être définies pour activer les journaux de l'historique Spark de Spark (consultez la section Options de configuration du serveur d'historique Spark). La valeur spark.history.custom.executor.log.url est une valeur littérale contenant {{PLACEHOLDERS}} pour les variables qui seront définies par le serveur d'historique persistant. Ces variables ne sont pas définies par les utilisateurs ; transmettez la valeur de la propriété comme indiqué.

      --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 : ajoutez cette propriété pour activer l'historique des tâches MapReduce persistantes. Cette propriété spécifie l'emplacement Cloud Storage où les PHS accéderont aux journaux d'historique des tâches MapReduce écrits par les clusters de tâche (voir Créer des clusters de tâches). La valeur indiquée utilise un caractère générique "*" pour permettre au PHS de correspondre à plusieurs répertoires du bucket spécifié, écrits par différents clusters de tâches (mais consultez la section Considération de l'efficacité: Utiliser des caractères génériques de chemin d'accès).

    • dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id : Après avoir configuré Yarn Timeline Service v2, ajoutez cette propriété pour utiliser le cluster PHS afin d'afficher les données de chronologie sur les interfaces Web YARN Application Timeline Service V2 et Tez (voir la page Interfaces de passerelle Web).

Créer un cluster de tâches Dataproc

Vous pouvez exécuter la commande suivante dans un terminal local ou dans Cloud Shell pour créer un cluster de tâches Dataproc qui écrit des fichiers d'historique de tâche sur un serveur d'historique persistant (PHS).

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

Remarques :

  • --enable-component-gateway : cette option est requise pour activer les interfaces Web Component Gateway sur le cluster de tâche.
  • Ajoutez une ou plusieurs des propriétés de cluster suivantes pour définir des emplacements Cloud Storage non associés à PHS et d'autres propriétés de cluster de tâche.

    Exemple :

    --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 : par défaut, les journaux YARN agrégés sont activés sur les clusters de tâches Dataproc et écrits dans le bucket de température du cluster. Ajoutez cette propriété pour spécifier un autre emplacement Cloud Storage dans lequel le cluster écrira des journaux d'agrégation afin d'y accéder par le serveur d'historique persistant.
      yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/directory-name/yarn-logs
      
    • spark:spark.history.fs.logDirectory et spark:spark.eventLog.dir : par défaut, les fichiers d'historique des tâches Spark sont enregistrés dans le cluster temp bucket dans le répertoire /spark-job-history. Vous pouvez ajouter ces propriétés afin de spécifier différents emplacements Cloud Storage pour ces fichiers. Si les deux propriétés sont utilisées, elles doivent pointer vers des répertoires du même 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 et mapred:mapreduce.jobhistory.intermediate-done-dir : par défaut, les fichiers de l'historique des tâches MapReduce sont enregistrés dans les répertoires temp bucket du cluster /mapreduce-job-history/done et /mapreduce-job-history/intermediate-done. L'emplacement intermédiaire mapreduce.jobhistory.intermediate-done-dir est un stockage temporaire. Les fichiers intermédiaires sont déplacés vers l'emplacement mapreduce.jobhistory.done-dir une fois la tâche MapReduce terminée. Vous pouvez ajouter ces propriétés afin de spécifier différents emplacements Cloud Storage pour ces fichiers. Si les deux propriétés sont utilisées, elles doivent pointer vers des répertoires du même 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 et spark:spark.history.fs.gs.outputstream.sync.min.interval.ms : ajoutez les propriétés du connecteur Cloud Storage pour modifier le comportement par défaut de la façon dont le cluster de tâches envoie les données à Cloud Storage. Le spark:spark.history.fs.gs.outputstream.type par défaut est BASIC, qui envoie des données à Cloud Storage une fois la tâche terminée. Vous pouvez définir ce paramètre sur FLUSHABLE_COMPOSITE pour changer le comportement de vidage en vue de copier des données dans Cloud Storage à intervalles réguliers pendant l'exécution de la tâche.
      spark:spark.history.fs.gs.outputstream.type=FLUSHABLE_COMPOSITE
      
      Le spark:spark.history.fs.gs.outputstream.sync.min.interval.ms par défaut, qui contrôle la fréquence à laquelle les données sont transférées vers Cloud Storage, est 5000ms et peut être modifié dans un autre intervalle de temps ms:
      spark:spark.history.fs.gs.outputstream.sync.min.interval.ms=intervalms
      
      Remarque:Pour définir ces propriétés, la version de l'image du cluster de tâches Dataproc doit utiliser la version 2.2.0 ou ultérieure du connecteur Cloud Storage. Vous pouvez vérifier la version du connecteur installée sur les versions d'image à partir de la page Liste des versions d'image Dataproc.
    • dataproc:yarn.atsv2.bigtable.instance: après avoir configuré le service Timeline YARN (version 2), ajoutez cette propriété pour écrire les données de la chronologie YARN dans l'instance Bigtable spécifiée afin de les afficher sur les interfaces Web YARN Application Timeline Service V2 et Tez du cluster PHS. Remarque: La création de clusters échoue si l'instance Bigtable n'existe pas.
      dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id
      

Utiliser des PHS avec des charges de travail par lot Spark

Pour utiliser le serveur d'historique persistant avec Dataproc sans serveur pour des charges de travail par lot Spark:

  1. Créez un cluster PHS.

  2. Sélectionnez ou spécifiez le cluster PHS lorsque vous envoyez une charge de travail par lot Spark.

Utiliser PHS avec Dataproc sur Google Kubernetes Engine

Pour utiliser le serveur d'historique persistant avec Dataproc sur GKE :

  1. Créez un cluster PHS.

  2. Sélectionnez ou spécifiez le cluster PHS lorsque vous créez un cluster virtuel Dataproc sur GKE.

Interfaces Web de la passerelle des composants

Dans Google Cloud Console, sur la page Dataproc Clusters, cliquez sur le nom du cluster PHS pour ouvrir la page Détails du cluster. Dans l'onglet Interfaces Web, sélectionnez les liens de la passerelle des composants pour ouvrir des interfaces Web exécutées sur le cluster PHS.

Interface Web du serveur d'historique Spark

La capture d'écran suivante montre l'interface Web du serveur d'historique Spark affichant les liens vers les tâches Spark exécutées sur les clusters de tâches job-cluster-1 et job-cluster-2 après avoir configuré les emplacements de la tâche spark.history.fs.logDirectory, ainsi que les clusters spark:spark.eventLog.dir et du cluster PHS:

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

Vous pouvez répertorier les tâches par nom d'application dans l'interface Web Spark History Server en saisissant un nom d'application dans le champ de recherche. Le nom de l'application peut être défini de l'une des manières suivantes (répertoriées par priorité):

  1. Défini dans le code de l'application lors de la création du contexte Spark
  2. Défini par la propriété spark.app.name lors de l'envoi de la tâche
  3. Défini par Dataproc sur le nom complet de la ressource REST pour la tâche (projects/project-id/regions/region/jobs/job-id)

Les utilisateurs peuvent saisir un nom d'application ou de ressource dans le champ Rechercher pour rechercher et répertorier les offres d'emploi.

Journaux des événements

L'interface Web du serveur d'historique Spark fournit un bouton Journal des événements sur lequel vous pouvez cliquer pour télécharger les journaux des événements Spark. Ces journaux sont utiles pour examiner le cycle de vie de l'application Spark.

Tâches Spark

Les applications Spark sont divisées en plusieurs tâches, elles-mêmes divisées en plusieurs étapes. Chaque étape peut comprendre plusieurs tâches, qui sont exécutées sur des nœuds d'exécution (nœuds de calcul).

  • Cliquez sur un ID d'application Spark dans l'interface Web pour ouvrir la page des tâches Spark, qui contient la chronologie de l'événement et un résumé des tâches dans l'application.

  • Cliquez sur une tâche pour ouvrir la page "Détails de la tâche" avec un graphe orienté acyclique et un résumé des étapes de la tâche.

  • Cliquez sur une étape ou utilisez l'onglet "Étapes" pour sélectionner une étape afin d'ouvrir la page "Détails de l'étape".

    Les détails de l'étape incluent une visualisation du DAG, une chronologie des événements et des métriques pour les tâches de la phase. Vous pouvez utiliser cette page pour résoudre les problèmes liés aux tâches "étranglées", aux retards du programmeur et aux erreurs de mémoire insuffisante. Le visualiseur de DAG affiche la ligne de code à partir de laquelle la phase est dérivée, ce qui vous aide à suivre les problèmes dans le code.

  • Cliquez sur l'onglet "Executors" (Exécuteurs) pour en savoir plus sur le pilote et les nœuds d'exécution de l'application Spark.

    Les informations importantes de cette page incluent le nombre de cœurs et le nombre de tâches exécutées sur chaque exécuteur.

Interface Web de Tez

Tez est le moteur d'exécution par défaut pour Hive et Pig sur Dataproc. L'envoi d'une tâche Hive sur un cluster de tâches Dataproc lance une application Tez (voir Utiliser Apache Hive sur Dataproc).

Si vous avez configuré Yarn Timeline Service v2 et défini la propriété dataproc:yarn.atsv2.bigtable.instance lorsque vous avez créé les clusters de tâches PHS et Dataproc, YARN écrit les données de la chronologie de tâche Hive et Pig générées dans l'instance Bigtable spécifiée pour les récupérer et les afficher sur l'interface Web de Tez s'exécutant sur le serveur PHS.

Interface Web de la timeline Application V2

Si vous avez configuré le service Yarn Timeline Service v2 et défini la propriété dataproc:yarn.atsv2.bigtable.instance lors de la création des clusters de tâches PHS et Dataproc, YARN écrit les données de la chronologie des tâches générées dans l'instance Bigtable spécifiée pour les récupérer et les afficher sur l'interface Web du service de chronologie de l'application YARN s'exécutant sur le serveur PHS. Les tâches Dataproc sont répertoriées dans l'onglet Activité des flux de l'interface Web.

Configurer Yarn Timeline Service v2

Pour configurer Yarn Timeline Service v2, configurez une instance Bigtable et, si nécessaire, vérifiez les rôles de compte de service:

  1. Créez une instance Bigtable.

  2. Vérifiez les rôles du compte de service, si nécessaire. Le compte de service de VM par défaut utilisé par les VM de cluster Dataproc dispose des autorisations nécessaires pour créer et configurer l'instance Bigtable pour le service de chronologie YARN. Si vous créez votre tâche ou votre cluster PHS avec un compte de service de VM géré par l'utilisateur, ce compte doit disposer du rôle Bigtable Administrator ou Bigtable User.

Schéma de table requis

La compatibilité de Dataproc PHS avec le service Timeline YARN v2 nécessite un schéma spécifique créé dans l'instance Bigtable. Dataproc crée le schéma requis lorsqu'un cluster de tâche ou un cluster PHS est créé avec la propriété dataproc:yarn.atsv2.bigtable.instance définie pour pointer vers l'instance Bigtable.

Voici le schéma d'instance Bigtable requis:

Tables Familles de colonnes
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

Récupération de mémoire Bigtable

Vous pouvez configurer la collecte de mémoire Bigtable basée sur l'âge pour les tables ATSv2:

  • Installez cbt (y compris la création de la .cbrtc file).

  • Créez la règle de récupération de mémoire basée sur l'âge:

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}

Remarques :

NUMBER_OF_DAYS: 30d jours maximum.