Apache Hadoop

Ce document explique comment configurer le déploiement de Google Kubernetes Engine afin de pouvoir collecter des métriques depuis Apache Hadoop à l'aide de Google Cloud Managed Service pour Prometheus. Sur cette page, vous allez :

  • configurer l'exportateur pour Hadoop afin de générer des rapports sur les métriques ;
  • configurer une ressource PodMonitoring pour Managed Service pour Prometheus afin de collecter les métriques exportées ;
  • accéder à un tableau de bord dans Cloud Monitoring pour consulter les métriques ;
  • configurer des règles d'alerte pour surveiller les métriques.

Ces instructions ne s'appliquent que si vous utilisez une collecte gérée avec Managed Service pour Prometheus. Si vous utilisez une collecte autodéployée, consultez le dépôt source de l'exportateur JMX pour obtenir des informations sur l'installation.

Ces instructions sont fournies à titre d'exemple et devraient fonctionner dans la plupart des environnements Kubernetes. Si vous rencontrez des difficultés pour installer une application ou un exportateur en raison de règles de sécurité ou d'organisation restrictives, nous vous recommandons de consulter la documentation Open Source pour obtenir de l'aide.

Pour plus d'informations sur Hadoop, consultez la page Apache Hadoop.

Prérequis

Pour collecter des métriques à partir de Hadoop en utilisant Managed Service pour Prometheus et la collecte gérée, votre déploiement doit répondre aux exigences suivantes :

  • Votre cluster doit exécuter Google Kubernetes Engine version 1.21.4-gke.300 ou ultérieure.
  • Vous devez exécuter Managed Service pour Prometheus en ayant activé la collecte gérée. Pour en savoir plus, consultez la page Premiers pas avec la collecte gérée.

  • Pour utiliser les tableaux de bord disponibles dans Cloud Monitoring pour l'intégration de Hadoop, vous devez utiliser jmx-exporter version 0.17.0 ou ultérieure.

    Pour en savoir plus sur les tableaux de bord disponibles, consultez Afficher les tableaux de bord.

Vérifiez que les valeurs des champs port et matchLabels correspondent à celles des pods Hadoop que vous souhaitez surveiller. Les NameNodes et DataNodes doivent être configurés pour accepter les connexions JMX distantes. Cette configuration peut être effectuée en définissant les variables d'environnement NAMENODE_HDFS_OPTS et DATANODE_HDFS_OPTS, comme décrit dans le guide d'interface système Unix.

Installer l'exportateur Hadoop

Nous vous recommandons d'installer l'exportateur Hadoop, jmx-exporter, en tant que side-car pour votre charge de travail Hadoop. Pour en savoir plus sur l'utilisation des side-cars, consultez Applications étendues sur Kubernetes avec des pods multiconteneurs.

Pour installer jmx-exporter en tant que side-car pour Hadoop, modifiez la configuration de Hadoop comme indiqué dans l'exemple suivant :

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

+ apiVersion: v1
+ kind: ConfigMap
+ metadata:
+   name: hadoop-exporter
+ data:
+   config.yaml: |
+     hostPort: localhost:1026
+     lowercaseOutputName: true
+     lowercaseOutputLabelNames: true
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: hadoop-hdfs
spec:
  serviceName: hadoop-hdfs
  selector:
    matchLabels:
+     app.kubernetes.io/name: hadoop
  template:
    metadata:
      labels:
+       app.kubernetes.io/name: hadoop
    spec:
      containers:
      - name: hadoop-hdfs
        image: "farberg/apache-hadoop:3.3.2"
+       env:
+         - name: HDFS_NAMENODE_OPTS
+           value: "-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=1026"
        command:
        - "/bin/bash"
        - "/tmp/hadoop-config/bootstrap.sh"
        - "-d"
+       ports:
+       - containerPort: 1026
+         name: jmx
+     - name: exporter
+       image: bitnami/jmx-exporter:0.17.0
+       command:
+         - java
+         - -jar
+         - jmx_prometheus_httpserver.jar
+       args:
+         - "9900"
+         - config.yaml
+       ports:
+       - containerPort: 9900
+         name: prometheus
+       volumeMounts:
+       - mountPath: /opt/bitnami/jmx-exporter/config.yaml
+         subPath: config.yaml
+         name: hadoop-exporter
+     volumes:
+     - name: hadoop-exporter
+       configMap:
+         name: hadoop-exporter
+         items:
+         - key: config.yaml
+           path: config.yaml

Vous devez ajouter toutes les lignes précédées du symbole + à votre configuration.

Ces instructions sont basées sur les modifications apportées à un chart Helm. Il est possible de télécharger et de modifier les modèles. L'exemple précédent suppose que tout se trouve dans un seul fichier YAML.

Pour appliquer les modifications de configuration à partir d'un fichier local, exécutez la commande suivante :

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Vous pouvez également utiliser Terraform pour gérer vos configurations.

