[PYTHON] Die Geschichte von Airflows Webserver und DAG, deren Laden lange dauert

Weihnachten steht vor der Tür, also sprechen wir über den Webserver von Airflow.

Was ich sagen will

Module, aus denen der Luftstrom besteht

Der führende Webserver ist diesmal eines der Airflow-Module. Für andere Module

Und so weiter. Weitere Informationen finden Sie in Astronomers Artikel.

Was ist Webserver?

Webserver ist der Verwaltungsbildschirm (siehe unten), CLI-Befehl (Teil), [API](https: //airflow.apache). org / docs / stabile / api.html) usw.

Wir akzeptieren die Verarbeitung wie.

Intern hat es eine Flask + Gunicorn-Konfiguration und der Endpunkt auf dem Bildschirm ist hier. In py definiert).

Airflow UI (Die Abbildung stammt von Airflow offizielle Seite)

Das Laden des DAG-Problems dauert lange

Der Webserver ** akzeptiert nicht nur Anfragen, sondern liest auch regelmäßig DAG-Dateien **.

Wenn die DAG-Datei ** geladen ** werden muss,

Manchmal

Ist es eine Warnung? Es ist gewesen.

Das Laden dauert lange?

Es mag verwirrend sein, dass ** das Laden von DAG ** lange dauert ** und ** das Ausführen von DAG Run ** lange dauert **, aber es ist eine andere Geschichte, und erstere ist diesmal das Problem.

Dies ist beispielsweise eine ** DAG, deren Laden lange dauert **

    sleep(10000000)
    start = DummyOperator(task_id='start')

Dies ist eine ** DAG, deren Ausführung ** lange dauert **.

        def hoge():
            sleep(1000000)
        slow_task = PythonOperator(
            task_id='query_' + str(i),
            python_callable=hoge,
        )

Das Laden kann langsam sein, wenn eine große Anzahl von Aufgaben vorhanden ist oder wenn Sie außerhalb der Aufgabe auf die Außenseite ** zugreifen.

Fluss des Webservers, der DAG analysiert

