Dataflow Insights verwenden

Sie können Dataflow Insights verwenden, um die Jobleistung zu optimieren. In diesem Thema erfahren Sie, wie Sie mit Dataflow Insights mithilfe von gcloud oder der REST API interagieren. Sie können Insights auch in der Dataflow Console prüfen. Weitere Informationen zum Überprüfen von Insights in der Console finden Sie unter Empfehlungen.

Überblick

Dataflow Insights bietet Statistiken zur Verbesserung der Jobleistung, zur Reduzierung der Kosten und zur Fehlerbehebung. Dataflow Insights ist Teil des Recommender-Dienstes und ist über den Typ google.dataflow.diagnostics.Insight verfügbar.

Beachten Sie bei der Arbeit mit Dataflow Insights, dass einige Empfehlungen für Ihren Anwendungsfall möglicherweise nicht relevant sind.

Vorbereitung

Bevor Sie Dataflow Insights verwenden können, müssen Sie die folgenden Schritte ausführen.

  1. Aktivieren Sie die Recommender API.
  2. Prüfen Sie, ob Ihr Konto die folgenden Berechtigungen hat:

    • recommender.dataflowDiagnosticsInsights.get
    • recommender.dataflowDiagnosticsInsights.list
    • recommender.dataflowDiagnosticsInsights.update

    Sie können diese Berechtigungen einzeln erteilen oder eine der folgenden Rollen:

    • roles/recommender.dataflowDiagnosticsViewer
    • roles/recommender.dataflowDiagnosticsAdmin
    • roles/dataflow.viewer
    • roles/dataflow.developer
    • roles/dataflow.admin

Dataflow-Statistiken anfordern

Sie können die Dataflow-Statistiken wie unten gezeigt auflisten. Weitere Arten von Insight-Interaktionen finden Sie im Insight-Leitfaden für die Recommender API.

Dataflow-Statistiken auflisten

Verwenden Sie eine der folgenden Methoden, um alle Dataflow-Statistiken für Ihr Projekt in einer bestimmten Region aufzulisten:

gcloud

Mit dem Befehl gcloud recommender insights list können Sie alle Dataflow-Statistiken für Ihr Projekt in einer bestimmten Region aufrufen.

Ersetzen Sie vor dem Ausführen des Befehls die folgenden Werte:

  • PROJECT_ID: Die ID des Projekts, für das Sie Statistiken auflisten möchten.
  • REGION: die Region, in der Ihre Dataflow-Jobs ausgeführt werden. Beispiel: us-west1
gcloud recommender insights list --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

Die Ausgabe enthält alle Dataflow-Statistiken für Ihr Projekt in der angegebenen Region.

REST

Sie können die Methode Insights.list der Recommender API verwenden, um alle Dataflow-Statistiken für Ihr Projekt in einer bestimmten Region aufzulisten.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Die ID des Projekts, für das Sie Statistiken auflisten möchten.
  • REGION: die Region, in der Ihre Dataflow-Jobs ausgeführt werden. Beispiel: us-west1

HTTP-Methode und URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights

Führen Sie den folgenden Befehl aus, um Ihre Anfrage mit curl (Linux, macOS oder Cloud Shell) zu senden:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights"

Einzelne Dataflow-Statistik abrufen

Wenn Sie weitere Informationen zu einer einzelnen Statistik abrufen möchten, einschließlich der Beschreibung, des Status und aller mit ihr verknüpften Empfehlungen, verwenden Sie eine der folgenden Methoden:

gcloud

Verwenden Sie den Befehl gcloud recommender Insights describe mit Ihrer Insight-ID, um Informationen zu einer einzelnen Statistik anzuzeigen. Ersetzen Sie vor dem Ausführen des Befehls die folgenden Werte:

  • INSIGHT_ID: Die ID der Statistik, die Sie aufrufen möchten.
  • PROJECT_ID: Die ID des Projekts, für das Sie Statistiken auflisten möchten.
  • REGION: die Region, in der Ihre Dataflow-Jobs ausgeführt werden. Beispiel: us-west1