Définir une ressource PodMonitoring

Pour la découverte des cibles, l'opérateur Managed Service pour Prometheus doit disposer d'une ressource PodMonitoring correspondant à l'exportateur Hadoop dans le même espace de noms.

Vous pouvez utiliser la configuration PodMonitoring suivante :

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: hadoop
  labels:
    app.kubernetes.io/name: hadoop
    app.kubernetes.io/part-of: google-cloud-managed-prometheus
spec:
  endpoints:
  - port: prometheus
    scheme: http
    interval: 30s
    path: /metrics
  selector:
    matchLabels:
      app.kubernetes.io/name: hadoop

Assurez-vous que les sélecteurs de libellés et le port correspondent aux sélecteurs et au port utilisés dans la section Installer l'exportateur Hadoop.

Pour appliquer les modifications de configuration à partir d'un fichier local, exécutez la commande suivante :

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Vous pouvez également utiliser Terraform pour gérer vos configurations.

Définir des règles et des alertes

Vous pouvez utiliser la configuration Rules suivante pour définir des alertes sur vos métriques Hadoop :

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  name: hadoop-rules
  labels:
    app.kubernetes.io/component: rules
    app.kubernetes.io/name: hadoop-rules
    app.kubernetes.io/part-of: google-cloud-managed-prometheus
spec:
  groups:
  - name: hadoop
    interval: 30s
    rules:
    - alert: HadoopDown
      annotations:
        description: |-
          Hadoop instance is down
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: Hadoop down (instance {{ $labels.instance }})
      expr: hadoop_namenode_numdeaddatanodes > 0
      for: 5m
      labels:
        severity: critical
    - alert: HadoopLowAvailableCapacity
      annotations:
        description: |-
          Hadoop low available capacity
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: Hadoop low available capacity (instance {{ $labels.instance }})
      expr: (hadoop_namenode_capacityused/hadoop_namenode_capacitytotal) > 0.8
      for: 5m
      labels:
        severity: critical
    - alert: HadoopVolumeFailure
      annotations:
        description: |-
          Hadoop volume failure
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: Hadoop volume failure (instance {{ $labels.instance }})
      expr: hadoop_namenode_volumefailurestotal > 0
      for: 5m
      labels:
        severity: critical

Pour appliquer les modifications de configuration à partir d'un fichier local, exécutez la commande suivante :

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Vous pouvez également utiliser Terraform pour gérer vos configurations.

Pour en savoir plus sur l'application de règles à votre cluster, consultez Évaluation des règles et alertes gérées.

Vous pouvez ajuster les seuils d'alerte en fonction de votre application.

Vérifier la configuration

Vous pouvez utiliser l'Explorateur de métriques pour vérifier que vous avez correctement configuré l'exportateur Hadoop. L'ingestion de vos métriques par Cloud Monitoring peut prendre une ou deux minutes.

Procédez comme suit pour vérifier que les métriques ont bien été ingérées :

  1. Dans la console Google Cloud, accédez à la page  Explorateur de métriques :

    Accéder à l'explorateur de métriques

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Surveillance.

  2. Dans la barre d'outils du volet de création de requêtes, sélectionnez le bouton nommé  MQL ou  MQL.
  3. Vérifiez que PromQL est sélectionné dans le bouton d'activation PromQL. Le bouton de langage se trouve dans la barre d'outils qui vous permet de mettre en forme votre requête.
  4. Saisissez et exécutez la requête suivante :
    up{job="hadoop", cluster="CLUSTER_NAME", namespace="NAMESPACE_NAME"}

Afficher les tableaux de bord

L'intégration à Cloud Monitoring comprend le tableau de bord Présentation de Hadoop-Prometheus. Les tableaux de bord sont installés automatiquement lorsque vous configurez l'intégration. Vous pouvez également afficher des aperçus statiques de tableaux de bord sans installer l'intégration.

Pour afficher un tableau de bord installé, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Tableaux de bord .

    Accéder à la page Tableaux de bord

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Surveillance.

  2. Sélectionnez l'onglet Liste des tableaux de bord.
  3. Choisissez la catégorie Intégrations.
  4. Cliquez sur le nom du tableau de bord, par exemple Présentation de Hadoop-Prometheus.

Pour afficher un aperçu statique du tableau de bord, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Intégrations  :

    Accéder à la page Intégrations

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Surveillance.

  2. Cliquez sur le filtre de plate-forme de déploiement Kubernetes Engine.
  3. Recherchez l'intégration Apache Hadoop et cliquez sur Afficher les détails.
  4. Sélectionnez l'onglet Tableaux de bord.

Dépannage

Pour en savoir plus sur la résolution des problèmes d'ingestion de métriques, consultez la section Problèmes liés à la collecte par les exportateurs dans la section Résoudre les problèmes côté ingestion.