Serveur d'historique persistant Dataproc

Présentation

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

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

  • Fichiers d'historique des tâches Flink (consultez le composant Flink facultatif Dataproc pour créer un cluster Dataproc afin d'exécuter des tâches Flink)

  • Fichiers de données de chronologie d'application créés par le service de chronologie YARN 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, les fichiers d'historique des tâches Flink et les fichiers journaux YARN écrits dans Cloud Storage pendant la durée de vie des clusters de tâches Dataproc.

Limites

  • La version de l'image du cluster PHS et la version de l'image du ou des clusters d'exécution Dataproc doivent correspondre. Par exemple, vous pouvez utiliser un cluster PHS de la version d'image Dataproc 2.0 pour afficher les fichiers d'historique des tâches des tâches exécutées sur des clusters de tâches de la version d'image Dataproc 2.0 situés dans le projet où se trouve le cluster PHS.

  • Un cluster PHS n'est pas compatible avec Kerberos et Authentification personnelle.

Créer un cluster PHS Dataproc

Vous pouvez exécuter la commande gcloud dataproc clusters create suivante dans un terminal local ou dans Cloud Shell avec les indicateurs et les propriétés de cluster suivants pour créer un cluster à nœud unique du serveur d'historique persistant Dataproc.

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT \
    --region=REGION \
    --single-node \
    --enable-component-gateway \
    --optional-components=COMPONENT \
    --properties=PROPERTIES
  • CLUSTER_NAME: spécifiez le nom du cluster PHS.
  • PROJECT: spécifiez le projet à associer au cluster PHS. Ce projet doit être identique à celui associé au cluster qui exécute vos jobs (voir Créer un cluster de tâches Dataproc).
  • REGION: spécifiez une région Compute Engine dans laquelle se trouvera le cluster PHS.
  • --single-node: un cluster PHS est un cluster à nœud unique Dataproc.
  • --enable-component-gateway: cette option active les interfaces Web de la passerelle des composants sur le cluster PHS.
  • COMPONENT: utilisez cette option pour installer un ou plusieurs composants facultatifs sur le cluster. Vous devez spécifier le composant facultatif FLINK pour exécuter le service Web HistoryServer Flink sur le cluster PHS afin d'afficher les fichiers d'historique des tâches Flink.
  • PROPERTIES. Spécifiez une ou plusieurs propriétés de cluster.
  • Si vous le souhaitez, ajoutez l'indicateur --image-version pour spécifier la version de l'image du cluster PHS. La version de l'image PHS doit correspondre à celle du ou des clusters d'exécution Dataproc. Consultez la section Limites.

    Remarques :

    • Les exemples de valeurs de propriété de cette section utilisent un caractère générique "*" pour permettre au PHS de faire correspondre plusieurs répertoires du bucket spécifié et écrits par différents clusters de tâches (mais consultez la section Considérations d'efficacité des caractères génériques).
    • Des options --properties distinctes sont affichées dans les exemples suivants pour faciliter la lisibilité. Lorsque vous utilisez gcloud dataproc clusters create pour créer un cluster Dataproc sur Compute Engine, nous vous recommandons d'utiliser un indicateur --properties pour spécifier une liste de propriétés séparées par des virgules (voir la section Mise en forme des propriétés de cluster).

    Propriétés:

    • yarn:yarn.nodemanager.remote-app-log-dir=gs://bucket-name/*/yarn-logs : ajoutez cette propriété pour spécifier l'emplacement Cloud Storage où le serveur d'historique persistant accédera aux journaux YARN écrits par les clusters de tâches.
    • 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 où le serveur d'historique persistant accède aux journaux de l'historique des tâches Spark écrits par les clusters de tâches.

      Dans les clusters Dataproc 2.0 et versions ultérieures, les deux propriétés suivantes doivent également être définies pour activer les journaux d'historique Spark du PHS (voir la section Options de configuration du serveur d'historique Spark). La valeur spark.history.custom.executor.log.url est une valeur littérale qui contient {{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ù le serveur d'historique persistant accédera aux journaux de l'historique des tâches MapReduce écrits par les clusters de tâches.

    • 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 Interfaces Web de la passerelle de composants).

    • flink:historyserver.archive.fs.dir=gs://bucket-name/*/flink-job-history/completed-jobs : utilisez cette propriété pour configurer le HistoryServer Flink afin de surveiller une liste de répertoires séparés par une virgule.

    Exemples de propriétés:

    --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
    

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 exécute des tâches et écrit des fichiers d'historique des tâches sur un serveur d'historique persistant (PHS).

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT \
    --region=REGION \
    --optional-components=COMPONENT \
    --enable-component-gateway \
    --properties=PROPERTIES \
    other args ...
  • CLUSTER_NAME: spécifiez le nom du cluster de tâches.
  • PROJECT: spécifiez le projet associé au cluster de tâches.
  • REGION: spécifiez la région Compute Engine dans laquelle se trouvera le cluster de tâches.
  • --enable-component-gateway: cette option active les interfaces Web de la passerelle des composants sur le cluster de tâches.
  • COMPONENT: utilisez cette option pour installer un ou plusieurs composants facultatifs sur le cluster. Spécifiez le composant facultatif FLINK pour exécuter des tâches Flink sur le cluster.
  • PROPERTIES: ajoutez une ou plusieurs des propriétés de cluster suivantes pour définir des emplacements Cloud Storage non par défaut liés au serveur d'historique persistant et d'autres propriétés de cluster de tâches.

    Remarques :

    • Les exemples de valeurs de propriété de cette section utilisent un caractère générique "*" pour permettre au PHS de faire correspondre plusieurs répertoires du bucket spécifié et écrits par différents clusters de tâches (mais consultez la section Considérations d'efficacité des caractères génériques).
    • Des options --properties distinctes sont affichées dans les exemples suivants pour faciliter la lisibilité. Lorsque vous utilisez gcloud dataproc clusters create pour créer un cluster Dataproc sur Compute Engine, nous vous recommandons d'utiliser un indicateur --properties pour spécifier une liste de propriétés séparées par des virgules (voir la section Mise en forme des propriétés de cluster).

    Propriétés:

    • 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 temporaire du cluster. Ajoutez cette propriété pour spécifier un autre emplacement Cloud Storage où le cluster écrira des journaux d'agrégation accessibles par le serveur d'historique persistant.
      --properties=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 pour 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 situés dans le même 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 et mapred:mapreduce.jobhistory.intermediate-done-dir : par défaut, les fichiers d'historique des tâches MapReduce sont enregistrés dans le cluster temp bucket dans les répertoires /mapreduce-job-history/done et /mapreduce-job-history/intermediate-done. L'emplacement mapreduce.jobhistory.intermediate-done-dir intermédiaire est un espace de 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 pour spécifier des emplacements Cloud Storage différents pour ces fichiers. Si les deux propriétés sont utilisées, elles doivent pointer vers des répertoires situés dans le même 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 et spark:spark.history.fs.gs.outputstream.sync.min.interval.ms : ajoutez ces propriétés de connecteur Cloud Storage pour modifier le comportement par défaut de la façon dont le cluster de tâches envoie des données vers Cloud Storage. La valeur spark:spark.history.fs.gs.outputstream.type par défaut est BASIC, qui envoie les données à Cloud Storage une fois la tâche terminée. Vous pouvez définir ce paramètre sur FLUSHABLE_COMPOSITE pour modifier le comportement de vidage afin de copier les données dans Cloud Storage à intervalles réguliers pendant l'exécution de la tâche.
      --properties=spark:spark.history.fs.gs.outputstream.type=FLUSHABLE_COMPOSITE
      
      La valeur 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. Vous pouvez remplacer cette valeur par un autre intervalle de temps ms:
      --properties=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 le connecteur Cloud Storage version 2.2.0 ou ultérieure. Vous pouvez vérifier la version du connecteur installée sur les versions d'image sur la page Liste des versions d'image Dataproc.
    • dataproc:yarn.atsv2.bigtable.instance: après avoir configuré Yarn Timeline Service v2, ajoutez cette propriété pour écrire les données de chronologie YARN dans l'instance Bigtable spécifiée afin de les afficher dans les interfaces Web YARN Application Timeline Service v2 et Tez du cluster PHS. Remarque: La création du cluster échouera si l'instance Bigtable n'existe pas.
      --properties=dataproc:yarn.atsv2.bigtable.instance=projects/project-id/instance_id/bigtable-instance-id
      
    • flink:jobhistory.archive.fs.dir: le gestionnaire de tâches Flink archive les tâches Flink terminées en important les informations de tâche archivées dans un répertoire de système de fichiers. Utilisez cette propriété pour définir le répertoire d'archive dans flink-conf.yaml.
      --properties=flink:jobmanager.archive.fs.dir=gs://bucket-name/job-cluster-1/flink-job-history/completed-jobs
      

Utiliser PHS avec des charges de travail par lot Spark

Pour utiliser le serveur d'historique persistant avec Dataproc sans serveur pour les 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 la console Google Cloud, sur la page Clusters (Clusters Dataproc), cliquez sur le nom du cluster PHS pour ouvrir la page Cluster details (Détails du cluster). Dans l'onglet Web Interfaces (Interfaces Web), sélectionnez les liens de la passerelle des composants pour ouvrir les 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 persistant affichant des liens vers les tâches Spark exécutées sur les job-cluster-1 et job-cluster-2 après la configuration de spark.history.fs.logDirectory et spark:spark.eventLog.dir des clusters de tâches et des emplacements spark.history.fs.logDirectory du cluster du serveur d'historique persistant de la manière suivante:

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 du serveur d'historique Spark 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 trouver et lister des tâches.

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 fournit une chronologie des événements et un résumé des tâches au sein de 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 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 chronologie des tâches 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 Tez exécutée sur le serveur PHS.

Interface Web de la chronologie des applications YARN V2

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 chronologie de tâche générées dans l'instance Bigtable spécifiée pour les récupérer et les afficher dans l'interface Web du service de chronologie des applications YARN exécutée sur le serveur PHS. Les tâches Dataproc sont répertoriées dans l'onglet Activité de 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 comme suit:

  1. Créez une instance Bigtable.

  2. Vérifiez les rôles du compte de service, si nécessaire. Le compte de service de la 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 YARN Timeline. Si vous créez votre tâche ou votre cluster PHS avec un compte de service de VM personnalisé, le compte doit disposer du rôle Administrator ou Bigtable User Bigtable.

Schéma de table requis

La prise en charge de la PHS Dataproc pour YARN Timeline Service 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âches 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 m
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 récupération de mémoire Bigtable en fonction de l'âge pour les tables ATSv2:

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

  • Créez la stratégie de récupération de mémoire en fonction de l'âge 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}

Remarques :

NUMBER_OF_DAYS: le nombre maximal de jours est 30d.