Flexible Resource Scheduling in Cloud Dataflow verwenden

Auf dieser Seite wird erläutert, wie Sie Flexible Resource Scheduling (FlexRS) für automatisch skalierte Batchpipelines in Dataflow aktivieren.

FlexRS

FlexRS reduziert die Kosten für die Batchverarbeitung. Dazu werden erweiterte Planungsverfahren, der Dataflow Shuffle-Dienst sowie eine Kombination aus VM-Instanzen auf Abruf und normalen VMs verwendet. Durch die parallele Ausführung von VMs auf Abruf und regulären VMs verbessert Dataflow die Nutzerfreundlichkeit, wenn Compute Engine VM-Instanzen auf Abruf während eines Systemereignisses beendet. FlexRS gewährleistet, dass die Pipeline weiter verarbeitet wird und keine geleistete Arbeit verloren geht, wenn Ihre VMs auf Abruf von Compute Engine vorzeitig beendet werden.

Jobs mit FlexRS verwenden die dienstbasierte Dataflow Shuffle-Funktion für Join- und Gruppierungsvorgänge. Aus diesem Grund nutzen FlexRS-Jobs keine nichtflüchtigen Speicherressourcen zum Speichern von temporären Berechnungsergebnissen. Dank Dataflow Shuffle kann FlexRS besser mit dem vorzeitigen Beenden einer Worker-VM umgehen, da der Dataflow-Dienst keine Daten an die verbleibenden Worker umverteilen muss. Allerdings benötigt jeder Dataflow-Worker trotzdem ein kleines nichtflüchtiges Speicher-Volume mit 25 GB, um das Maschinen-Image und temporäre Logs zu speichern.

Bei der Planung von FlexRS-Jobs gibt es eine Verzögerung. Daher eignet sich FlexRS am besten für Arbeitslasten, die nicht zeitkritisch sind, beispielsweise tägliche oder wöchentliche Jobs, die innerhalb eines bestimmten Zeitraums abgeschlossen werden können.

Verzögerte Planung

Wenn Sie einen FlexRS-Job senden, wird er vom Dataflow-Dienst in eine Warteschlange gestellt und innerhalb von sechs Stunden nach der Joberstellung zur Ausführung gesendet. Dataflow ermittelt den besten Zeitpunkt für den Jobstart innerhalb dieses Zeitfensters, basierend auf der verfügbaren Kapazität und anderen Faktoren.

Nach dem Senden eines FlexRS-Jobs führt der Dataflow-Dienst folgende Schritte aus:

  1. Liefert unmittelbar nach dem Senden des Jobs eine Job-ID.
  2. Führt einen ersten Validierungslauf durch.
  3. Verwendet das Ergebnis der ersten Validierung, um den nächsten Schritt zu bestimmen:

    1. Im Erfolgsfall wird der Job in eine Warteschlange gestellt, um auf den verzögerten Start zu warten.
    2. In allen anderen Fällen schlägt der Job fehl und der Dataflow-Dienst meldet die Fehler.

Nach dem Senden eines FlexRS-Jobs werden im Erfolgsfall in der Monitoring-Oberfläche von Dataflow für den Job eine ID und der Status in der Warteschlange angezeigt. Andernfalls erhält der Job den Status Fehlgeschlagen.

Erste Validierung

Nach dem Senden eines FlexRS-Jobs wird dieser nicht sofort gestartet. Während der ersten Validierung prüft der Dataflow-Dienst die Ausführungsparameter und die Einstellungen der Google Cloud-Umgebung, z. B. IAM-Rollen und Netzwerkkonfigurationen. An diesem Punkt validiert Dataflow den Job so weit wie möglich und meldet potenzielle Fehler. Diese erste Validierung wird Ihnen nicht in Rechnung gestellt.

Bei der ersten Validierung wird kein Nutzercode ausgeführt. Sie müssen Ihren Code mit dem Direct Runner von Apache Beam oder Jobs ohne FlexRS selbst auf Probleme prüfen. Wenn sich zwischen der Joberstellung und der verzögerten Planung des Jobs Änderungen an der Google Cloud-Umgebung ergeben, kann die erste Validierung des Jobs zwar erfolgreich verlaufen, doch kann der Job beim Starten fehlschlagen.

FlexRS aktivieren

Wenn Sie einen FlexRS-Job erstellen, wird auch dann ein gleichzeitiges Kontingent akzeptiert, wenn sich der Job im Status In der Warteschlange befindet. Während der ersten Validierung werden keine anderen Kontingente überprüft oder reserviert. Prüfen Sie daher vor der Aktivierung von FlexRS, ob Sie genügend Kontingente für Google Cloud-Projektressourcen haben, um den Job zu starten. Sie benötigen unter anderem ein zusätzliches Kontingent für CPUs auf Abruf, normale CPUs und IP-Adressen, sofern Sie nicht den Parameter für öffentliche IPs deaktivieren.

Wenn Ihr Kontingent nicht ausreicht, stehen Ihrem Konto unter Umständen nicht genügend Ressourcen zur Verfügung, wenn der FlexRS-Job bereitgestellt wird. Dataflow wählt standardmäßig für 90 % der Worker im Worker-Pool VMs auf Abruf aus. Achten Sie also beim Planen des CPU-Kontingents darauf, dass Ihr Kontingent für VMs auf Abruf ausreicht. Es gibt standardmäßig kein separates Kontingent für VMs auf Abruf. Sie müssen das Kontingent für VMs auf Abruf explizit anfordern. Andernfalls fehlen dem FlexRS-Job die Ressourcen, um zeitnah ausgeführt zu werden.

Preise

