DAG-Probleme aufgrund von unzureichendem Arbeitsspeicher und Speicherplatz beheben

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Diese Anleitung beschreibt Schritte zum Debuggen eines fehlgeschlagenen Airflow-DAG in Cloud Composer und diagnostizieren ressourcenbezogene Probleme mit Workern, z. B. nicht genügend Worker-Arbeitsspeicher oder Speicherplatz, dank der Logs und der Umgebung, des Monitorings.

Einleitung

In diesem Tutorial liegt der Schwerpunkt auf ressourcenbezogenen Problemen, um zu zeigen, wie Sie einen DAG debuggen können.

Ein Mangel an zugewiesenen Worker-Ressourcen führt zu DAG-Fehlern. Wenn bei einer Airflow-Aufgabe der Arbeitsspeicher oder Speicherplatz aufgebraucht ist, wird möglicherweise eine Airflow-Ausnahme angezeigt, z. B.:

WARNING airflow.exceptions.AirflowException: Task received SIGTERM signal
INFO - Marking task as FAILED.

oder

Task exited with return code Negsignal.SIGKILL

In solchen Fällen wird in der Regel empfohlen, die Ressourcen der Airflow-Worker zu erhöhen oder die Anzahl der Aufgaben pro Worker zu reduzieren. Da Airflow jedoch Ausnahmen können generisch sein, es kann schwierig sein, die das Problem verursacht.

In diesem Tutorial erfahren Sie, wie Sie den Grund für einen DAG-Fehler diagnostizieren und den Ressourcentyp, der Probleme verursacht, durch Debugging von zwei Beispiel-DAGs identifizieren die aufgrund von zu wenig Worker-Arbeitsspeichern und -speichern fehlschlagen.

Lernziele

  • Führen Sie Beispiel-DAGs aus, die aus folgenden Gründen fehlschlagen:

    • Fehlender Worker-Arbeitsspeicher
    • Nicht genügend Speicherplatz für Worker
  • Ursachen für den Fehler diagnostizieren

  • Zugewiesene Worker-Ressourcen erhöhen

  • DAGs mit neuen Ressourcenlimits testen

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

Nach Abschluss dieser Anleitung können Sie weitere Kosten durch Löschen von erstellten Ressourcen vermeiden. Weitere Informationen finden Sie unter Bereinigen.

Hinweise

In diesem Abschnitt werden die Schritte beschrieben, die Sie ausführen müssen, bevor Sie mit der Anleitung beginnen.

Projekt erstellen und konfigurieren

Für diese Anleitung benötigen Sie ein Google Cloud-Projekt. Konfigurieren Sie das Projekt so:

  1. Wählen Sie in der Google Cloud Console ein Projekt aus oder erstellen Sie eines:

    Zur Projektauswahl

  2. Die Abrechnung für Ihr Projekt muss aktiviert sein. Hier erfahren Sie, wie Sie prüfen, ob die Abrechnung für ein Projekt aktiviert ist.

  3. Der Nutzer Ihres Google Cloud-Projekts muss die folgenden Rollen haben, um die erforderlichen Ressourcen zu erstellen:

    • Administrator für Umgebung und Storage-Objekte (roles/composer.environmentAndStorageObjectAdmin)
    • Compute-Administrator (roles/compute.admin)
    • Monitoring-Bearbeiter (roles/monitoring.editor)

Die APIs für Ihr Projekt aktivieren

Enable the Cloud Composer API.

Enable the API

Cloud Composer-Umgebung erstellen

Erstellen Sie eine Cloud Composer 2-Umgebung.

Beim Erstellen der Umgebung gewähren Sie dem Konto des Composer-Dienst-Agents die Rolle Dienst-Agent-Erweiterung für die Cloud Composer v2 API (roles/composer.ServiceAgentV2Ext). Cloud Composer verwendet dieses Konto, um Vorgänge auszuführen in Ihrem Google Cloud-Projekt.

Limits für Worker-Ressourcen prüfen

