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.
Übersicht
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.
- Aktivieren Sie die Recommender API.
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 lässt sich die Jobleistung verbessern
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:
- Erhöhen Sie manuell den für die Worker verfügbaren Speicherplatz.
- Um den benötigten Arbeitsspeicher reduzieren können Sie ein Profil der Speichernutzung erstellen. Weitere Informationen finden Sie unter Fehlerbehebung bei Dataflow-Fehlern aufgrund von unzureichendem Arbeitsspeicher.
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
Zum Ausführen von Nutzercode in Jobs verwendet Dataflow Worker. 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 sind einige Kerne überlastet, während andere inaktiv sind. Erhöhen Sie die Anzahl der Schlüssel, um dieses Problem zu beheben. Dadurch erhöht sich auch die Anzahl der aktiven Threads.
Mögliche Lösungen zur Erhöhung der Anzahl der Schlüssel:
– Sie können die Anzahl der Schlüssel erhöhen, indem Sie einen spezifischeren Schlüsseltyp verwenden. Wenn der Schlüsseltyp beispielsweise IP address
ist, sind weniger Schlüssel verfügbar. Wenn Sie den Schlüsseltyp jedoch in IP + [user identifier]
ändern, sind mehr Schlüssel verfügbar, was die Parallelität erhöht.
– Informationen zu Pipelines, die in BigQuery schreiben und bei denen Senken ein potenzieller Engpass sein könnten, finden Sie in diesem Artikel.
– Prüfen Sie bei anderen Quellen/Speichern, ob sie einen numShards
-Parameter haben, und erhöhen Sie ihn. Im Allgemeinen wird ein Shard einem Schlüssel zugeordnet.
– In diesem Artikel finden Sie allgemeinere Informationen zu unserem Ausführungsmodell.
– 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 bei Arbeitselement fest
Wenn Dataflow feststellt, dass ein Schlüssel hängt, weil ein einzelnes Arbeitselement wiederholt fehlgeschlagen ist und dann noch einmal versucht wurde, 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 bei der Verarbeitung einer Nachricht ein Fehler auftritt, wird ein neuer Versuch unternommen. Es ist in Ordnung, wenn eine Nachricht zwei- oder dreimal wiederholt wird. Wenn Fehler jedoch immer wieder auftreten, z. B. zehnmal hintereinander, weist dies in der Regel auf ein grundlegendes Problem mit dem Pipelinecode hin. Wenn ein bestimmter Schlüssel noch einmal versucht wird, können andere Nachrichten mit demselben Schlüssel nicht fortgesetzt werden. Wenn eine Nachricht zehnmal oder öfter fehlschlägt, lässt sich das Problem wahrscheinlich nicht von selbst beheben. Dieser Fehler kann zu Pipelineproblemen führen, z. B.:
- Verzögerung des Wasserzeichens
- anwachsendes Backlog
- verhindern, dass ein Drain-Vorgang abgeschlossen wird
Um dieses Problem zu beheben, untersuchen Sie die Phase, für die die Empfehlung gemeldet wurde, und prüfen Sie 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 nicht aktiviert
Wenn Dataflow erkennt, dass für einen Streamingjob die Streaming Engine 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.