Für FlexRS-Jobs werden folgende Ressourcen in Rechnung gestellt:

  • Normale CPUs und CPUs auf Abruf
  • Arbeitsspeicherressourcen
  • Dataflow Shuffle-Ressourcen
  • 25 GB nichtflüchtige Speicherressourcen pro Worker

Obwohl Dataflow zum Ausführen des FlexRS-Jobs sowohl Worker auf Abruf als auch normale Worker verwendet, wird Ihnen unabhängig vom Worker-Typ ein einheitlicher ermäßigter Preis im Vergleich zu den regulären Dataflow-Preisen berechnet. Dataflow Shuffle und nichtflüchtige Speicherressourcen werden nicht ermäßigt.

Weitere Informationen finden Sie auf der Seite Dataflow-Preisdetails.

FlexRS-Anforderungen

Für FlexRS sind folgende Funktionen erforderlich:

  • Apache Beam SDK für Java 2.12.0 oder höher oder das Apache Beam SDK für Python 2.12.0 oder höher.
  • Dataflow Shuffle. Durch die Aktivierung von FlexRS wird Dataflow Shuffle automatisch aktiviert.

Pipelineoptionen

Java

Verwenden Sie zum Aktivieren eines FlexRS-Jobs die Pipelineoption --flexRSGoal=COST_OPTIMIZED. Dabei bedeutet das kostenoptimierte Ziel, dass der Dataflow-Dienst alle verfügbaren ermäßigten Ressourcen oder --flexRSGoal=SPEED_OPTIMIZED auswählt und die Optimierung eine niedrigere Ausführungszeit zum Ziel hat.

FlexRS-Jobs wirken sich auf folgende Ausführungsparameter aus:

  • numWorkers legt nur die anfängliche Anzahl der Worker fest. Allerdings können Sie zur Kostenkontrolle den Parameter maxNumWorkers festlegen.
  • Sie können autoscalingAlgorithm=NONE nicht festlegen.
  • Das Flag zone kann für FlexRS-Jobs nicht angegeben werden. Der Dataflow-Dienst wählt die Zone für alle FlexRS-Jobs in der Region aus, die Sie mit dem Parameter region angegeben haben.
  • Sie müssen einen regionalen Dataflow-Endpunkt als Ihre region auswählen.
  • Sie müssen die Standardeinstellung n1-standard-2 verwenden oder n1-highmem-16 für Ihren workerMachineType auswählen.

Das folgende Beispiel zeigt, wie Sie Ihre normalen Pipelineparameter um Parameter für die Verwendung von FlexRS ergänzen:

--flexRSGoal=COST_OPTIMIZED \
--region=europe-west1 \
--maxNumWorkers=10 \
--workerMachineType=n1-highmem-16

Wenn Sie region, maxNumWorkers und workerMachineType weglassen, bestimmt der Dataflow-Dienst den Standardwert.

Python

Verwenden Sie zum Aktivieren eines FlexRS-Jobs die Pipelineoption --flexrs_goal=COST_OPTIMIZED. Dabei bedeutet das kostenoptimierte Ziel, dass der Dataflow-Dienst alle verfügbaren ermäßigten Ressourcen oder --flexrs_goal=SPEED_OPTIMIZED auswählt und die Optimierung eine niedrigere Ausführungszeit zum Ziel hat.

FlexRS-Jobs wirken sich auf folgende Ausführungsparameter aus:

  • num_workers legt nur die anfängliche Anzahl der Worker fest. Allerdings können Sie zur Kostenkontrolle den Parameter max_num_workers festlegen.
  • Sie können autoscaling_algorithm=NONE nicht festlegen.
  • Das Flag zone kann für FlexRS-Jobs nicht angegeben werden. Der Dataflow-Dienst wählt die Zone für alle FlexRS-Jobs in der Region aus, die Sie mit dem Parameter region angegeben haben.
  • Sie müssen einen regionalen Dataflow-Endpunkt als Ihre region auswählen.
  • Sie müssen die Standardeinstellung n1-standard-2 verwenden oder n1-highmem-16 für Ihren machine_type auswählen.

Das folgende Beispiel zeigt, wie Sie Ihre normalen Pipelineparameter um Parameter für die Verwendung von FlexRS ergänzen:

--flexrs_goal=COST_OPTIMIZED \
--region=europe-west1 \
--max_num_workers=10 \
--machine_type=n1-highmem-16

Wenn Sie region, max_num_workers und machine_type weglassen, bestimmt der Dataflow-Dienst den Standardwert.

FlexRS-Jobs überwachen

Sie können den Status Ihres FlexRS-Jobs in der Google Cloud Console an zwei Stellen verfolgen:

  1. Auf der Seite Jobs, auf der alle Ihre Jobs angezeigt werden
  2. Die Monitoring-Oberfläche des von Ihnen gesendeten Jobs.

Auf der Seite Jobs haben Jobs, die noch nicht gestartet wurden, den Status In der Warteschlange.

Eine Liste der Dataflow-Jobs in der Cloud Console, die einen Job mit dem Status "In der Warteschlange" enthalten.
Abbildung 1: Eine Liste der Dataflow-Jobs in der Cloud Console, die einen Job mit dem Status In der Warteschlange enthalten.

Auf der Seite Monitoring-Oberfläche wird für Jobs, die sich in der Warteschlange befinden, auf dem Tab Jobgrafik die Meldung "Grafik wird nach dem Start eines Jobs angezeigt" angezeigt.

Ein einzelner Pipelinejob in der Warteschlange, wie er in der Monitoring-Oberfläche von Cloud Dataflow angezeigt wird.
Abbildung 2: Ein einzelner Pipelinejob in der Warteschlange, wie er in der Monitoring-Oberfläche von Cloud Dataflow angezeigt wird.