gcloud recommender insights describe INSIGHT_ID \
  --insight-type=google.dataflow.diagnostics.Insight \
  --project=PROJECT_ID \
  --location=REGION

In der Ausgabe sehen Sie die Statistik im Detail.

REST

Die Methode insights.get der Recommender API ruft eine einzelne Statistik ab. Bevor Sie die Anfragedaten verwenden, müssen Sie die folgenden Ersetzungen vornehmen:

  • PROJECT_ID: Die ID des Projekts, für das Sie Statistiken auflisten möchten.
  • REGION: die Region, in der Ihre Dataflow-Jobs ausgeführt werden. Beispiel: us-west1
  • INSIGHT_ID: Die ID der Statistik, die Sie aufrufen möchten.

HTTP-Methode und URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID

Führen Sie den folgenden Befehl aus, um Ihre Anfrage mit curl (Linux, macOS oder Cloud Shell) zu senden:

curl -X GET \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
  "https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/insightTypes/google.dataflow.diagnostics.Insight/insights/INSIGHT_ID"

Dataflow-Statistiken interpretieren

Nachdem Sie eine Statistik erhalten haben, können Sie deren Inhalt prüfen, um das durch sie hervorgehobene Muster der Ressourcennutzung zu verstehen. Zusätzlich zu den Standardattributen von Statistiken bietet Dataflow Insights die folgenden Untertypen:

  • AUTOSCALING_NOT_ENABLED: Autoscaling kann aktiviert werden. Der Job hat eine hohe CPU-Auslastung und verwendet die maximale Anzahl der festgelegten Worker. Die Aktivierung des Autoscalings könnte die Leistung verbessern.
  • HIGH_FAN_OUT: Zur Erhöhung der Parallelität kann nach den folgenden Transformationen eine Fusionsunterbrechung eingefügt werden.
  • MAX_NUM_WORKERS: Autoscaling: Maximale Anzahl von Workern könnte erhöht werden Der Job verwendet Autoscaling, eine hohe CPU-Auslastung und die maximal zulässige Anzahl von Workern. Eine Erhöhung der zulässigen maximalen Anzahl von Workern könnte die Leistung verbessern.
  • WORKER_OUT_OF_MEMORY: Einige der Worker für den Job sind fehlgeschlagen, weil nicht genügend Arbeitsspeicher vorhanden ist. Dies kann den Job verlangsamen oder zum Fehlschlagen führen.
  • PREBUILD_NOT_UTILIZED: Verwenden Sie den Workflow zur Vorerstellung des Worker-Images, um den Start-up des Workers zu beschleunigen und die Zuverlässigkeit der automatischen Skalierung zu verbessern.
  • ACTIVE_KEYS (Vorschau): Die Gesamtzahl der aktiven Schlüssel ist kleiner als die Gesamtzahl der Kerne und das Hochskalieren hilft nicht.
  • LONG_WORK_ITEM: Die Arbeit in einer zusammengefassten Phase dauert zu lange, was auf einen langsamen oder hängenden Vorgang hinweist.

Weitere Informationen zum Beheben von Problemen, die von Dataflow Insights erkannt werden, finden Sie unter Insights.

Dataflow Insights bietet auch ein spezielles content-Feld, das Unterfelder mit zusätzlichen Informationen und Metadaten zu einer Statistik enthält. Je nach Anwendungsfall können die folgenden content-Unterfelder nützlich sein:

  • jobName: der Name des Dataflow-Jobs.
  • description: Eine Beschreibung der Statistik auf Englisch.
  • title: der Titel der Statistik auf Englisch.

Insights

Hohes Fan-Out erkannt

Wenn Dataflow erkennt, dass ein Job eine oder mehrere Transformationen mit einem High-Fan-Out enthält, wird die folgende Meldung angezeigt:

High fan-out detected

