[PYTHON] Herausforderungen und Chancen von Apache Flink

In diesem Blogbeitrag diskutieren ** Apache Flink ** und sein Ökosystem das Potenzial, dass trotz vieler Herausforderungen im Bereich des maschinellen Lernens etwas Großartiges passieren kann.

Von Jian Feng

Bevor wir das Ökosystem von Apache Flink diskutieren, schauen wir uns zunächst an, was ein Ökosystem ist. In der IT-Welt ist ein Ökosystem eine Gemeinschaft von Komponenten, die von einer gemeinsamen Kernkomponente abgeleitet sind. Diese können direkt oder indirekt verwendet und in Verbindung mit dieser Kernkomponente verwendet werden, um sie größer oder größer zu machen. Es versteht sich, dass eine spezifischere Art von Aufgabe erfüllt werden kann. Als nächstes bezieht sich das Flink-Ökosystem auf das Ökosystem, das Flink als Kernkomponente umgibt.

Im Big-Data-Ökosystem ist Flink eine Rechenkomponente, die sich nur mit der Computerseite befasst und kein proprietäres Speichersystem umfasst. In vielen praktischen Szenarien kann es jedoch vorkommen, dass Flink allein Ihre Anforderungen nicht erfüllen kann. Zum Beispiel, wo Daten gelesen werden sollen, wo Flink-verarbeitete Daten gespeichert werden sollen, wie die Daten verbraucht werden sollen, wie Flink verwendet werden soll, um spezielle Aufgaben im vertikalen Geschäftsbereich auszuführen. Es kann notwendig sein, solche Dinge zu berücksichtigen. Zusätzlich zu den Downstream- und Upstream-Aspekten wird ein starkes Ökosystem benötigt, um diese Aufgaben mit einem höheren Abstraktionsgrad zu erfüllen.

Aktueller Status des Flink-Ökosystems

Nachdem Sie nun verstanden haben, was das Ökosystem ist, lassen Sie uns über den aktuellen Zustand des Flink-Ökosystems sprechen. Insgesamt steckt das Flink-Ökosystem noch in den Kinderschuhen. Heute unterstützt das Flink-Ökosystem hauptsächlich eine Vielzahl von Upstream- und Downstream-Konnektoren sowie verschiedene Arten von Clustern.

Sie können die Konnektoren auflisten, die Flink derzeit den ganzen Tag unterstützt. Um nur einige zu nennen: Kafka , Cassandra, [Elasticsearch](https: / /ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/elasticsearch.html?spm=a2c65.11461447.0.0.7a241797OMcodF), Kinesis /flink/flink-docs-stable/dev/connectors/kinesis.html?spm=a2c65.11461447.0.0.7a241797OMcodF), [RabbitMQ](https://ci.apache.org/projects/flink/flink-docs-release -1.2 / dev / connectors / rabbitmq.html? Spm = a2c65.11461447.0.0.7a241797OMcodF), [JDBC](https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/connect .html? spm = a2c65.11461447.0.0.7a241797OMcodF), HDFS .0.7a241797OM codF). Zweitens unterstützt Flink fast alle wichtigen Datenquellen. In Bezug auf Cluster ist Flink derzeit Standalone und YARN wird unterstützt. In Anbetracht des aktuellen Zustands des Ökosystems wird Flink hauptsächlich zur Berechnung von Stream-Daten verwendet. Die Verwendung von Flink in anderen Szenarien (z. B. maschinelles Lernen und interaktive Analyse) kann eine relativ komplexe Aufgabe sein, und es besteht noch viel Hoffnung für die Benutzererfahrung in diesen Szenarien. Aber auch bei diesen Herausforderungen besteht kein Zweifel daran, dass das Flink-Ökosystem viele Möglichkeiten bietet.

Herausforderungen und Chancen für das Flink-Ökosystem

Während Flink als Big-Data-Computing-Plattform dient, die hauptsächlich für die Stapel- und Stream-Verarbeitung verwendet wird, bietet es auch für andere Zwecke ein großes Potenzial. Meiner Meinung nach ist ein stärkeres und robusteres Ökosystem erforderlich, um das Potenzial von Flink zu maximieren. Um Flink besser zu verstehen, können Sie Ihr Ökosystem anhand von zwei verschiedenen Skalierungsdimensionen bewerten.

1, horizontale Skalierung. In Bezug auf die horizontale Skalierung muss das Ökosystem eine umfassendere End-to-End-Lösung für das entwickeln, was es bereits hat. Diese Lösung umfasst beispielsweise verschiedene Konnektoren, die verschiedene vor- und nachgelagerte Datenquellen verbinden, die Integration in nachgelagerte Frameworks für maschinelles Lernen und sogar nachgelagerte BI-Tools. -Intelligence /? Spm = a2c65.11461447.0.0.7a241797OMcodF) Integration, Tools zur Vereinfachung der Übermittlung und Wartung von Flink-Jobs und Bereitstellung einer interaktiveren Analyseerfahrung Notebook / Interactive-Notebooks-Datenanalyse-Visualisierung /? Spm = a2c65.11461447.0.0.7a241797OMcodF) kann enthalten sein. 2, vertikale Skalierung. In Bezug auf die Skalierung auf andere Bereiche musste das abstraktere Flink-Ökosystem Anforderungen erfüllen, die über das ursprünglich beabsichtigte Berechnungsszenario hinausgingen. Zum vertikalen Ökosystem gehört beispielsweise Batch- und Stream-Computing, Tabellen-API (https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/tableApi.html?spm) = a2c65.11461447.0.0.7a241797OMcodF) (mit einer fortgeschritteneren rechnergestützten Abstraktionsschicht), CEP a2c65.11461447.0.0.7a241797OMcodF) (komplexe Ereignisverarbeitungs-Engine), Flink ML .11461447.0.0.7a241797OMcodF) (mit einem erweiterten Computer-Framework für maschinelles Lernen), Anpassung an verschiedene Cluster-Frameworks und mehr. In der folgenden Abbildung wird davon ausgegangen, dass das Flink-Ökosystem wie oben beschrieben horizontal und vertikal skaliert ist.

