Dataproc-Cluster diagnostizieren

Die Überprüfung von Logs und Konfigurationsinformationen kann nützlich sein, um Fehler bei einem Cluster oder Job zu beheben. Da es jedoch sehr viele Logs und Konfigurationsdateien gibt, kann es sehr zeitaufwändig sein, jede Einzelne zu erfassen und zu untersuchen. Zur Lösung dieses Problems unterstützen Dataproc-Cluster einen speziellen diagnose-Befehl über die Google Cloud-Befehlszeile. Mit diesem Befehl werden wichtige System-, Spark-, Hadoop- und Dataproc-Protokolle erfasst und archiviert. Anschließend wird das Archiv in das Cloud Storage-Bucket hochgeladen, das an Ihrem Cluster angehängt.

Diagnosebefehl der Google Cloud-Befehlszeile verwenden

Sie können den diagnose-Befehl der Google Cloud-Befehlszeile für Ihre Dataproc-Cluster verwenden (siehe Dataproc- und Google Cloud-Befehlszeile).

Sobald die gcloud-Befehlszeile installiert und konfiguriert ist, können Sie den Befehl gcloud dataproc clusters diagnose auf Ihrem Cluster ausführen, wie unten gezeigt. Ersetzen Sie cluster-name durch den Namen des Clusters und region durch die Region des Clusters, z. B. --region=us-central1.

gcloud dataproc clusters diagnose cluster-name \
    --region=region \
    ... other args ...

Der Befehl gibt den Cloud Storage-Speicherort der Archivdatei aus, die die Daten enthält (siehe In der Befehlsbefehlsausgabe enthaltene Elemente). Informationen zum Zugriff und Kopieren der Archivdatei finden Sie unter Durch Diagnose ermittelte Daten freigeben.

Diagnoseskript vom Masterknoten ausführen (optional)

Der Diagnosebefehl der Google Cloud-Befehlszeile kann fehlschlagen oder das Zeitlimit überschreiten, wenn sich ein Cluster im Fehlerstatus befindet und keine Diagnoseaufgaben vom Dataproc-Server akzeptieren kann. Um dieses Problem zu vermeiden, können Sie eine SSH-Verbindung zum Masterknoten herstellen, das Diagnoseskript herunterladen und dann das Skript lokal auf dem Masterknoten ausführen:

gcloud compute ssh hostname
gsutil cp gs://dataproc-diagnostic-scripts/diagnostic-script.sh .
sudo bash diagnostic-script.sh

Der Diagnose-Tarball wird in einem lokalen temporären Verzeichnis gespeichert. Wenn Sie möchten, können Sie der Anleitung in der Befehlsausgabe folgen, um sie in einen Cloud Storage-Bucket hochzuladen und den Google-Support zu teilen.

Vom "diagnose"-Befehl erfasste Daten freigeben

Sie haben zwei Möglichkeiten zur Freigabe des vom diagnose-Befehl erstellten Archivs:

  1. Laden Sie die Datei aus Cloud Storage herunter und geben Sie das heruntergeladene Archiv anschließend frei.
  2. Ändern Sie die Berechtigungen im Archiv, um anderen Nutzern oder Projekten der Google Cloud Platform Zugriff auf die Datei zu gewähren.

Mit dem folgenden Befehl werden beispielsweise Leseberechtigungen zum Diagnosearchiv in einem test-project hinzugefügt:

gsutil -m acl ch -g test-project:R path-to-archive

In der Ausgabe des "diagnose"-Befehls enthaltene Elemente

Mit dem diagnose-Befehl werden die folgenden Konfigurationsdateien, Logs und Ausgaben des Clusters in einer Archivdatei gespeichert. Die Archivdatei wird im Cloud Storage-Bucket abgelegt, der mit dem Dataproc-Cluster verknüpft ist (wie oben beschrieben).

Zusammenfassung der Diagnose