Prüfen Sie die Airflow-Worker-Ressourcenlimits in Ihrer Umgebung:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

  2. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

  3. Rufen Sie den Tab Umgebungskonfiguration auf.

  4. Gehen Sie zu Ressourcen > Konfiguration der Arbeitslasten > Worker.

  5. Prüfen Sie, ob die Werte 0,5 vCPUs, 1,875 GB Arbeitsspeicher und 1 GB Speicherplatz sind. Dies sind die Limits für die Airflow-Worker-Ressourcen, mit denen Sie im nächsten Schritt dieser Anleitung.

Beispiel: Probleme mit unzureichendem Arbeitsspeicher diagnostizieren

Laden Sie den folgenden Beispiel-DAG in die Umgebung hoch, die Sie in den vorherigen Schritten erstellt haben. In dieser Anleitung heißt dieser DAG create_list_with_many_strings

Dieser DAG enthält eine Aufgabe, die die folgenden Schritte ausführt:

  1. Erstellt eine leere Liste s.
  2. Führt einen Zyklus aus, um der Liste den String More anzuhängen.
  3. Gibt aus, wie viel Arbeitsspeicher die Liste verbraucht, und wartet in jedem 1-Sekunden-Wert 1 Sekunde Minuten Durchlauf.
import time

import airflow
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
import sys
from datetime import timedelta

default_args = {
    'start_date': airflow.utils.dates.days_ago(0),
    'retries': 0,
    'retry_delay': timedelta(minutes=10)
}

dag = DAG(
    'create_list_with_many_strings',
    default_args=default_args,
    schedule_interval=None)


def consume():
    s = []
    for i in range(120):
        for j in range(1000000):
            s.append("More")
        print(f"i={i}; size={sys.getsizeof(s) / (1000**3)}GB")
        time.sleep(1)


t1 = PythonOperator(
    task_id='task0',
    python_callable=consume,
    dag=dag,
    depends_on_past=False,
    retries=0
)

Beispiel-DAG auslösen

Beispiel-DAG create_list_with_many_strings auslösen:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

  2. Klicken Sie in der Spalte Airflow-Webserver auf den Link Airflow für Ihre Umgebung.

  3. Klicken Sie in der Airflow-Weboberfläche auf der Seite DAGs in der Spalte Links für Ihren DAG auf die Schaltfläche Trigger DAG.

  4. Klickbasierter Trigger

  5. Klicken Sie auf der Seite DAGs auf die ausgelöste Aufgabe und prüfen Sie die Ausgabeprotokolle, um sicherzustellen, dass der DAG gestartet wurde.

Während der Task ausgeführt wird, wird in den Ausgabeprotokollen die Arbeitsspeichergröße in GB ausgegeben, die vom DAG verwendet wird.

Nach einigen Minuten schlägt die Aufgabe fehl, da sie den Airflow-Worker überschreitet. 1,875 GB.

Fehlgeschlagenen DAG diagnostizieren

Wenn Sie zum Zeitpunkt des Fehlers mehrere Tasks ausgeführt haben, sollten Sie erwägen, und die Diagnose des Ressourcendrucks während dieser Zeit welche Aufgaben Ressourcendruck verursachen und welche Ressourcen Sie erhöhen müssen.

Airflow-Aufgabenlogs prüfen

Sie sehen, dass die Aufgabe aus dem DAG create_list_with_many_strings Failed.

Prüfen Sie die Logs der Aufgabe. Sie sehen den folgenden Logeintrag:

```none
{local_task_job.py:102} INFO - Task exited with return code
Negsignal.SIGKILL
```

`Netsignal.SIGKILL` might be an indication of your task using more memory
than the Airflow worker is allocated. The system sends
the `Negsignal.SIGKILL` signal to avoid further memory consumption.

Arbeitslasten überprüfen

Prüfen Sie die Arbeitslasten, um sicherzustellen, dass die Last Ihrer Aufgabe nicht dazu führt, dass der Knoten, auf dem der Pod ausgeführt wird, das Limit für den Arbeitsspeicherverbrauch überschreitet:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

  2. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

  3. Rufen Sie den Tab Umgebungskonfiguration auf.

  4. Gehen Sie zu Ressourcen > GKE-Cluster > Arbeitslasten: Klicken Sie auf Clusterarbeitslasten anzeigen.

  5. Prüfen Sie, ob einige der Arbeitslast-Pods einen ähnlichen Status wie den folgenden haben:

    Error with exit code 137 and 1 more issue.
    ContainerStatusUnknown with exit code 137 and 1 more issue
    

    Exit code 137 bedeutet, dass ein Container oder Pod versucht, mehr Arbeitsspeicher zu verwenden als zulässig. Der Prozess wird beendet, um die Arbeitsspeichernutzung zu verhindern.