Diese Nachricht erscheint, wenn ein ParDo mit einem hohen Verhältnis von Ausgabe-zu-Eingabe-Elementen mit einem nachfolgenden ParDo zusammengeführt wird. In diesem Fall wird das zweite ParDo sequenziell mit dem ersten ausgeführt, was alle Ausgabeelemente einer bestimmten Eingabe auf denselben Worker erzwingt und Parallelität reduziert und die Leistung verlangsamt.

So lösen Sie dieses Problem:

  • Fügen Sie einen GroupByKey ein und heben Sie die Gruppierung nach dem ersten ParDo auf. Der Dataflow-Dienst führt keine ParDo-Vorgänge über eine Zusammenfassung hinweg aus. Weitere Informationen finden Sie unter Fusion optimieren.
  • Übergeben Sie die Zwischen-PCollection als Nebeneingabe an ein anderes ParDo. Nebeneingaben werden vom Dataflow-Dienst immer erfasst.
  • Fügen Sie einen Reshuffle-Schritt ein. Die Umverteilung verhindert eine Zusammenführung, erstellt Prüfpunkte für die Daten und konfiguriert die Windowing-Strategie so, dass keine Daten gelöscht werden. Dataflow unterstützt Reshuffle, obwohl es in der Apache Beam-Dokumentation als verworfen markiert ist. Beachten Sie, dass das Umwandeln von Daten die Kosten für die Ausführung der Pipeline erhöhen kann.

Autoscaling: Maximale Anzahl von Workern konnte erhöht werden

Wenn Dataflow erkennt, dass ein Job die maximal zulässige Anzahl von Workern maxNumWorkers (oder max_num_workers) verwendet und dass der Job in diesem Fall möglicherweise mehr Worker verwendet, wenn dieses Maximum erhöht wurde, wird die folgende Meldung angezeigt:

maximum number of workers could be increased

Diese Empfehlung tritt beispielsweise für einen Batch- oder Streaming-Job auf, bei dem maxNumWorkers auf 50 gesetzt ist, wenn alle 50 Worker mit einer durchschnittlichen CPU-Auslastung von Workern über 80 % verwendet werden. Diese Empfehlung gilt auch für Streamingjobs mit maxNumWorkers auf 50, wenn alle 50 Worker mit einer durchschnittlichen CPU-Auslastung von über 50 % verwendet werden und die geschätzte Verarbeitungszeit des Jobs über 2 Minuten liegt.

In der Regel erhöht sich durch Erhöhen von maxNumWorkers der Pipelinedurchsatz. Eine Batchpipeline könnte in kürzerer Zeit abgeschlossen werden und eine Streamingpipeline könnte größere Datenspitzen verarbeiten und mehr Elemente pro Sekunde verarbeiten. Dies kann jedoch zu höheren Kosten führen. Weitere Informationen finden Sie unter Worker-Ressourcen – Preise. Weitere Informationen zur Funktionsweise des Autoscaling-Algorithmus und zur Konfiguration finden Sie in der Anleitung zur automatischen Skalierung.

So lösen Sie dieses Problem:

  • Erhöhen oder entfernen Sie die Pipelineoption maxNumWorkers. Ohne die Option verwendet Dataflow die im Autoscaling-Leitfaden aufgeführten Standardwerte.
  • Sie brauchen nichts zu tun, wenn die Pipelineleistung ausreichend ist.
    • Prüfen Sie bei Batchpipelines, ob die Gesamtlaufzeit Ihren Anforderungen entspricht.
    • Prüfen Sie für Streamingpipelines die Grafik Datenaktualität auf dem Tab Jobmesswerte der Jobseite. Überprüfen Sie, ob die Werte im Diagramm nicht kontinuierlich ansteigen und dass sie innerhalb akzeptabler Grenzen liegen.

Autoscaling: Durch Festlegen der anfänglichen Anzahl von Workern kann die Jobleistung verbessert werden