Das Diagnoseskript analysiert automatisch gesammelte Daten und generiert ein summary.txt im Stammverzeichnis des Diagnose-Tarballs. Die Zusammenfassung bietet eine allgemeine Übersicht über den Clusterstatus, einschließlich YARN, HDFS, Laufwerk, Netzwerk usw. und Warnungen, die Sie auf mögliche Probleme hinweisen.

Informationen zu Daemons und Dienstleistungen

Ausgeführter Befehl Speicherort im Archiv
yarn node -list -all /system/yarn-nodes.log
hdfs dfsadmin -report -live -decommissioning /system/hdfs-nodes.log
hdfs dfs -du -h /system/hdfs-du.log
service --status-all /system/service.log
systemctl --type service /system/systemd-services.log
curl "http://${HOSTNAME}:8088/jmx" /metrics/resource_manager_jmx
curl "http://${HOSTNAME}:8088/ws/v1/cluster/apps" /metrics/yarn_app_info
curl "http://${HOSTNAME}:8088/ws/v1/cluster/nodes" /metrics/yarn_node_info
curl "http://${HOSTNAME}:9870/jmx" /metrics/namenode_jmx

JVM-Informationen

Ausgeführter Befehl Speicherort im Archiv
jstack -l "${DATAPROC_AGENT_PID}" jstack/agent_${DATAPROC_AGENT_PID}.jstack
jstack -l "${PRESTO_PID}" jstack/agent_${PRESTO_PID}.jstack
jstack -l "${JOB_DRIVER_PID}" jstack/driver_${JOB_DRIVER_PID}.jstack
jinfo "${DATAPROC_AGENT_PID}" jinfo/agent_${DATAPROC_AGENT_PID}.jstack
jinfo "${PRESTO_PID}" jinfo/agent_${PRESTO_PID}.jstack
jinfo "${JOB_DRIVER_PID}" jinfo/agent_${JOB_DRIVER_PID}.jstack

Linux-Systeminformationen

Ausgeführter Befehl Speicherort im Archiv
df -h /system/df.log
ps aux /system/ps.log
free -m /system/free.log
netstat -anp /system/netstat.log
sysctl -a /system/sysctl.log
uptime /system/uptime.log
cat /proc/sys/fs/file-nr /system/fs-file-nr.log
ping -c 1 /system/cluster-ping.log

Protokolldateien

Enthaltene Elemente Speicherort im Archiv
Alle Logs in /var/log mit folgenden Präfixen im Dateinamen:
cloud-sql-proxy
dataproc
druid
gcdp
gcs
google
hadoop
hdfs
hive
knox
presto
spark
syslog
yarn
zookeeper
Dateien werden im Archivordner logs mit dem Original-Dateinamen gespeichert.
Start-Logs für jeden einzelnen Dataproc-Knoten (Master und Worker) im Cluster Dateien werden im Archivordner node_startup abgelegt, der separate Unterordner für jede Maschine im Cluster enthält.
Component Gateway-Logs von journalctl -u google-dataproc-component-gateway /logs/google-dataproc-component-gateway.log

Konfigurationsdateien

Enthaltene Elemente Speicherort im Archiv
VM-Metadaten /conf/dataproc/metadata
Umgebungsvariablen in /etc/environment /conf/dataproc/environment
Dataproc-Attribute /conf/dataproc/dataproc.properties
Alle Dateien in /etc/google-dataproc/ /conf/dataproc/
Alle Dateien in /etc/hadoop/conf/ /conf/hadoop/
Alle Dateien in /etc/hive/conf/ /conf/hive/
Alle Dateien in /etc/hive-hcatalog/conf/ /conf/hive-hcatalog/
Alle Dateien in /etc/knox/conf/ /conf/knox/
Alle Dateien in /etc/pig/conf/ /conf/pig/
Alle Dateien in /etc/presto/conf/ /conf/presto/
Alle Dateien in /etc/spark/conf/ /conf/spark/
Alle Dateien in /etc/tez/conf/ /conf/tez/
Alle Dateien in /etc/zookeeper/conf/ /conf/zookeeper/