Vor Kurzem hob Paul King (VP und PMC von Apache Groovy) die Big-Data-Abstraktion [1] hervor, die Apache Wayang [2] bietet. Er zeigte hauptsächlich, dass Benutzer eine Anwendung in einem logischen Plan (einem Wayang-Plan) spezifizieren, der plattformunabhängig ist: Apache Wayang wiederum wandelt einen logischen Plan in eine Reihe von Ausführungsoperatoren (physischen) um, die von bestimmten zugrunde liegenden Verarbeitungsplattformen wie Apache Flink und Apache Spark ausgeführt werden.
In diesem Beitrag gehen wir näher auf den plattformübergreifenden Optimierer ein, der in Apache Wayang enthalten ist und entscheidet, wie Ausführungspläne generiert werden, wenn ein Benutzer eine Anwendung mit dem sogenannten Wayang-Plan spezifiziert.
Apache Wayang führt einen Optimierungsprozess durch, der entscheidet, welche Ausführungsplattform (z. B. Apache Flink) für die Ausführung der einzelnen Operatoren im Wayang-Plan geeignet ist, sodass die Gesamtausführungszeit (oder die monetären Kosten) reduziert werden. Und das alles, ohne dass die Nutzer es merken!
Plattformübergreifende Datenverarbeitung
Heutige Datenanalysen müssen häufig Aufgaben auf mehr als einer Datenverarbeitungsplattform ausführen, d. h. es handelt sich um plattformübergreifende Analysen. Wir haben vier Situationen identifiziert, in denen eine Anwendung Unterstützung für die plattformübergreifende Datenverarbeitung benötigt:
- Plattformunabhängigkeit. Anwendungen führen eine gesamte Aufgabe auf einer einzigen Plattform aus, erfordern jedoch möglicherweise einen Plattformwechsel für verschiedene Eingabedatensätze oder Aufgaben, in der Regel mit dem Ziel, eine bessere Leistung zu erzielen. Paul King hat diesen Fall in seinem Blogbeitrag [1] hervorgehoben.
- Opportunistisch plattformübergreifend. Anwendungen könnten von der Leistung profitieren, wenn sie mehrere Plattformen für die Ausführung einer einzelnen Aufgabe verwenden. Wir werden diesen Fall in diesem Beitrag hervorheben.
- Obligatorisch plattformübergreifend. Für Anwendungen sind möglicherweise mehrere Verarbeitungsplattformen erforderlich, da die Plattform, auf der sich die Eingabedaten befinden, z. B. PostgreSQL, keine eingehende Aufgabe ausführen kann, z. B. eine Aufgabe für maschinelles Lernen. Daher sollten Daten von der Plattform, auf der sie sich befinden, auf eine andere Plattform verschoben werden, um die eingehende Aufgabe ausführen zu können.
- Polystore. Für Anwendungen sind möglicherweise mehrere Verarbeitungsplattformen erforderlich, da sich die Eingabedaten auf mehrere Datenspeicher verteilen, z. B. in einer Data-Lake-Umgebung.
Aktuelle Praxis
Die derzeitige Praxis zur Bewältigung plattformübergreifender Anforderungen besteht darin, entweder spezialisierte Systeme zu entwickeln, die von Natur aus zwei oder mehr Plattformen kombinieren. Der erste Ansatz führt dazu, dass man an bestimmte Plattformen gebunden ist, die entweder veraltet sein oder von neueren Plattformen übertroffen werden können. Die Neuimplementierung solch spezialisierter Systeme zur Integration neuerer Systeme ist sehr oft übermäßig zeitaufwändig. Der zweite Ansatz ist zwar nicht an bestimmte Plattformen gekoppelt, aber er ist teuer, fehleranfällig und erfordert Fachwissen auf verschiedenen Plattformen, um eine hohe Effizienz zu erzielen.
Apache Wayang: eine systematische Lösung für plattformübergreifende Datenverarbeitung
Forschung und Industrie haben die Notwendigkeit einer systematischen Lösung erkannt, die Anwendungen von den zugrunde liegenden Verarbeitungsplattformen entkoppelt und eine effiziente plattformübergreifende Datenverarbeitung ermöglicht, die für Anwendungen und Benutzer transparent ist.
Das ultimative Ziel wäre es, den Erfolg von DBMS für plattformübergreifende Anwendungen zu wiederholen: Benutzer formulieren plattformunabhängige Datenanalyseaufgaben, und ein Zwischensystem entscheidet, auf welchen Plattformen jede (Teil-) Aufgabe ausgeführt werden soll, um die Kosten (z. B. Laufzeit oder monetäre Kosten) zu minimieren.
Die Schlüsselkomponente von Apache Wayang, um dies zu realisieren, ist der plattformübergreifende Optimierer. Konkret geht der Optimierer von Wayang das Problem an, einen Ausführungsplan zu finden, der auf mehreren Plattformen ausgeführt werden kann und der die Ausführungskosten einer bestimmten Aufgabe minimiert. Lassen Sie uns die plattformübergreifende Optimierung von Apache Wayang anhand eines laufenden Beispiels erklären.
Abbildung 1 zeigt einen Wayang-Plan für die Algorithmen des stochastischen Gradientenabstiegs (SGD), wenn die Anfangsdaten in einer Datenbank gespeichert werden. Im Detail werden die Eingabedatenpunkte über eine TableSource gelesen und über einen Filter-Operator gefiltert. Dann werden sie (i) zur Visualisierung mit einem CollectionSink in einer Datei gespeichert und (ii) mithilfe einer Map geparst, während die anfänglichen Gewichte über eine CollectionSource gelesen werden. Die Hauptoperationen von SGD (d. h. Abtasten, Berechnen der Gradienten der abgetasteten Datenpunkte und Aktualisieren der Gewichte) werden bis zur Konvergenz (d. h. zur Endbedingung von RepeatLoop) wiederholt. Die resultierenden Gewichte werden in einer Sammlung ausgegeben.
Ausgehend von diesem Eingabeplan unterteilt der plattformübergreifende Optimierer den Wayang-Plan in mehrere Phasen: die Phasen Planinflation, Betreiberkosten, Bewegungskosten und Planaufzählung.
Abbildung 2 zeigt den Arbeitsablauf des Optimierers von Wayang. Bei einem Wayang-Plan durchläuft der Optimierer den Plan zunächst durch eine Phase der Plananreicherung, in der er den Eingabeplan vergrößert, indem er eine Reihe von Zuordnungen auf die tatsächlichen Ausführungsoperatoren anwendet. Mit anderen Worten, diese Zuordnungen listen auf, wie jeder der plattformunabhängigen Wayang-Operatoren auf den verschiedenen Plattformen mit Ausführungsoperatoren implementiert werden kann. Das daraus resultierende überhöhte Wayang enthält somit alle seine Ausführungsalternativen. Der Optimierer kommentiert dann den überhöhten Plan mit Schätzungen sowohl für die Datenkardinalitäten als auch für die Kosten der Ausführung der einzelnen Ausführungsoperatoren. Als Nächstes ermittelt er anhand eines graphischen Ansatzes [3], wie Daten am effizientesten zwischen verschiedenen Plattformen übertragen werden können, und kommentiert den übertriebenen Plan entsprechend. Anschließend verwendet es all diese Anmerkungen, um mithilfe eines Aufzählungsalgorithmus den optimalen Ausführungsplan zu ermitteln. Schließlich kann der resultierende Ausführungsplan vom Executor von Apache Wayang auf allen ausgewählten Verarbeitungsplattformen umgesetzt werden.
Beispielsweise gibt der Optimierer von Wayang den in Abbildung 3 dargestellten Ausführungsplan für unser SGD-Beispiel in Abbildung 1 aus.
Der obige Plan zeigt den Ausführungsplan für den SGD Rheem-Plan, wenn Postgres, Spark und JavaStreams die einzigen verfügbaren Plattformen sind. Dieser Plan nutzt Postgres, um die gewünschten Datenpunkte zu extrahieren, die hohe Parallelität von Spark für den großen Eingabedatensatz und gleichzeitig die geringe Latenz von JavaStreams für die kleine Sammlung von Zentroiden. Beachten Sie auch die drei zusätzlichen Ausführungsoperatoren zur Datenverschiebung (Results2Stream, Broadcast) und zur Wiederverwendbarkeit von Daten (Cache).
Was ist der Vorteil?
Sie fragen sich vielleicht auch, was der Vorteil dieser Hybridpläne in Bezug auf die Leistung von Apache Wayang ist.
Wir beobachten, dass der plattformübergreifende Optimierer es Apache Wayang ermöglicht, die SGD-Aufgaben um mehr als eine Größenordnung schneller auszuführen als jede Ausführung auf einer einzelnen Plattform (Apache Spark, Apache Flink oder eigenständiges Java): Apache Wayang kann die SGD-Aufgabe in wenigen Sekunden ausführen, während alle anderen Verarbeitungsplattformen dies in der Größenordnung von Minuten tun!
Was müssen die Benutzer von Apache Wayang tun?
Tatsächlich haben die Benutzer von Wayang nichts anderes zu tun, als ihre verfügbaren Verarbeitungsplattformen zu deklarieren. Nehmen wir zum Beispiel den folgenden Codeausschnitt aus Pauls Blogbeitrag [1],
Benutzer müssen lediglich alle Plattform-Plugins aktivieren, anstatt nur eines auszuwählen: das ist das . mit Plugin (java.basicPluging ()) und .withPlugin (spark.basicPluging ()) Zeilen müssen im obigen Codeausschnitt aktiv sein. Schließlich können Benutzer jede andere verfügbare Verarbeitungsplattform hinzufügen, die sie möglicherweise haben.
Benutzer spezifizieren ihre Aufgaben einfach plattformunabhängig in Apache Wayang und lassen Wayang den Rest für sie erledigen, um die beste Leistung zu erzielen!
Apache Wayang ist das Herzstück des Virtual Data Lakehouse von DataBloom AI, Blossom Sky
Blossom Sky basiert auf Apache Wayang und erweitert es um neue Funktionen, über die Wayang heute nicht verfügt, wie z. B. einen leistungsstarken ML-basierten Abfrageoptimierer, föderiertes Lernen, Datendebugging und einen kompatiblen SQL-Optimierer.
Referenzen
[1] Wayang mit Groovy: https://blogs.apache.org/groovy/entry/using-groovy-with-apache-wayang
[2] Apache Video: https://wayang.apache.org/
[3] Sebastian Kruse, Zoi Kaoudi, Jorge-Arnulfo Quiané-Ruiz, Sanjay Chawla, Felix Naumann, Bertty Contreras-Rojas: Optimierung der plattformübergreifenden Datenbewegung. ICDE 2019:1642-1645
Über Scalytics
Apache Wayang: Das führende Java-basierte Federated Learning-Framework
Scalytics nutzt Apache Wayang als Basis, und wir sind stolz darauf, dieses Projekt zu fördern. Sie können das öffentliches GitHub-Repository hier einsehen. Wenn Ihnen unsere Software gefällt, zeigen Sie Ihre Wertschätzung und Unterstützung – ein Stern ⭐ würde uns viel bedeuten!
Wenn Sie professionelle Unterstützung von unserem Team von branchenführenden Experten benötigen, können Sie sich jederzeit an uns über Slack oder E-Mail wenden.