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 das Cloud SDK. 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.

"Cloud SDK diagnose"-Befehl verwenden

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

Sobald das Cloud SDK installiert und konfiguriert ist, können Sie den Befehl gcloud dataproc clusters diagnose wie unten gezeigt auf Ihrem Cluster ausführen. Ersetzen Sie cluster-name durch den Namen Ihres 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 Namen und den Speicherort des Archivs an, in dem die Daten enthalten sind.

...
Saving archive to cloud
Copying file:///tmp/tmp.FgWEq3f2DJ/diagnostic.tar ...
Uploading   ...23db9-762e-4593-8a5a-f4abd75527e6/diagnostic.tar ...
Diagnostic results saved in:
gs://bucket-name/.../cluster-uuid/.../job-id/diagnostic.tar
    ...
In diesem Beispiel ist bucket-name der Cloud Storage-Bucket, der mit Ihrem Cluster verknüpft ist, cluster-uuid ist die eindeutige ID (UUID) Ihres Clusters und job-id ist die UUID, die zur Systemaufgabe gehört, die den Diagnosebefehl ausgeführt hat.

Wenn Sie einen Dataproc-Cluster erstellen, erstellt Dataproc einen Cloud Storage-Bucket und hängt ihn an Ihren Cluster an. Der "diagnose"-Befehl gibt die Archivdatei an diesen Bucket aus. Um den Namen des von Dataproc erstellten Bucket zu bestimmen, verwenden Sie den Cloud SDK-Befehl clusters describe. Der mit dem Cluster verknüpfte Bucket wird neben configurationBucket aufgelistet.

gcloud dataproc clusters describe cluster-name \
    --region=region \
...
  clusterName: cluster-name
  clusterUuid: daa40b3f-5ff5-4e89-9bf1-bcbfec6e0eac
  configuration:
  configurationBucket: dataproc-edc9d85f-...-us
  ...

Diagnoseskript vom Masterknoten ausführen (optional)

Der "diagnose"-Befehl des Cloud SDK kann fehlschlagen oder überschritten werden, wenn sich ein Cluster im Fehlerzustand befindet, und er kann keine Diagnoseaufgaben vom Dataproc-Server akzeptieren. 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/