[PYTHON] Apache Flink 1.9.0: Integrierte Alibaba Blink-Funktionalität

** Apache Flink 1.9.0 ** ist ein wichtiges Update, das viele der Blink-Funktionen von ** Alibaba ** integriert, einschließlich der Stapelwiederherstellung von Stapeljobs und einer Blink-basierten Abfrage-Engine.

  1. August 2019, [Apache Flink Version 1.9.0](https://flink.apache.org/news/2019/08/22/release-1.9.0.html?spm=a2c65.11461447.0.0.2162645 aQwyb7q) wurde offiziell veröffentlicht. Diese neue Version ist [Alibaba Blink](https://medium.com/@alitech_2017/alibaba-blink-real-time-computing-for-big-time-gains-707fdd583c26?spm=a2c65.11461447.0.0.2162645aQwyb7q Dies ist die erste Version, nachdem die interne Version von) in die offizielle Version von Apache, Flink, integriert wurde.

Daher gibt es einige wichtige Änderungen in diesem brandneuen Update. Eine bemerkenswerte Funktion dieser neuen Version ist die Wiederherstellung des Stapelstils für Stapeljobs (https://hub.packtpub.com/apache-flink-1-9-0-releases-with-fine-grained-). Batch-Recovery-State-Processor-API-und-mehr /? Spm = a2c65.11461447.0.0.2162645aQwyb7q) und eine neue Blink-basierte Abfrage-Engine für Tabellen-APIs und SQL-Abfragen (https: //www.i) -programmer.info/news/197-data-mining/13043-apache-flink-19-adds-new-query-engine.html?spm=a2c65.11461447.0.0.2162645aQwyb7q) Vorschau. Gleichzeitig bietet diese Version eine der am häufigsten nachgefragten Funktionen, die State Processor API, mit der Flink DataSet-Jobs die Flexibilität zum Lesen und Schreiben von Sicherungspunkten erhalten. Diese Version enthält auch eine neu erstellte WebUI, eine Vorschau der neuen Python Table-API von Flink und die Integration in das Apache Hive-Ökosystem.

Von Anfang an war es das Ziel des Apache Flink-Projekts, ein Stream-Verarbeitungssystem zu entwickeln, das neben verschiedenen ereignisgesteuerten Anwendungen viele Formen von Echtzeit- und Offline-Datenverarbeitungsanwendungen integrieren und ausführen kann. Mit dieser Version haben Apache und Alibaba Cloud einen wichtigen Schritt in Richtung ihres ersten Ziels getan, indem sie die Stream- und Batch-Verarbeitungsfunktionen von Blink unter einer einheitlichen Laufzeit integriert haben.

Ich hoffe, dieser Artikel ist hilfreich für alle, die an diesem Update interessiert sind und wissen möchten, was erwartet wird. Dieser Artikel beschreibt die wichtigsten neuen Funktionen, Verbesserungen und wichtigen Änderungen an Apache Flink in diesem neuen Update. Wir werden uns auch die zukünftigen Entwicklungspläne von Apache ansehen.

Hinweis: Die Binärverteilung und Quellartefakte von Flink 1.9 wurden in der Dokumentation aktualisiert (https://ci.apache.org/projects/flink/flink-docs-release-1.9/?spm=a2c65.11461447.0.0.2162645). Es ist jetzt zusammen mit aQwyb7q auf der Download-Seite des Flink-Projekts (https://flink.apache.org/downloads.html?spm=a2c65.11461447.0.0.2162645aQwyb7q) verfügbar. Flink 1.9 ist API-kompatibel mit früheren 1.x-Versionen für APIs, die mit der Annotation @Public versehen sind. Flink Mailingliste und JIRA Sie können Ihre Ideen über /FLINK/summary?spm=a2c65.11461447.0.0.2162645aQwyb7q) mit der Community teilen.

Neue Funktionen und Verbesserungen

Minimierte Stapelauftragssammlung (FLIP-1)

Mit dieser neuen Version wurde die Zeit zum Wiederherstellen eines Stapels nach einem Taskfehler, unabhängig davon, ob es sich um ein Dataset, eine Tabellen-API oder einen SQL-Job handelt, erheblich verkürzt.

Bis Flink 1.9 wurden Fehler bei Stapeljobaufgaben durch den komplexen Prozess behoben, bei dem alle Aufgaben abgebrochen und der gesamte Job neu gestartet werden mussten. Das heißt, der Job musste von vorne beginnen, wodurch alle Fortschritte ungültig wurden.

Diese Version von Flink verwendet diese Daten jedoch, um Zwischenergebnisse am Rand des Netzwerk-Shuffle zu halten und nur die vom Fehler betroffenen Aufgaben wiederherzustellen. In Verbindung mit diesem Prozess können Sie einen Failover-Bereich haben, der eine Reihe von Aufgaben umfasst, die über einen Pipeline-Datenaustausch verbunden sind. Eine Batch-Shuffle-Verbindung für einen Job definiert die Grenzen seines Failover-Bereichs. Weitere Informationen hierzu finden Sie unter FLIP-1 Bitte beziehen Sie sich auf a2c65.11461447.0.0.2162645aQwyb7q).

image.png

Um diese neue Failover-Strategie zu verwenden, stellen Sie sicher, dass in flink-conf.yaml eine jobmanager.execution.failover-Strategie: Regionseintrag vorhanden ist.

Hinweis: Die Konfiguration des 1.9-Distributionspakets enthält diesen Eintrag standardmäßig. Wenn Sie jedoch die Konfigurationsdatei aus der vorherigen Konfiguration wiederverwenden möchten, müssen Sie sie manuell hinzufügen.

Die oben beschriebene Failover-Strategie "Region" beschleunigt und verbessert die Wiederherstellung von Streaming-Jobs, dh Jobs ohne Shuffles wie "keyBy ()" und Neuverteilung. Wenn ein solcher Job wiederhergestellt wird, werden nur die Aufgaben in der betroffenen Pipeline (Fehlerbereich) neu gestartet. Bei allen anderen Streaming-Jobs ist das Wiederherstellungsverhalten das gleiche wie in früheren Versionen von Flink.

Statusprozessor-API (FLIP-43)

Bis zu Flink 1.9, um extern auf den Jobstatus zuzugreifen (noch experimentell) Abfragbarer Status (https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream) /state/queryable_state.html?spm=a2c65.11461447.0.0.2162645aQwyb7q) war begrenzt. Diese Version enthält eine leistungsstarke neue Bibliothek zum Lesen, Schreiben und Ändern von Status-Snapshots mithilfe der DataSet-API. In der Praxis bedeutet dies:

Die neue Statusprozessor-API deckt alle Variationen von Snapshots ab (Sicherungspunkte, vollständige Prüfpunkte, inkrementelle Prüfpunkte). Weitere Informationen finden Sie unter FLIP-43. Bitte.

Halten Sie am Speicherpunkt an (FLIP-34)

"Mit Sicherungspunkt abbrechen" , Eine übliche Operation zum Stoppen und Neustarten von Flink-Jobs, zum Verzweigen und Aktualisieren. Die bestehende Implementierung hatte jedoch das Problem, dass die Datenpersistenz der an das externe Speichersystem übertragenen Daten nicht vollständig garantiert werden konnte. Um die End-to-End-Semantik beim Stoppen eines Jobs zu verbessern, führt Flink 1.9 einen neuen SUSPEND-Modus ein, der einen Job an einem Sicherungspunkt stoppt und gleichzeitig die Konsistenz der Ausgabedaten gewährleistet. Sie können den Job im Flink CLI-Client wie folgt anhalten:

bin/flink stop -p [:targetSavepointDirectory] :jobId

Der Status des letzten erfolgreichen Jobs wird auf "BEENDET" gesetzt, sodass Sie leicht sehen können, ob der Vorgang fehlgeschlagen ist. Weitere Informationen finden Sie unter FLIP-34.

Refactoring der Flink-Web-Benutzeroberfläche

[Diskussion] über die Web-Benutzeroberfläche von Flink (http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Change-underlying-Frontend-Architecture-for-Flink-Web-Dashboard-td24902 Nach .html? Spm = a2c65.11461447.0.0.2162645aQwyb7q) (siehe Link hier) hat die Community beschlossen, diese Komponente mit der neuesten stabilen Version Angular (Angular 7.0 oder höher) umzugestalten. tat. Dieses neu gestaltete Update ist die Standardeinstellung für 1.9.0. Flink 1.9.0 enthält jedoch einen Link zum Wechseln zur älteren Web-Benutzeroberfläche.

image.png

image.png

Hinweis: Angesichts dieser wesentlichen Änderungen kann nicht garantiert werden, dass ältere Versionen der WebUI in Zukunft dieselbe Funktionalität wie die neue Version haben. Ältere Versionen der Web-Benutzeroberfläche sind veraltet, sobald die neue Version stabil ist.

Vorschau des neuen Blink SQL-Abfrageprozessors

Mit der Integration von Blink in Alibaba in Apache Flink hat die Community daran gearbeitet, die Laufzeiten des Abfrageoptimierers und der Tabellen-API sowie der SQL-Abfragefunktionen von Blink in Flink zu integrieren. Der erste Schritt bei dieser Aufgabe bestand darin, das monolithische "Flink-Table" -Modul in ein kleineres Modul (FLIP-32 umzugestalten. Siehe -32% 3A + Restrukturierung + Blinktabelle + für + zukünftige + Beiträge? Spm = a2c65.11461447.0.0.2162645aQwyb7q). Für Java- und Scala-API-Module, Optimierer und Laufzeitmodule bedeutet dies gut geschichtete und gut definierte Schnittstellen.

image.png

Der nächste Schritt bestand darin, den Blink-Planer zu erweitern, um eine neue Optimierungsschnittstelle zu implementieren. Eine Version des Flink-Prozessors vor 1.9 und ein neuer Blink-basierter Abfrageprozessor. Der Blink-basierte Abfrageprozessor bietet eine bessere SQL-Abdeckung und 1.9 unterstützt TPC-H vollständig. Die Unterstützung für TPC-DS ist für die nächste Version geplant.

Es verbessert auch die Leistung von Stapelabfragen basierend auf einer kostenbasierten Planauswahl und einer umfassenderen Abfrageoptimierung mit mehr Optimierungsregeln. Schließlich wurden auch die Codegenerierung und koordinierte Operatorimplementierungen verbessert. Der Blink-basierte Abfrageprozessor ermöglicht leistungsfähigeres Streaming sowie lang erwartete neue Funktionen wie Dimensionstabellenverknüpfungen, TopN, Deduplizierung, Optimierungen zum Auflösen von Datenversatz in aggregierten Szenarien und bequemere integrierte Funktionen. Ich mache es.

Hinweis: Die Semantik der beiden Abfrageprozessoren und die Menge der unterstützten Operationen stimmen größtenteils überein, stimmen jedoch nicht genau überein. Weitere Informationen finden Sie in den Versionshinweisen.

Die Integration des Abfrageprozessors von Blink ist jedoch noch nicht abgeschlossen. Prozessoren vor Flink 1.9 sind weiterhin der Standardprozessor in Flink 1.9 und werden für Produktionsumgebungen empfohlen.

Sie können den Blink-Prozessor aktivieren, indem Sie beim Erstellen der "TableEnvironment" die "Umgebungseinstellungen" festlegen. Der ausgewählte Prozessor muss sich im Klassenpfad des laufenden Java-Prozesses befinden. In einer Clusterkonfiguration werden standardmäßig beide Abfrageprozessoren automatisch in den Klassenpfad geladen. Fügen Sie beim Abfragen von der IDE explizit Planerabhängigkeiten zum Projekt hinzu (https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/?). spm = a2c65.11461447.0.0.2162645aQwyb7q # Tabellenprogrammabhängigkeiten) muss durchgeführt werden.

Weitere Verbesserungen in der Tabellen-API und in SQL

Neben den aufregenden Fortschritten des Blink-Planers hat die Community auch daran gearbeitet, diese Schnittstellen zu verbessern.

Im Rahmen des Refactorings und der Aufteilung des Flink-Table-Moduls wurden zwei unabhängige API-Module für Java und Scala erstellt. Für jeden, der Java verwendet, ist dies keine große Änderung. Java-Benutzer können jetzt jedoch die Tabellen-API und SQL verwenden, ohne Scala-Abhängigkeiten zu verwenden.

In der Community die [Typinformationen] von Flink (https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/types_serialization.html?spm=a2c65.11461447.0.0.2162645aQwyb7q#flinks-typeinformation- Klasse) Neues Datentypsystem, um die Tabellen-API von der Klasse zu trennen und die Einhaltung der SQL-Standards zu verbessern /table/types.html?spm=a2c65.11461447.0.0.2162645aQwyb7q#data-types) wurde implementiert. Diese Arbeiten sind noch nicht abgeschlossen und werden in der nächsten Version abgeschlossen. In Flink 1.9 wurde UDF noch nicht auf das neue Typsystem portiert.

Die Funktionalität der Tabellen-API wurde durch eine Reihe von Transformationen erweitert, die mehrzeilige und mehrspaltige Ein- und Ausgaben unterstützen. Diese Transformationen haben es viel einfacher gemacht, Verarbeitungslogik zu implementieren, was mit relationalen Operatoren umständlich zu implementieren ist.

Die Community hat einige vorhandene Katalog-APIs überarbeitet und ersetzt, um eine einheitliche Möglichkeit für den Umgang mit internen und externen Katalogen zu bieten. Diese Arbeit wurde hauptsächlich in Richtung Integration mit Hive initiiert. Darüber hinaus hat diese Überarbeitung den allgemeinen Komfort beim Verwalten von Katalogmetadaten in Flink verbessert.

--DDL-Unterstützung in der SQL-API (siehe [FLINK-10232](siehe https://issues.apache.org/jira/browse/FLINK-10232?spm=a2c65.11461447.0.0.2162645aQwyb7q))

Vor Version 1.9 unterstützte Flink SQL nur DML-Anweisungen wie SELECT und INSERT. Externe Tabellen, insbesondere Tabellenquellen und -senken, mussten mit Java / Scala-Code oder Konfigurationsdateien registriert werden. In Flink 1.9 hat die Community Unterstützung für SQL-DDL-Anweisungen zum Registrieren und Löschen von Tabellen hinzugefügt, insbesondere für die Befehle "CREATE TABLE" und "DROP TABLE". Die Community hat jedoch keine streamspezifischen Syntaxerweiterungen hinzugefügt, um die Zeitstempelextraktion und die Erzeugung von Wasserzeichen zu definieren. Die vollständige Unterstützung für Stream-Szenarien ist für die nächste Version geplant.

Vorschau der Hive-Integration (FLINK-10556)

Apache Hive dient zum Speichern großer Mengen strukturierter Daten und zum Ausführen von Abfragen Hadoop Weit verbreitet im Ökosystem. Hive ist nicht nur ein Abfrageprozessor, sondern auch ein Metastore zum Verwalten und Organisieren großer Datenmengen. Es enthält einen Katalog mit dem Namen .0.2162645aQwyb7q). Ein üblicher Integrationspunkt für Abfrageprozessoren ist die Integration in Hive Metastore, um Hive für die Datenverwaltung verfügbar zu machen.

Vor kurzem hat die Community begonnen, einen externen Katalog von SQL-Abfragen zu implementieren, die eine Verbindung zur Flink Table-API und zum Hive Metastore herstellen. Mit Flink 1.9 können Sie verschiedene in Hive gespeicherte Datenformate abfragen und verarbeiten. Darüber hinaus können Sie durch die Integration in Hive Hive UDF in Flink Table-APIs und SQL-Abfragen verwenden. Weitere Informationen finden Sie unter FLINK-10556.

Bisher waren in der Tabellen-API und in SQL definierte Tabellen immer temporär. Mit dem neuen Catalog Connector können Sie auch Tabellen beibehalten, die mit SQL-DDL-Anweisungen für Metastore erstellt wurden. Das heißt, Sie können eine Verbindung zum Metastore herstellen und eine Tabelle registrieren, z. B. eine Tabelle, die einem Kafka-Thema ähnelt. Von nun an ist es jedes Mal möglich, diese Tabelle abzufragen, wenn ein Katalog mit Metastore verbunden ist.

Hinweis: Bitte beachten Sie, dass die Hive-Unterstützung in Flink 1.9 experimentell ist. Die Community plant, diese Funktionen in der nächsten Version zu stabilisieren, und freut sich über Ihr Feedback.

Vorschau der neuen Python-Tabellen-API (FLIP-38 )

In dieser Version wird die erste Version der Python Table-API vorgestellt (siehe FLIP-38). Dies ist ein Anfang in Richtung des Ziels der Community, Flink eine umfassende Python-Unterstützung zu bieten. Diese Funktion ist als schlanker Python-API-Wrapper für die Tabellen-API konzipiert, der im Wesentlichen Python-Tabellen-API-Methodenaufrufe in Java-Tabellen-API-Aufrufe übersetzt. In Flink 1.9 unterstützt die Python Table-API derzeit keine UDF, sondern aktiviert nur relationale Standardoperationen. Die UDF-Unterstützung in Python steht auf der Roadmap für zukünftige Versionen.

Wenn Sie die neue Python-API ausprobieren möchten, installieren Sie PyFlink manuell (https://ci.apache.org/projects/flink/flink-docs-release-1.9/flinkDev/building.html?spm=a2c65.11461447.0) .0.2162645aQwyb7q # build-pyflink) muss durchgeführt werden. Schauen Sie sich die exemplarische Vorgehensweise (https://ci.apache.org/projects/flink/flink-docs-release-1.9/tutorials/python_table_api.html?spm=a2c65.11461447.0.0.2162645aQwyb7q) in der Dokumentation an und überzeugen Sie sich selbst Sie können mit erkunden beginnen. Community Bietet derzeit ein Python-Paket für "pyflink", das über pip installiert werden kann.

Wesentliche Änderungen

--Tabellen-API und SQL sind jetzt Teil der Standardeinstellungen für die Flink-Distribution. Zuvor mussten die Tabellen-API und SQL die entsprechende JAR-Datei von . / Opt nach. / Lib verschieben, um sie zu aktivieren.

--Flink kann in Java 9 kompiliert und ausgeführt werden. Bei einigen Komponenten, die mit externen Systemen interagieren, z. B. Connectors, Dateisystemen und Reportern, werden die entsprechenden Projekte von Java 9 übersprungen. Es funktioniert möglicherweise nicht, weil es möglicherweise nicht funktioniert.

Versionshinweise

Wenn Sie ein Upgrade von einer vorhandenen Version von Flink planen, finden Sie in den Versionshinweisen (https://ci.apache.org/projects/flink/flink-docs-release) eine detaillierte Übersicht über die Änderungen und neuen Funktionen. -1.9 / release-notes / flink-1.9.html? Spm = a2c65.11461447.0.0.2162645aQwyb7q).

Recommended Posts

Apache Flink 1.9.0: Integrierte Alibaba Blink-Funktionalität
Integrieren Sie Apache und Tomcat
Eine Kurzanleitung zu PyFlink, die Apache Flink und Python kombiniert
Apache Flink 1.9.0: Integrierte Alibaba Blink-Funktionalität