image.png

Flink and Hive-Integration

Apache Hive ist ein Apache-Projekt der obersten Ebene, das vor fast 10 Jahren entwickelt wurde. Das Projekt hat die SQL-Anweisung zunächst über MapReduce gekapselt. Benutzer können jetzt einfache, vertraute SQL-Anweisungen schreiben, anstatt komplexe MapReduce-Jobs zu schreiben. SQL-Anweisungen von Benutzern werden in einen oder mehrere MapReduce-Jobs übersetzt. Während sich das Projekt weiterentwickelt, ist die Computer-Engine von Hive steckbar geworden. Hive unterstützt derzeit drei Computer-Engines. MR, Tez, [Spark](https: //cwiki.apache). Es unterstützt drei Computer-Engines (org / Confluence / Display / Hive / Hive + on + Spark% 3A + Erste Schritte? Spm = a2c65.11461447.0.0.7a241797OMcodF). Apache Hive ist zum Industriestandard für Data Warehouses im Ökosystem Hadoop geworden. Viele Unternehmen betreiben seit Jahren Data Warehouse-Systeme auf Hive.

Flink ist ein Computer-Framework, das die Stapel- und Stream-Verarbeitung integriert. Daher muss es natürlich in Hive integriert werden. Wenn Sie beispielsweise Flink verwenden, um ETL zum Erstellen eines Echtzeit-Data Warehouse auszuführen, müssen Sie Hives SQL für Echtzeit-Datenabfragen verwenden.

Die Flink-Community hat bereits FLINK-10556 erstellt, um eine bessere Integration und Unterstützung mit Hive zu ermöglichen. Seine Hauptfunktionen sind wie folgt.

Die Flink-Community unternimmt schrittweise Schritte, um die oben genannten Funktionen zu implementieren. Für diejenigen, die diese Funktionen im Voraus ausprobieren möchten, wurde das von Alibaba Cloud entwickelte Open Source Blink entwickelt -gains-707fdd583c26? spm = a2c65.11461447.0.0.7a241797OMcodF) Möglicherweise möchten Sie das Projekt ausprobieren. Das Open-Source-Blink-Projekt verbindet Flink und Hive mit einer Metadatenschicht und einer Datenschicht. Benutzer können Flink SQL direkt verwenden, um die Daten in Hive abzufragen und im wahrsten Sinne des Wortes nahtlos zwischen Hive und Flink zu wechseln. Um eine Verbindung zu den Metadaten herzustellen, hat Blink die Implementierung des Flink-Katalogs neu strukturiert und zwei Kataloge hinzugefügt: den speicherbasierten FlinkInMemoryCatalog und den HiveCatalog, der eine Verbindung zum Hive MetaStore herstellt. Mit diesem Hive-Katalog können Flink-Jobs Metadaten aus Hive lesen. Um eine Verbindung zu Daten herzustellen, implementiert Blink HiveTableSource, mit der Flink-Jobs Daten direkt aus den regulären oder partitionierten Tabellen von Hive lesen können. Durch die Verwendung von Blink können Benutzer daher Flinks SQL verwenden, um vorhandene Hive-Metadaten und -Daten für die Datenverarbeitung zu lesen. Alibaba wird die Flink- und Hive-Kompatibilität mit Hive-spezifischen Abfragen, Datentypen und Hive-UDF-Unterstützung weiter verbessern. Diese Verbesserungen werden schrittweise zur Flink-Community beitragen.

