banner
Heim / Blog / Planen von Jupyter-Notebooks bei Meta
Blog

Planen von Jupyter-Notebooks bei Meta

Jun 17, 2023Jun 17, 2023

Bei Meta ist Bento unsere interne Jupyter-Notebook-Plattform, die von vielen internen Benutzern genutzt wird. Notebooks werden auch häufig zum Erstellen von Berichten und Arbeitsabläufen (z. B. zur Durchführung von Daten-ETL) verwendet, die in bestimmten Abständen wiederholt werden müssen. Benutzer mit solchen Notebooks müssten daran denken, ihre Notebooks manuell im erforderlichen Rhythmus laufen zu lassen – ein Vorgang, den die Leute vielleicht vergessen, weil er nicht mit der Anzahl der verwendeten Notebooks skaliert.

Um dieses Problem anzugehen, haben wir in den Aufbau einer geplanten Notebook-Infrastruktur investiert, die sich nahtlos in die übrigen bei Meta verfügbaren internen Tools einfügt. Investitionen in die Infrastruktur tragen dazu bei, dass die Privatsphäre bei allem, was wir bauen, gewährleistet ist. Es ermöglicht uns, weiterhin innovative, wertvolle Lösungen auf datenschutzfreundliche Weise zu entwickeln.

Die Fähigkeit, Fragen zum Datenfluss durch Metasysteme zum Zwecke des Datenschutzes und zur Einhaltung von Vorschriften transparent zu beantworten, unterscheidet unsere geplante Notebook-Implementierung vom Rest der Branche.

In diesem Beitrag erklären wir, wie wir Bento auf datenschutz- und herkunftsbewusste Weise mit unserem Batch-ETL-Pipeline-Framework namens Dataswarm (denken Sie an Apache Airflow) verbunden haben.

Bei Meta setzen wir uns dafür ein, das Vertrauen in die Produktion zu verbessern, indem wir statische Analysen geplanter Artefakte durchführen und kohärente Narrative rund um Datenflüsse aufrechterhalten, indem wir transparente Dataswarm-Operatoren und Datenanmerkungen nutzen. Notebooks stellen eine besondere Herausforderung dar, denn:

Diese drei Überlegungen haben unsere Designentscheidungen geprägt und beeinflusst. Insbesondere haben wir Notebooks, die geplant werden können, auf diejenigen beschränkt, die hauptsächlich ETL durchführen, Datentransformationen durchführen und Visualisierungen anzeigen. Notebooks mit anderen Nebenwirkungen fallen derzeit nicht in den Geltungsbereich und können nicht eingeplant werden.

Es gibt drei Hauptkomponenten zur Unterstützung geplanter Notebooks:

Um die meisten der oben genannten Bedenken auszuräumen, führen wir den Notebook-Ausführungsstatus in einem Container ohne Zugriff auf das Netzwerk durch. Wir nutzen auch Anmerkungen zu Eingabe- und Ausgabedaten, um den Datenfluss anzuzeigen.

Für ETL rufen wir Daten ab und schreiben sie auf neuartige Weise aus:

Wir haben BentoOperator in das Datenzweck-Framework von Meta integriert, um sicherzustellen, dass Daten nur für den vorgesehenen Zweck verwendet werden. Dieses Framework stellt sicher, dass der Datennutzungszweck respektiert wird, wenn Daten über den Meta-Stack fließen und umgewandelt werden. Im Rahmen der Planung eines Notebooks wird vom Benutzer eine „Zweckrichtlinienzone“ bereitgestellt, die als Integrationspunkt mit dem Datenzweck-Framework dient.

Lassen Sie uns nun den Workflow zum Planen eines Notebooks untersuchen:

Wir haben den Einstiegspunkt für die Planung direkt in der Kopfzeile des Notizbuchs verfügbar gemacht, sodass Benutzer nur noch einen Knopf drücken müssen, um loszulegen.

Der erste Schritt im Workflow besteht darin, einige Parameter einzurichten, die zum automatischen Generieren der Pipeline für den Zeitplan verwendet werden.

Der nächste Schritt besteht darin, eine Vorschau der generierten Pipeline anzuzeigen, bevor ein Phabricator-Diff (das Diff-Überprüfungstool von Meta) erstellt wird.

Zusätzlich zum Pipeline-Code zum Ausführen des Notebooks wird auch das Notebook selbst in die Quellcodeverwaltung eingecheckt, damit es überprüft werden kann. Die Ergebnisse des Versuchs, das Notebook in einem geplanten Setup zu betreiben, sind ebenfalls im Testplan enthalten.

Sobald das Diff überprüft und gelandet wurde, beginnt der Zeitplan am nächsten Tag mit der Ausführung. Für den Fall, dass die Ausführung des Notebooks aus irgendeinem Grund fehlschlägt, wird der Zeitplaneigentümer automatisch benachrichtigt. Wir haben außerdem eine Kontextbereichserweiterung direkt in Bento erstellt, um das Debuggen von Notebook-Ausführungen zu erleichtern.

Während wir uns der Herausforderung gestellt haben, geplante Notebooks auf datenschutzbewusste Weise zu unterstützen, sind die Notebooks, die für die Planung in Frage kommen, auf diejenigen beschränkt, die ETL oder Datenanalysen ohne andere Nebenwirkungen durchführen. Dies ist nur ein Bruchteil der Notebooks, die Benutzer letztendlich planen möchten. Um die Anzahl der Anwendungsfälle zu erhöhen, werden wir neben der SQL-Zelle in die Unterstützung weiterer transparenter Datenquellen investieren.

Wir haben auch mit der Unterstützung parametrisierter Notebooks in einem geplanten Setup begonnen. Die Idee besteht darin, Fälle zu unterstützen, in denen wir nicht viele Notebooks in die Quellcodeverwaltung einchecken, die sich nur durch wenige Variablen unterscheiden, sondern einfach ein Notebook einchecken und die differenzierenden Parameter während der Laufzeit einfügen.

Schließlich werden wir an der ereignisbasierten Planung arbeiten (zusätzlich zu dem hier verwendeten zeitbasierten Ansatz), sodass ein geplantes Notebook auch auf vordefinierte Ereignisse warten kann, bevor es ausgeführt wird. Dazu gehört beispielsweise die Möglichkeit, zu warten, bis alle Datenquellen, von denen das Notebook abhängt, landen, bevor mit der Ausführung des Notebooks begonnen werden kann.

Einige unserer Ansätze wurden direkt von der Arbeit an Papermill inspiriert.