Monitoring des Umgebungszustands und des Ressourcenverbrauchs prüfen

Prüfen Sie das Monitoring des Umgebungszustands und des Ressourcenverbrauchs:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

  2. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

  3. Rufen Sie den Tab Monitoring auf und wählen Sie Übersicht aus.

  4. Suchen Sie im Bereich Umgebungsübersicht nach dem Diagramm Umgebungszustand (Airflow-Monitoring-DAG). Er enthält einen roten Bereich, der der Zeit entspricht, zu der in den Protokollen Fehler ausgegeben wurden.

  5. Wählen Sie Worker aus und gehen Sie zur Grafik Gesamte Arbeitsspeichernutzung der Worker. Beachten Sie, dass die Zeile Arbeitsspeichernutzung zu dem Zeitpunkt, an dem der ausgeführt wurde.

Die Linie „Arbeitsspeichernutzung“ weist zu dem Zeitpunkt, zu dem die Aufgabe ausgeführt wurde, einen Anstieg auf.
Abbildung 1: Diagramm zur Arbeitsspeichernutzung der gesamten Worker (zum Vergrößern klicken)

Auch wenn die Linie für die Arbeitsspeichernutzung in der Grafik das Limit nicht erreicht, müssen Sie bei der Diagnose der Fehlerursachen berücksichtigen, nur zuweisbarer Arbeitsspeicher, während die Linie Arbeitsspeicherlimit im Diagramm für den Gesamtarbeitsspeicher steht. einschließlich der von GKE reservierten Kapazitäten.

In diesem Beispiel ist das Worker-Arbeitsspeicherlimit auf 1, 875 GB festgelegt. GKE reserviert 25 % der ersten 4 GiB Arbeitsspeicher. GKE reserviert außerdem einen zusätzlichen Bereinigungsschwellenwert: 100 MiB Arbeitsspeicher pro Knoten für die Kubelet-Bereinigung.

Der zuweisbare Arbeitsspeicher wird so berechnet:

ALLOCATABLE = CAPACITY - RESERVED - EVICTION-THRESHOLD

Wenn das Speicherlimit 1,875 GB beträgt, beträgt der tatsächlich zuweisbare Arbeitsspeicher:

1.75 GiB (1.875GB) - 0.44 (25% GiB reserved) - 0.1 = 1.21 GiB (~1.3 GB).

Wenn Sie dieses tatsächliche Limit an das Diagramm der Arbeitsspeichernutzung anhängen, sehen Sie, dass der Anstieg der Arbeitsspeichernutzung der Aufgabe den tatsächlichen Arbeitsspeicher und Sie können daraus schließen, dass die Aufgabe aufgrund unzureichender Worker fehlgeschlagen ist. zu speichern.

Worker-Speicherlimit erhöhen

Weisen Sie zusätzlichen Worker-Arbeitsspeicher zu, damit der Beispiel-DAG erfolgreich ist:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

  2. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

  3. Rufen Sie den Tab Umgebungskonfiguration auf.

  4. Suchen Sie die Konfiguration unter Ressourcen > Arbeitslasten und Klicken Sie auf Bearbeiten.

  5. Geben Sie im Abschnitt Worker im Feld Memory den neuen Arbeitsspeicher an. Limit für Airflow-Worker. Verwenden Sie in dieser Anleitung 3 GB.

  6. Speichern Sie die Änderungen und warten Sie einige Minuten, bis die Airflow-Worker neu gestartet wurden.

DAG mit neuem Arbeitsspeicherlimit testen