Für diejenigen, die sich Sorgen um den detaillierten Ablauf machen:

  1. Regelmäßig (*) [Untergeordneter Prozess neu starten (Gunicorn Worker)] beim Starten des Webservers Auf (https://github.com/apache/airflow/blob/4a344f13d26ecbb627bb9968895b290bfd86e4da/airflow/cli/commands/webserver_command.py#L146) einstellen.
  2. [DagBag-Objekt wird erstellt] beim Laden der Endpunktdatei (https://github.com/apache/airflow/blob/cb8b2a1dc64c3ea6ba445893c65c6c953dfb476a/airflow/www/views.py#L92)
  3. Während das DagBag-Objekt erstellt wird, wird die DAG-Datei analysiert (https://github.com/apache/airflow/blob/cb8b2a1dc64c3ea6ba445893c65c6c953dfb476a/airflow/models.py#L321).

Beziehung zur Anzahl der Aufgaben

Cloud Composer (Airflow 1.10.2) ・ Ich habe es mit DAG nur für BigQuery Operator versucht:

Wenn nur die Diagrammansicht oder die Baumansicht schwer ist, scheint es gut zu sein, die Standardnummer_dag_run_display_number zu ändern.

Eine glänzende Zukunftsgeschichte

Für diese "Lade-DAG" wurden einige Verbesserungen vorgeschlagen.

Cloud Composer implementiert eine Option zum Festlegen des asynchronen DAG-Ladens auf dem Webserver (https://cloud.google.com/composer/docs/how-to/accessing/airflow-web-interface#asynchronous-load). Es wurde auch auf Airflow 1.10.4 (https://issues.apache.org/jira/browse/AIRFLOW-4924) portiert.

Es ist noch ein Entwurf, aber [AIP-24 DAG-Persistenz in DB mit JSON für Airflow Webserver und (optionalem) Scheduler](https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-24+DAG+Persistence+in Der Vorschlag + DB + mit + JSON + für + Airflow + Webserver + und +% 28optional% 29 + Scheduler (FocusedCommentId = 123898950) ist eine bedeutendere Änderung.

Wir schlagen Optionen vor. (Es scheint nicht gut zu sein, dass der Webserver überhaupt einen Status hat Es scheint, dass es eine Geschichte gibt))

Cloud Composer-Webserver

Ein Hinweis zum Cloud Composer-Webserver:

Astronomer.io kann übrigens die Größe von [vCPU / Memory] ändern (https://www.astronomer.io/docs/running-jobs-and-scaling/).

Recommended Posts

Die Geschichte von Airflows Webserver und DAG, deren Laden lange dauert
Ich bin gerade in Singapur. Eine Geschichte über das Erstellen eines LineBot und den Wunsch, einen unvergesslichen Job zu machen
Eine Geschichte über die Portierung des Codes "Versuchen Sie zu verstehen, wie Linux funktioniert" nach Rust
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
Die Geschichte von Python und die Geschichte von NaN
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
Es ist überraschend mühsam, eine Liste mit dem Datum und der Uhrzeit der letzten Anmeldung von Arbeitsbereichen abzurufen
Die Geschichte, zum ersten Mal seit 5 Jahren wieder an die Front zurückzukehren und Python Django umzugestalten
Die Geschichte des Exportierens eines Programms
Die Geschichte, ein Tool zum Laden von Bildern mit Python zu erstellen ⇒ Speichern unter
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Die Geschichte einer Soundkamera mit Touch Designer und ReSpeaker
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Die Geschichte des Versuchs, den Client wieder zu verbinden
Die Geschichte, MeCab in Ubuntu 16.04 zu setzen
Die Geschichte, deep3d auszuprobieren und zu verlieren
Die Geschichte der Verarbeitung A von Blackjack (Python)
Die Geschichte von pep8 wechselt zu pycodestyle
Ich habe ein Tool erstellt, um die Ausführungszeit von cron zu schätzen (+ PyPI-Debüt)
Experimentieren Sie, um Tweets über einen längeren Zeitraum zu sammeln (Aggregation und Bestätigung des Inhalts).
Die Geschichte der IPv6-Adresse, die ich auf ein Minimum beschränken möchte
Ein Programmieranfänger versuchte, die Ausführungszeit des Sortierens usw. zu überprüfen.
Die Geschichte einer Box, die Peppers AL Memory und MQTT miteinander verbindet
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
Ich möchte gleichzeitig einen Musik-Player erstellen und Musik ablegen
Das Herunterfahren von CentOS 7 mit LVM-Konfiguration dauert lange.
Stellen Sie sicher, dass die Vorverarbeitung zum Zeitpunkt der Erstellung und Vorhersage des Vorhersagemodells ausgerichtet ist
Erstellen Sie eine Python-Umgebung, um die Theorie und Implementierung von Deep Learning zu erlernen
Die Geschichte eines hochrangigen Technikers, der versucht, das Überleben der Titanic vorherzusagen
So berechnen Sie die Volatilität einer Marke
Die Geschichte eines Mel-Icon-Generators
Berücksichtigung der Stärken und Schwächen von Python
Die Geschichte vom Umzug von Pipenv zur Poesie
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich kann die Uhrenquelle tsc nicht finden! ?? Die Geschichte des Versuchs, einen Kernel-Patch zu schreiben
Eine Geschichte von Versuch und Irrtum beim Versuch, eine dynamische Benutzergruppe in Slack zu erstellen
Die Geschichte des Wechsels von WoSign zu Let's Encrypt für ein kostenloses SSL-Zertifikat
Eine Geschichte über den Versuch, mit der kostenlosen Stufe von AWS zur COVID-19-Analyse beizutragen, und das Scheitern
Die Geschichte der Portierung von Code von C nach Go (und zur Sprachspezifikation)
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
Ein Hinweis auf Missverständnisse beim Versuch, das gesamte selbst erstellte Modul mit Python3 zu laden
Eine Geschichte über den Versuch, Linter mitten in einem Python (Flask) -Projekt vorzustellen
Es ist Zeit, ernsthaft über die Definition und die Fähigkeiten von Datenwissenschaftlern nachzudenken
[Hinweis zur Informationskomprimierung 003] Ein Plan, die Vorlesungen und Board-Schriften eines Professors für Elektromagnetik an einer langweiligen Universität in einem JPEG zu komprimieren.
Die Geschichte des Starts eines Minecraft-Servers von Discord
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert
Die Geschichte von Python ohne Inkrement- und Dekrementoperatoren.
Ein Memo zum visuellen Verstehen der Achse von Pandas.Panel
Eine Geschichte über das Ausprobieren von pyenv, virtualenv und virtualenvwrapper
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Schritte zur Berechnung der Wahrscheinlichkeit einer Normalverteilung
Eine Geschichte über die Änderung des Master-Namens von BlueZ
Zip 4 Gbyte Problem ist eine Geschichte der Vergangenheit
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
Die Geschichte, ein Ring-Fit-Abenteuer kaufen zu wollen