Wenn Dataflow erkennt, dass ein Job eine bestimmte Anzahl von Workern mehr als 50 % der Laufzeit verwendet, kann das Festlegen der anfänglichen Anzahl von Workern auf den empfohlenen Wert die Jobleistung verbessern, da die Ausführungszeit für oder verhindern, dass der Rückstand beim Aktualisieren eines Streamingjobs zunimmt.

Worker schlagen mit OutOfMemory-Fehlern fehl

Wenn Dataflow feststellt, dass Worker für einen Job wegen Speichermangels scheitern, wird die folgende Meldung angezeigt:

Some workers are out of memory

Einige Worker für den Job sind fehlgeschlagen, weil nicht genügend Arbeitsspeicher vorhanden ist. Es ist zwar möglich, dass der Job abgeschlossen wird, aber diese Fehler verhindern auch, dass der Job erfolgreich abgeschlossen wird oder die Leistung anderweitig verlangsamt.

Probieren Sie Folgendes aus:

Vorgefertigter Workflow nicht verwendet

Wenn Dataflow eine Pipeline erkennt, in der der Workflow zum Erstellen von Worker-Images nicht verwendet wird, wird die folgende Meldung angezeigt:

pre-build workflow not utilized

Wenn der Workflow zur Erstellung von Worker-Images nicht verwendet wird, verfügt die Pipeline über Abhängigkeiten, die zur Laufzeit wiederholt installiert werden. Diese Konfiguration verlangsamt die Startzeit des Workers, was den Durchsatz des Jobs beeinträchtigt und ein unzuverlässiges Autoscaling-Verhalten verursacht.

Um dieses Problem zu beheben, verwenden Sie den Workflow zur Vorerstellung des Worker-Images beim Starten der Pipeline. Weitere Informationen finden Sie unter Python-Abhängigkeiten vorab erstellen.

Wenn ein benutzerdefinierter vordefinierter Container bereits verwendet wird, fügen Sie die Option „--sdk_location=container“ hinzu und entfernen Sie die folgenden Optionen, um unnötige Installationen zu vermeiden:

  • „--setup_file“
  • „--requirements_file“
  • „--extra_package(s)“

Anzahl aktiver Schlüssel ist niedrig

Wenn Dataflow feststellt, dass ein Job in Verzug gerät, weil die Anzahl der aktiven Schlüssel geringer ist als die Gesamtzahl der Kerne und ein Hochskalieren nicht hilft, wird die folgende Meldung angezeigt:

Active keys can be increased

Dataflow verwendet Worker, um Nutzercode in Jobs auszuführen. Jeder Thread ist einem Schlüssel zugeordnet, der für eine zu verarbeitende Datenmenge verantwortlich ist. Ein Schlüssel kann aus Gründen der Korrektheit nur auf einem Kern ausgeführt werden.

In einigen Fällen werden einige Kerne überlastet, während andere inaktiv sind. Erhöhen Sie die Anzahl der Schlüssel, wodurch auch die Anzahl der aktiven Threads erhöht wird, um dieses Problem zu beheben.

Mögliche Lösungen zum Erhöhen von Schlüsseln: – Sie können die Anzahl der Schlüssel mit einem spezifischeren Schlüsseltyp erhöhen. Wenn der Schlüsseltyp beispielsweise IP address ist, sind weniger Schlüssel verfügbar. Wenn Sie jedoch den Schlüsseltyp in IP + [user identifier] ändern, sind mehr Schlüssel verfügbar, wodurch die Parallelität erhöht wird. – Informationen zu Pipelines, die in BigQuery schreiben, bei denen Senken den Engpass darstellen können, finden Sie in diesem Artikel. – Prüfen Sie bei anderen Quellen/Senken, ob sie einen numShards-Parameter haben, und erhöhen Sie ihn. Im Allgemeinen wird ein Shard einem Schlüssel zugeordnet. – Weitere allgemeine Hinweise zu unserem Ausführungsmodell finden Sie in diesem Artikel. – Fanout kann verwendet werden, um einen einzelnen Eingabeschlüssel zu nehmen und ihm einen Hash hinzuzufügen, um mehrere Ausgabeschlüssel zu erzeugen. Referenz