Lösen Sie den DAG create_list_with_many_strings noch einmal aus und warten Sie, bis er ausgeführt wird.

  1. In den Ausgabeprotokollen der DAG-Ausführung wird Marking task as SUCCESS angezeigt und der Status der Aufgabe ist Erfolgreich.

  2. Prüfen Sie auf dem Tab Monitoring im Bereich Umgebungsübersicht, ob es keine roten Bereiche gibt.

  3. Klicken Sie auf den Abschnitt Worker und suchen Sie die Gesamtspeichernutzung der Worker. Diagramm. Sie sehen, dass die Linie Speicherlimit die Änderung des Speicherlimits widerspiegelt und die Linie Speichernutzung weit unter dem tatsächlichen zuweisbaren Speicherlimit liegt.

Beispiel: Probleme mit nicht ausreichendem Speicherplatz diagnostizieren

In diesem Schritt laden Sie zwei DAGs hoch, die große Dateien erstellen. Der erste DAG erstellt eine große Datei. Der zweite DAG erstellt eine große Datei und simuliert einen langwierigen Vorgang.

Die Größe der Datei in beiden DAGs überschreitet das Standardspeicherlimit von 1 GB für Airflow-Worker. Der zweite DAG enthält jedoch eine zusätzliche Warteaufgabe, um seine Dauer künstlich zu verlängern.

Die Unterschiede im Verhalten beider DAGs werden Sie in den nächsten Schritte.

DAG hochladen, durch den eine große Datei erstellt wird

Laden Sie den folgenden Beispiel-DAG in die Umgebung hoch, die Sie in den vorherigen Schritten erstellt haben. In dieser Anleitung heißt dieser DAG create_large_txt_file_print_logs.

Dieser DAG enthält eine Aufgabe, die die folgenden Schritte ausführt:

  1. Schreibt eine 1,5 GB große localfile.txt-Datei in den Speicher des Airflow-Workers.
  2. Damit wird die Größe der erstellten Datei mithilfe des Python-Moduls os ausgegeben.
  3. Gibt die Dauer der DAG-Ausführung jede Minute aus.
import airflow
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
import os
from datetime import timedelta
import time

default_args = {
    'start_date': airflow.utils.dates.days_ago(0),
    'retries': 0,
    'retry_delay': timedelta(minutes=10)
}

dag = DAG(
    'create_large_txt_file_print_logs',
    default_args=default_args,
    schedule_interval=None)


def consume():
    size = 1000**2  # bytes in 1 MB
    amount = 100

    def create_file():
        print(f"Start creating a huge file")
        with open("localfile.txt", "ab") as f:
            for j in range(15):
                f.write(os.urandom(amount) * size)
        print("localfile.txt size:", os.stat("localfile.txt").st_size / (1000**3), "GB")

    create_file()
    print("Success!")


t1 = PythonOperator(
    task_id='create_huge_file',
    python_callable=consume,
    dag=dag,
    depends_on_past=False,
    retries=0)

DAG hochladen, der bei einem langwierigen Vorgang eine große Datei erstellt

Imitieren eines lang andauernden DAG und Untersuchung der Auswirkungen der Aufgabendauer für den Endzustand den zweiten Beispiel-DAG in den Upload zu verbessern. In dieser Anleitung heißt dieser DAG long_running_create_large_txt_file_print_logs

Dieser DAG enthält eine Aufgabe, die die folgenden Schritte ausführt:

  1. Schreibt eine 1,5 GB große localfile.txt-Datei in den Speicher des Airflow-Workers.
  2. Damit wird die Größe der erstellten Datei mithilfe des Python-Moduls os ausgegeben.
  3. Es wird 1 Stunde und 15 Minuten gewartet, um die Zeit zu simulieren, die für Vorgänge mit der Datei erforderlich ist, z. B. das Lesen aus der Datei.
  4. Gibt alle 1 Minute die Dauer der DAG-Ausführung aus.
import airflow
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
import os
from datetime import timedelta
import time

default_args = {
    'start_date': airflow.utils.dates.days_ago(0),
    'retries': 0,
    'retry_delay': timedelta(minutes=10)
}

dag = DAG(
    'long_running_create_large_txt_file_print_logs',
    default_args=default_args,
    schedule_interval=None)