Unterstützt interaktive Analysen mit Flink

Die Stapelverarbeitung ist auch ein häufiges Flink-Anwendungsszenario. Die interaktive Analyse ist ein wichtiger Bestandteil der Stapelverarbeitung und besonders wichtig für Datenanalysten und Datenwissenschaftler.

Wenn es um interaktive Analyseprojekte und -tools geht, muss Fink selbst weiter verbessert werden, um die Leistungsanforderungen zu verbessern. Nehmen Sie als Beispiel FLINK-11199. Derzeit ist es nicht möglich, Daten in derselben Flink-App zu teilen, die mehrere Jobs umfasst. Die DAG für jeden Job bleibt isoliert. FLINK-11199 wurde entwickelt, um dieses Problem zu lösen und bietet interaktive Analysen. Wir werden Sie freundlicher unterstützen.

Darüber hinaus wird eine interaktive Analyseplattform benötigt, damit Datenanalysten und Datenwissenschaftler Flink effizienter nutzen können. Apache Zeppelin hat in dieser Hinsicht viel getan. Apache Zeppelin bietet eine interaktive Entwicklungsumgebung, Scala, [Python](https: // www. Es ist auch Apaches Top-Level-Projekt, das mehrere Programmiersprachen wie python.org/?spm=a2c65.11461447.0.0.7a241797OMcodF) und SQL unterstützt. Zeppelin unterstützt auch ein hohes Maß an Skalierbarkeit: Spark, [Hive](https: //hive.apache). Es unterstützt viele Big-Data-Engines wie org /? Spm = a2c65.11461447.0.0.7a241797OMcodF) und Pig. Alibaba hat große Anstrengungen unternommen, um Flink in Zeppelin besser zu unterstützen. Benutzer können Flink-Code (Scala oder SQL) direkt in Zeppelin schreiben. Anstatt lokal zu verpacken und dann das bin / flink-Skript auszuführen, um den Job manuell zu senden, können Benutzer den Job direkt in Zeppelin senden und die Jobergebnisse anzeigen. Auftragsergebnisse können in Textform oder visualisiert angezeigt werden. Die Visualisierung ist besonders wichtig für SQL-Ergebnisse. Zeppelin bietet hauptsächlich Flink-Unterstützung wie:

Einige dieser Änderungen wurden in Flink implementiert, andere in Zeppelin. Mit diesem Zeppelin Docker-Image können Sie diese Funktionen testen und verwenden, bevor alle diese Änderungen zu den Flink- und Zeppelin-Communities beigetragen haben. Weitere Informationen zum Herunterladen und Installieren des Zeppelin Docker-Images finden Sie im Beispiel in der Blink-Dokumentation. Um Benutzern das Experimentieren mit diesen Funktionen zu erleichtern, wurden in dieser Version von Zeppelin drei integrierte Flink-Tutorials hinzugefügt. Eines zeigt ein Beispiel für Streaming ETL und die anderen beiden zeigen Beispiele für Flink Batch und Flink Stream.

Unterstützung für maschinelles Lernen mit #Flink

image.png

Als wichtigste Komponente der Computer-Engine in der Ökologie von Big Data ist Flink heute in erster Linie ein traditionelles Segment der Datenverarbeitung und -verarbeitung: traditionelle Business Intelligence (oder BI) (z. B. Echtzeit-Data Warehouses und mehr). Es wird für statistische Echtzeitberichte verwendet. Das 21. Jahrhundert ist jedoch das Zeitalter der künstlichen Intelligenz (KI). Unternehmen in verschiedenen Branchen entscheiden sich zunehmend für KI-Technologie, um ihre Geschäftsabläufe radikal zu verändern. Man kann sagen, dass die Big-Data-Computing-Engine Flink für eine solche Welle des Wandels in der gesamten Geschäftswelt unverzichtbar ist. Auch wenn Flink nicht speziell für maschinelles Lernen entwickelt wurde, spielt maschinelles Lernen eine unersetzliche Rolle im Flink-Ökosystem. Und in Zukunft wird erwartet, dass Flink drei Hauptfunktionen zur Unterstützung des maschinellen Lernens bereitstellt.

Derzeit implementiert das Flink-ml-Modul von Flink einige traditionelle Algorithmen für maschinelles Lernen, muss jedoch weiter verbessert werden.

Die Flink-Community unterstützt aktiv Deep Learning. Alibaba bietet das TensorFlow on Flink-Projekt an, bei dem Benutzer TensorFlow in einem Flink-Job ausführen, um Flink-Daten zu verarbeiten. Sie können es verwenden, um die verarbeiteten Daten für ein Deep-Learning-Training an den Python-Prozess von TensorFlow zu senden. Für Programmiersprachen arbeitet die Flink-Community an der Python-Unterstützung. Derzeit unterstützt Flink nur Java- und Scala-APIs. Beide Sprachen basieren auf JVM. Daher eignet sich Flink derzeit für die Verarbeitung von Big Data in Systemen, jedoch nicht sehr gut für die Datenanalyse oder das maschinelle Lernen. Im Allgemeinen sind Personen in den Bereichen Datenanalyse und maschinelles Lernen Python und [R](https: // www. Ich bevorzuge fortgeschrittenere Sprachen wie r-project.org/about.html?spm=a2c65.11461447.0.0.7a241797OMcodF), aber die Flink-Community plant auch, diese Sprachen in naher Zukunft zu unterstützen. .. Flink unterstützt Python zuerst, weil es sich in den letzten Jahren mit der Entwicklung von KI und Deep Learning rasant weiterentwickelt hat. Derzeit TensorFlow, Pytorch, Alle gängigen Deep-Learning-Bibliotheken wie Keras bieten Python-APIs. Mit der Unterstützung von Python durch Flink können Benutzer alle Pipelines für maschinelles Lernen in nur einer Sprache verbinden, was die Entwicklung erheblich verbessern dürfte.

Senden und Verwalten von Flink-Jobs

In einer Entwicklungsumgebung werden Flink-Jobs normalerweise mit dem Shell-Befehl bin / flink run übergeben. In einer Produktionsumgebung kann diese Methode zur Auftragsübermittlung jedoch eine Reihe von Problemen verursachen. Beispielsweise kann es schwierig sein, den Status eines Jobs zu verfolgen und zu verwalten, einen fehlgeschlagenen Job erneut zu versuchen, mehrere Flink-Jobs zu starten, Jobparameter zu ändern und zu senden. Diese Probleme können natürlich durch manuelle Eingriffe gelöst werden, aber manuelle Eingriffe sind im Produktionsbereich äußerst gefährlich, ganz zu schweigen vom zeitaufwändigen. Idealerweise sollten alle Vorgänge, die automatisiert werden können, automatisiert werden. Leider gibt es derzeit keine geeigneten Tools im Flink-Ökosystem. Alibaba hat bereits die richtigen Tools für den internen Gebrauch entwickelt, ist seit langer Zeit in Produktion und hat sich als stabiles und zuverlässiges Tool für die Übermittlung und Pflege von Flink-Aufträgen erwiesen. Derzeit wird Alibaba einige der Komponenten entfernen, von denen Alibaba intern abhängt, und den Quellcode für dieses Projekt veröffentlichen. Das Projekt wird im ersten Halbjahr 2019 Open Source sein.

Zusammenfassend hat das aktuelle Flink-Ökosystem viele Probleme, aber gleichzeitig gibt es viel Raum für Entwicklung. Die Apache Flink-Community ist menschlich und wir sind ständig bemüht, ein stärkeres Flink-Ökosystem aufzubauen, um das volle Potenzial von Flink auszuschöpfen.

Haben sie eine Idee? Fühlst du Inspiration? Treten Sie der Community bei und bauen Sie gemeinsam ein besseres Flink-Ökosystem auf.

Recommended Posts

Herausforderungen und Chancen von Apache Flink
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