Phase braucht für Aufgaben zu lang

Wenn Dataflow erkennt, dass die Verarbeitung häufig zu lange dauert, wird die folgende Meldung angezeigt:

Stage spending too long on work

Dataflow sendet Arbeit an zusammengeführte Phasen in Elementpaketen, die verarbeitet werden sollen. Jedes Bundle wird als abgeschlossen betrachtet, sobald alle Elemente und ihre Ausgaben für die Phase verarbeitet wurden. Streamingpipelines sind für Arbeitseinheiten optimiert, die weniger als eine Minute dauern. Daher können lange Verarbeitungszeiten weitere Leistungsprobleme in Pipelines verursachen.

Dieses Problem kann durch hängende oder langsame Nutzertransformationen verursacht werden. Diese Transformationen können durch die Warnungen in Cloud Logging und den Tab "Diagnose" identifiziert werden, und zwar mit den Schlüsselformen "Vorgang wird ausgeführt" oder "Verarbeitung hängt". Sie können mit Cloud Profiler die Leistung von Nutzertransformationen prüfen, um festzustellen, ob dieses Problem durch eine Nutzertransformation verursacht wird. Verfolgen Sie dann, welcher Code die Verlangsamung verursacht und wie oft. Weitere Informationen finden Sie unter Häufige Dataflow-Fehler beheben.

Wenn die Untersuchung zeigt, dass die langen Verarbeitungszeiten nicht durch Nutzertransformationen verursacht werden, empfehlen wir Ihnen, den Cloud-Support zu kontaktieren und die zu untersuchenden Schritte zu beschreiben.

Job hängt an Arbeitsaufgaben fest

Wenn Dataflow erkennt, dass ein Schlüssel hängen bleibt, weil ein einzelnes Arbeitselement wiederholt fehlgeschlagen ist und es dann wiederholt wird, wird die folgende Meldung angezeigt:

Job is stuck due to failed and retried work item

In Dataflow werden alle Nachrichten in einer Pipeline unter einem bestimmten Schlüssel verarbeitet. Wenn während der Verarbeitung einer Nachricht ein Fehler auftritt, wird diese Nachricht wiederholt. Es ist akzeptabel, wenn eine Nachricht zwei- oder dreimal wiederholt wird. Wenn jedoch immer wieder Fehler auftreten, z. B. zehnmal hintereinander, weist dies normalerweise auf ein grundlegendes Problem mit dem Pipelinecode hin. Wenn eine bestimmte Nachricht an einem Schlüssel wiederholt wird, können andere Nachrichten unter demselben Schlüssel keine Fortschritte machen. Wenn eine Nachricht zehnmal oder häufiger fehlschlägt, wird das Problem wahrscheinlich nicht von selbst behoben. Dieser Nachrichtenfehler kann Pipelineprobleme wie die folgenden verursachen:

  • Wasserzeichen verzögern
  • Rückstand ansammeln
  • Abschluss eines Drain-Vorgangs verhindern

Zur Behebung dieses Problems untersuchen Sie die von der Empfehlung gemeldete Phase und prüfen die Logs, um den problematischen Code zu identifizieren. Aktualisieren Sie anschließend den Job mit dem neuen Pipelinecode, damit der Job nicht mehr festhängt.

Streaming Engine ist nicht aktiviert

Wenn Dataflow erkennt, dass Streaming Engine für einen Streamingjob nicht aktiviert ist, wird die folgende Meldung angezeigt:

This job isn't using Streaming Engine. It might benefit from having Streaming Engine enabled.

Die Verwendung von Streaming Engine bietet verschiedene potenzielle Vorteile, darunter ein besseres horizontales Autoscaling, eine verbesserte Unterstützung und eine geringere Nutzung von CPU-, Arbeitsspeicher- und nichtflüchtigen Speichern-Speicher-Ressourcen auf den Worker-VMs. Streaming Engine unterstützt auch die ressourcenbasierte Abrechnung.