def consume():
    size = 1000**2  # bytes in 1 MB
    amount = 100

    def create_file():
        print(f"Start creating a huge file")
        with open("localfile.txt", "ab") as f:
            for j in range(15):
                f.write(os.urandom(amount) * size)
        print("localfile.txt size:", os.stat("localfile.txt").st_size / (1000**3), "GB")

    create_file()
    for k in range(75):
        time.sleep(60)
        print(f"{k+1} minute")

    print("Success!")


t1 = PythonOperator(
    task_id='create_huge_file',
    python_callable=consume,
    dag=dag,
    depends_on_past=False,
    retries=0)

Beispiel-DAGs auslösen

Lösen Sie den ersten DAG create_large_txt_file_print_logs aus:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

  2. Klicken Sie in der Spalte Airflow-Webserver auf den Link Airflow für Ihre Umgebung.

  3. Klicken Sie in der Airflow-Weboberfläche auf der Seite DAGs in der Spalte Links für Ihren DAG auf die Schaltfläche Trigger DAG.

  4. Klickbasierter Trigger

  5. Klicken Sie auf der Seite DAGs auf die ausgelöste Aufgabe und prüfen Sie die Ausgabeprotokolle, um sicherzustellen, dass der DAG gestartet wurde.

  6. Warten Sie, bis die Aufgabe, die Sie mit dem create_large_txt_file_print_logs DAG wird abgeschlossen. Dies kann mehrere Minuten.

  7. Klicken Sie auf der Seite DAGs auf die DAG-Ausführung. Sie sehen Ihre Aufgabe hat den Status Success, obwohl das Speicherlimit überschritten wurde.

Prüfen Sie die Airflow-Logs der Aufgabe:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

    1. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

    2. Rufen Sie den Tab Logs auf und klicken Sie dann auf Alle Logs > Airflow-Logs > Worker > Im Log-Explorer ansehen

    3. Filtern Sie die Protokolle nach Typ: Nur Fehler-Nachrichten anzeigen.

In den Protokollen werden Meldungen ähnlich der folgenden angezeigt:

Worker: warm shutdown (Main Process)

oder

A worker pod was evicted at 2023-12-01T12:30:05Z with message: Pod ephemeral
local storage usage exceeds the total limit of containers 1023Mi.

Diese Protokolle zeigen, dass der Pod den Prozess „Warmes Herunterfahren“ gestartet hat, weil der genutzte Speicher das Limit überschritten hat und innerhalb einer Stunde entfernt wurde. Die DAG-Ausführung ist jedoch nicht fehlgeschlagen, da sie innerhalb des Kubernetes-Kündigungstoleranzzeitraums abgeschlossen wurde. Weitere Informationen dazu finden Sie in dieser Anleitung.

Überprüfen Sie das Ergebnis, um das Konzept des Kulanzzeitraums für die Kündigung zu veranschaulichen. des zweiten Beispiel-DAG, long_running_create_large_txt_file_print_logs.

Zweiten DAG auslösen, long_running_create_large_txt_file_print_logs:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

  2. Klicken Sie in der Spalte Airflow-Webserver auf den Link Airflow für Ihre Umgebung.

  3. Klicken Sie in der Airflow-Weboberfläche auf der Seite DAGs in der Spalte Links für Ihren DAG auf die Schaltfläche Trigger DAG.

  4. Klickbasierter Trigger

  5. Klicken Sie auf der Seite DAGs auf die ausgelöste Aufgabe und prüfen Sie die Ausgabeprotokolle, um sicherzustellen, dass der DAG gestartet wurde.

  6. Warten Sie, bis der DAG long_running_create_large_txt_file_print_logs ausgeführt wird. schlägt fehl. Dies dauert etwa eine Stunde.

Prüfen Sie die Ergebnisse der DAG-Ausführung:

  1. Klicken Sie auf der Seite DAGs auf den long_running_create_large_txt_file_print_logs DAG-Ausführung. Sie sehen dass die Aufgabe den Status Failed hat und die Ausführungsdauer genau 1 Stunde und 5 Minuten, was kürzer als die Wartezeit 1 Stunde und 15 Minuten

  2. Überprüfen Sie die Logs der Aufgabe. Nachdem der DAG die Datei localfile.txt in des Airflow-Worker-Containers gibt das Log den vom DAG gestarteten DAG aus und die Ausführungsdauer wird jede Minute in den Aufgabenlogs ausgegeben. In diesem Beispiel gibt der DAG das localfile.txt size:-Protokoll aus und die Größe der localfile.txt-Datei beträgt 1,5 GB.

Sobald die in den Container des Airflow-Workers geschriebene Datei den Speicherplatz überschreitet sollte die DAG-Ausführung fehlschlagen. Die Aufgabe schlägt jedoch nicht fehl. sofort und läuft weiter, bis die Dauer 1 Stunde und 5 Minuten erreicht ist. Das liegt daran, dass Kubernetes die Aufgabe nicht sofort beendet, sondern weiterlaufen lässt, um eine Wiederherstellungszeit von einer Stunde zu ermöglichen. Dieser Zeitraum wird als Kulanzzeitraum bezeichnet. Wenn einem Knoten die Ressourcen ausgehen, beendet Kubernetes den Pod nicht sofort, um die Beendigung ordnungsgemäß zu verwalten, damit die Auswirkungen auf den Endnutzer minimal sind.

Der Kulanzzeitraum für die Beendigung hilft Nutzern, Dateien nach fehlgeschlagenen Aufgaben wiederherzustellen. Bei der Diagnose von DAGs kann dies jedoch zu Verwirrung führen. Wenn das Speicherlimit des Airflow-Arbeiters überschritten wird, hängt der Endtask-Status von der Dauer der DAG-Ausführung ab:

  • Wenn der DAG-Lauf das Speicherlimit des Workers überschreitet, aber in weniger als einer Stunde abgeschlossen wird, erhält die Aufgabe den Status Success, da sie innerhalb des Kulanzzeitraums für die Beendigung abgeschlossen wurde. Kubernetes beendet den Pod jedoch. Die geschriebene Datei wird sofort aus dem Container gelöscht.

  • Wenn der DAG das Worker-Speicherlimit überschreitet und länger als eine Stunde ausgeführt wird, Der DAG wird noch eine Stunde lang ausgeführt und kann das Speicherlimit um bevor Kubernetes die Pod- und Airflow-Markierungen entfernt die Aufgabe als Failed.

Fehlgeschlagenen DAG diagnostizieren

Wenn Sie zum Zeitpunkt des Fehlers mehrere Aufgaben ausgeführt haben, sollten Sie nur eine Aufgabe ausführen und während dieser Zeit den Ressourcendruck diagnostizieren, um zu ermitteln, welche Aufgaben den Ressourcendruck verursachen und welche Ressourcen Sie erhöhen müssen.

Überprüfen Sie die Aufgabenlogs des zweiten DAG. long_running_create_large_txt_file_print_logs:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

  2. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

  3. Rufen Sie den Tab Protokolle auf und klicken Sie dann auf Alle Protokolle > Airflow-Protokolle > Worker > Im Log-Explorer ansehen.

  4. Filtern Sie die Logs nach Typ: Nur Fehlermeldungen werden angezeigt.

In den Protokollen werden Meldungen ähnlich der folgenden angezeigt:

Container storage usage of worker reached 155.7% of the limit.

This likely means that the total size of local files generated by your DAGs is
close to the storage limit of worker.

You may need to decrease the storage usage or increase the worker storage limit
in your Cloud Composer environment configuration.

oder

Pod storage usage of worker reached 140.2% of the limit.
A worker pod was evicted at 2023-12-01T12:30:05Z with message: Pod ephemeral
local storage usage exceeds the total limit of containers 1023Mi.

This eviction likely means that the total size of dags and plugins folders plus
local files generated by your DAGs exceeds the storage limit of worker.

Please decrease the storage usage or increase the worker storage limit in your
Cloud Composer environment configuration.

Diese Meldungen zeigen an, dass Airflow-Logs während der Aufgabe gestartet wurden. Druckfehler, wenn die Größe der von Ihrem DAG generierten Dateien die Speicherlimit für Worker und der Kulanzzeitraum für die Kündigung hat begonnen. Während der Kulanzzeitraum für die Beendigung, Speichernutzung ergab nicht wieder das Limit, was nach Ablauf des Kulanzzeitraums für die Beendigung zu einer Pod-Entfernung führte.

Prüfen Sie den Zustand der Umgebung und die Überwachung des Ressourcenverbrauchs:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

  2. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

  3. Rufen Sie den Tab Monitoring auf und wählen Sie Übersicht aus.

  4. Suchen Sie im Bereich Umgebungsübersicht nach dem Diagramm Umgebungszustand (Airflow-Monitoring-DAG). Es enthält einen roten Bereich, der dem Zeitpunkt entspricht, zu dem die Protokolle mit dem Drucken von Fehlern begonnen haben.

  5. Wählen Sie Worker aus und suchen Sie das Diagramm Gesamte Laufwerksnutzung der Worker. Beobachten dass die Zeile Laufwerknutzung einen Anstieg aufweist und das Laufwerkslimit überschreitet. zum Zeitpunkt der Ausführung Ihrer Task.

Die Zeile „Laufwerksnutzung“ hat einen Anstieg und überschreitet das Laufwerklimit
    zum Zeitpunkt der Ausführung Ihrer Aufgabe
Abbildung 2: Diagramm zur Gesamtlaufwerknutzung der Worker (zum Vergrößern anklicken)

Speicherlimit für Worker erhöhen

Zusätzlichen Airflow-Worker-Speicher zuweisen, damit der Beispiel-DAG erfolgreich sein können:

  1. Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.

    Zur Seite Umgebungen

  2. Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.

  3. Rufen Sie den Tab Umgebungskonfiguration auf.

  4. Klicken Sie unter Ressourcen > Arbeitslasten auf Bearbeiten.

  5. Geben Sie im Abschnitt Worker im Feld Speicher das neue Speicherlimit für Airflow-Worker an. In dieser Anleitung wird der Wert auf 2 GB festgelegt.

  6. Speichern Sie die Änderungen und warten Sie einige Minuten, bis Ihre Airflow-Worker neu starten.

DAG mit der neuen Speicherplatzbegrenzung testen

Lösen Sie den DAG long_running_create_large_txt_file_print_logs noch einmal aus und Warten Sie 1 Stunde und 15 Minuten, bis die Ausführung abgeschlossen ist.

  1. In den Ausgabelogs der DAG-Ausführung sehen Sie Marking task as SUCCESS. und der Status der Aufgabe Success (Erfolgreich) mit einer Dauer von 1 Stunde angibt. und 15 Minuten, was der im DAG-Code festgelegten Wartezeit entspricht.

  2. Sehen Sie sich auf dem Tab Monitoring den Abschnitt Umgebungsübersicht an. Stellen Sie sicher, dass keine roten Flächen zu sehen sind.

  3. Klicken Sie auf den Bereich Worker und suchen Sie das Diagramm Gesamte Laufwerknutzung der Worker. Sie sehen, dass die Linie Datenträgerlimit die Änderung des Speicherlimits widerspiegelt und dass die Linie Datenträgernutzung im zulässigen Bereich liegt.

Fazit

In dieser Anleitung haben Sie den Grund für einen DAG-Fehler ermittelt und die Art der Ressource identifiziert, die zu einer Überlastung führt. Dazu haben Sie zwei Beispiel-DAGs fehlerbehoben, die aufgrund von unzureichendem Arbeitsspeicher und Speicherplatz fehlgeschlagen sind. Nachdem Sie Ihren Workern mehr Arbeitsspeicher und Speicherplatz zugewiesen hatten, konnten Sie die DAGs erfolgreich ausführen. Es wird jedoch empfohlen, Ihre DAGs (Workflows) zu optimieren, um den Ressourcenverbrauch von Workern von vornherein zu reduzieren, da die Ressourcen nicht über einen bestimmten Grenzwert hinaus erhöht werden können.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Einzelne Ressourcen löschen

Wenn Sie mehrere Anleitungen und Kurzanleitungen durcharbeiten möchten, können Sie die Überschreitung von Projektkontingenten verhindern, indem Sie Projekte wiederverwenden.

Löschen Sie die Cloud Composer-Umgebung. Außerdem wird dabei der Bucket der Umgebung gelöscht.

Nächste Schritte