[PYTHON] Défis et opportunités Apache Flink

Dans cet article de blog, ** Apache Flink ** et son écosystème discutent du potentiel que quelque chose de grand se produise dans le domaine de l'apprentissage automatique, malgré de nombreux défis.

Par Jian Feng

Avant de discuter de l'écosystème Apache Flink, voyons d'abord ce qu'est un écosystème. Dans le monde informatique, un écosystème est une communauté de composants dérivés d'un composant de base commun, qui peut être utilisé directement ou indirectement et utilisé en conjonction avec ce composant de base pour le rendre plus grand ou plus grand. On comprend qu'un type de tâche plus spécifique peut être accompli. Ensuite, l'écosystème Flink fait référence à l'écosystème qui entoure Flink en tant que composant central.

Dans l'écosystème Big Data, Flink est un composant de calcul qui ne traite que du côté calcul et n'implique aucun système de stockage propriétaire. Cependant, dans de nombreux scénarios pratiques, vous constaterez peut-être que Flink ne peut à lui seul répondre à vos besoins. Par exemple, où lire les données, où stocker les données traitées par Flink, comment consommer les données, comment utiliser Flink pour accomplir des tâches spéciales dans l'arène commerciale verticale. Il peut être nécessaire de considérer de telles choses. En plus des aspects en aval et en amont, un écosystème solide est nécessaire pour accomplir ces tâches avec un degré d'abstraction plus élevé.

État actuel de l'écosystème Flink

Maintenant que vous comprenez ce qu'est l'écosystème, parlons de l'état actuel de l'écosystème Flink. Dans l'ensemble, l'écosystème Flink en est encore à ses balbutiements. Aujourd'hui, l'écosystème Flink prend principalement en charge une variété de connecteurs en amont et en aval et plusieurs types de clusters.

Vous pouvez lister les connecteurs que Flink prend actuellement en charge toute la journée. Cependant, pour n'en nommer que quelques-uns, 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 / connecteurs / 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](https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/filesystem_sink.html?spm=a2c65.11461447.0 0,7a241797OM codF). Deuxièmement, Flink prend en charge presque toutes les principales sources de données. En ce qui concerne les clusters, Flink est actuellement Standalone et YARN est pris en charge. Compte tenu de l'état actuel de l'écosystème, Flink est principalement utilisé pour calculer les données de flux. L'utilisation de Flink dans d'autres scénarios (tels que l'apprentissage automatique et l'analyse interactive) peut être une tâche relativement complexe, et il y a encore beaucoup d'espoir pour l'expérience utilisateur dans ces scénarios. Mais même dans ces défis, il ne fait aucun doute que l'écosystème Flink a de nombreuses opportunités.

Défis et opportunités pour l'écosystème Flink

Bien que Flink serve de plate-forme informatique Big Data principalement utilisée pour le traitement par lots et par flux, il a également un grand potentiel pour d'autres utilisations. À mon avis, un écosystème plus fort et plus robuste est nécessaire pour maximiser le potentiel de Flink. Pour mieux comprendre Flink, vous pouvez évaluer votre écosystème à partir de deux dimensions de mise à l'échelle différentes.

1, mise à l'échelle horizontale. En termes de mise à l'échelle horizontale, l'écosystème doit construire une solution de bout en bout plus complète pour ce qu'il a déjà. Par exemple, cette solution comprend divers connecteurs qui connectent différentes sources de données en amont et en aval, une intégration avec des frameworks d'apprentissage machine en aval, et même en aval BI Tools. -Intelligence /? Spm = a2c65.11461447.0.0.7a241797OMcodF), des outils pour simplifier la soumission et la maintenance des tâches Flink et fournir une expérience d'analyse plus interactive Notebook / interactive-notebooks-data-analysis-visualization /? Spm = a2c65.11461447.0.0.7a241797OMcodF) peut être inclus. 2, mise à l'échelle verticale. En termes d'extension à d'autres domaines, l'écosystème Flink, plus abstrait, devait répondre à des exigences qui allaient au-delà du scénario de calcul initialement prévu. Par exemple, l'écosystème vertical comprend le traitement par lots et par flux, l'API Table (https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/tableApi.html?spm = a2c65.11461447.0.0.7a241797OMcodF) (avec une couche d'abstraction de calcul plus avancée), [CEP](https://flink.apache.org/news/2016/04/06/cep-monitoring.html?spm= a2c65.11461447.0.0.7a241797OMcodF) (moteur de traitement d'événements complexe), [Flink ML](https://ci.apache.org/projects/flink/flink-docs-stable/dev/libs/ml/?spm=a2c65 .11461447.0.0.7a241797OMcodF) (avec un cadre informatique plus avancé pour l'apprentissage automatique), adaptation à divers frameworks de cluster, etc. La figure ci-dessous suppose que l'écosystème Flink est mis à l'échelle horizontalement et verticalement comme décrit ci-dessus.

image.png

Intégration Flink et Hive

Apache Hive est un projet Apache de haut niveau développé il y a près de 10 ans. Le projet a initialement encapsulé l'instruction SQL au-dessus de MapReduce. Les utilisateurs peuvent désormais écrire des instructions SQL simples et familières au lieu d'écrire des tâches MapReduce complexes. Les instructions SQL des utilisateurs sont traduites en un ou plusieurs travaux MapReduce. Alors que le projet continue d'évoluer, le moteur informatique de Hive est devenu enfichable. Hive prend actuellement en charge trois moteurs informatiques. MR, Tez, [Spark](https: //cwiki.apache. Il prend en charge trois moteurs de calcul (org / confluence / display / Hive / Hive + on + Spark% 3A + Getting + Started? Spm = a2c65.11461447.0.0.7a241797OMcodF). Apache Hive est devenu le standard de l'industrie pour les entrepôts de données dans l'écosystème Hadoop. De nombreuses entreprises utilisent des systèmes d'entrepôt de données sur Hive depuis des années.

Flink est un cadre informatique qui intègre le traitement par lots et par flux, il doit donc bien sûr être intégré à Hive. Par exemple, si vous utilisez Flink pour exécuter ETL afin de créer un entrepôt de données en temps réel, vous devez utiliser le SQL de Hive pour les requêtes de données en temps réel.

La communauté Flink a déjà créé FLINK-10556 pour permettre une meilleure intégration et un meilleur support avec Hive. Ses principales fonctions sont les suivantes.

La communauté Flink prend des mesures étape par étape pour implémenter les fonctionnalités ci-dessus. Pour ceux qui souhaitent essayer ces fonctionnalités à l'avance, l'open source Blink développé par Alibaba Cloud -gains-707fdd583c26? spm = a2c65.11461447.0.0.7a241797OMcodF) Vous pouvez essayer le projet. Le projet open source Blink connecte Flink et Hive à une couche de métadonnées et une couche de données. Les utilisateurs peuvent utiliser Flink SQL directement pour interroger des données dans Hive ou, dans le vrai sens du terme, basculer de manière transparente entre Hive et Flink. Pour se connecter aux métadonnées, Blink a reconstruit l'implémentation du catalogue Flink et a ajouté deux catalogues: le FlinkInMemoryCatalog basé sur la mémoire et le HiveCatalog qui se connecte au Hive MetaStore. Ce catalogue Hive permet aux tâches Flink de lire les métadonnées de Hive. Pour se connecter aux données, Blink implémente HiveTableSource, qui permet aux travaux Flink de lire les données directement à partir des tables régulières ou partitionnées de Hive. Par conséquent, en utilisant Blink, les utilisateurs pourront utiliser le SQL de Flink pour lire les métadonnées et les données Hive existantes pour le traitement des données. Alibaba continuera d'améliorer la compatibilité Flink et Hive avec les requêtes, les types de données et la prise en charge de Hive UDF spécifiques à Hive. Ces améliorations contribueront progressivement à la communauté Flink.

Prend en charge l'analyse interactive avec Flink

Le traitement par lots est également un scénario d'application Flink courant. L'analyse interactive est une partie importante du traitement par lots et est particulièrement importante pour les analystes de données et les scientifiques des données.

En matière de projets et d'outils d'analyse interactive, Fink lui-même a besoin d'améliorations supplémentaires pour améliorer ses exigences de performance. Prenez FLINK-11199 comme exemple. Actuellement, il n'est pas possible de partager des données dans la même application Flink qui couvre plusieurs tâches. Le DAG pour chaque tâche reste isolé. FLINK-11199 est conçu pour résoudre ce problème et fournit une analyse interactive. Nous vous soutiendrons plus amicalement.

En outre, une plate-forme d'analyse interactive est nécessaire pour permettre aux analystes de données et aux scientifiques des données d'utiliser Flink plus efficacement. Apache Zeppelin a fait beaucoup à cet égard. Apache Zeppelin fournit un environnement de développement interactif, Scala, [Python](https: // www. C'est également le projet de premier niveau d'Apache qui prend en charge plusieurs langages de programmation tels que python.org/?spm=a2c65.11461447.0.0.7a241797OMcodF) et SQL. Zeppelin prend également en charge un degré élevé d'évolutivité, Spark, [Hive](https: //hive.apache. Il prend en charge de nombreux moteurs Big Data tels que org /? Spm = a2c65.11461447.0.0.7a241797OMcodF) et Pig. Alibaba a déployé beaucoup d'efforts pour mettre en œuvre un meilleur support pour Flink dans Zeppelin. Les utilisateurs peuvent écrire du code Flink (Scala ou SQL) directement dans Zeppelin. De plus, au lieu d'empaqueter localement et d'exécuter le script bin / flink pour soumettre le travail manuellement, les utilisateurs peuvent soumettre le travail directement dans Zeppelin et voir les résultats du travail. Les résultats du travail peuvent être affichés sous forme de texte ou visualisés. La visualisation est particulièrement importante pour les résultats SQL. Zeppelin fournit principalement un support Flink tel que:

--Trois modes d'exécution Local, Remote, Yarn --Scala, SQL par lots, SQL de flux --Visualisation des tables statiques et dynamiques

Certains de ces changements ont été implémentés dans Flink et d'autres ont été implémentés dans Zeppelin. Vous pouvez utiliser cette image Zeppelin Docker pour tester et utiliser ces fonctionnalités avant que tous ces changements aient contribué aux communautés Flink et Zeppelin. Pour plus d'informations sur le téléchargement et l'installation de l'image Zeppelin Docker, consultez l'exemple dans la documentation Blink. Pour faciliter l'expérience des utilisateurs avec ces fonctionnalités, cette version de Zeppelin a ajouté trois didacticiels Flink intégrés. L'un montre un exemple de Streaming ETL et les deux autres montrent des exemples de Flink Batch et Flink Stream.

Prise en charge de l'apprentissage automatique avec #Flink

image.png

En tant que composant le plus important du moteur de calcul dans l'écologie du big data, Flink est désormais principalement un segment traditionnel de l'informatique et du traitement des données: l'intelligence d'affaires traditionnelle (ou BI) (par exemple, les entrepôts de données en temps réel et plus encore. Il est utilisé pour les rapports statistiques en temps réel). Cependant, le 21ème siècle est l'ère de l'intelligence artificielle (IA). Les entreprises de plusieurs secteurs différents choisissent de plus en plus la technologie de l'IA pour changer radicalement leur façon de faire des affaires. On peut dire que le moteur de calcul Big Data Flink est indispensable à une telle vague de changement dans tout le monde des affaires. Même si Flink n'est pas développé spécifiquement pour l'apprentissage automatique, l'apprentissage automatique joue toujours un rôle irremplaçable dans l'écosystème de Flink. Et à l'avenir, on s'attend à ce que Flink fournisse trois fonctions principales pour soutenir l'apprentissage automatique.

--Construire un pipeline pour l'apprentissage automatique

Actuellement, le module flink-ml de Flink implémente certains algorithmes d'apprentissage automatique traditionnels, mais doit encore être amélioré.

La communauté Flink soutient activement l'apprentissage en profondeur. Alibaba propose le projet TensorFlow on Flink, où les utilisateurs exécutent TensorFlow dans un travail Flink pour traiter les données Flink. Vous pouvez l'utiliser pour envoyer les données traitées au processus Python de TensorFlow pour un apprentissage en profondeur. Pour les langages de programmation, la communauté Flink travaille sur le support Python. Actuellement, Flink ne prend en charge que les API Java et Scala. Les deux langages sont basés sur JVM. En conséquence, Flink est actuellement adapté au traitement de Big Data dans les systèmes, mais pas très bien pour l'analyse de données et l'apprentissage automatique. En général, les personnes travaillant dans les domaines de l'analyse de données et de l'apprentissage automatique sont Python et [R](https: // www. Je préfère utiliser des langages plus avancés tels que r-project.org/about.html?spm=a2c65.11461447.0.0.7a241797OMcodF), mais la communauté Flink prévoit également de supporter ces langages dans un proche avenir. .. Flink prend d'abord en charge Python car il a évolué rapidement ces dernières années avec le développement de l'IA et du deep learning. Actuellement, TensorFlow, Pytorch, Toutes les bibliothèques d'apprentissage en profondeur courantes, telles que Keras, fournissent des API Python. Avec la prise en charge de Flink pour Python, les utilisateurs pourront connecter tous leurs pipelines pour l'apprentissage automatique dans un seul langage, ce qui devrait considérablement améliorer le développement.

Envoi et maintenance des jobs Flink

Dans un environnement de développement, les travaux Flink sont généralement soumis avec la commande shell bin / flink run. Cependant, lorsqu'elle est utilisée dans un environnement de production, cette méthode de soumission de travaux peut en fait causer un certain nombre de problèmes. Par exemple, le suivi et la gestion de l'état des travaux, la relance des travaux ayant échoué, le démarrage de plusieurs travaux Flink, la modification et la soumission des paramètres des travaux peuvent être difficiles. Ces problèmes peuvent, bien entendu, être résolus par une intervention manuelle, mais une intervention manuelle est extrêmement dangereuse dans le domaine de la production, sans parler du temps. Idéalement, toutes les opérations qui peuvent être automatisées devraient l'être. Malheureusement, il n'y a actuellement aucun outil approprié dans l'écosystème Flink. Alibaba a déjà développé les bons outils pour un usage interne, est en production depuis longtemps et s'est avéré être un outil stable et fiable pour la soumission et le maintien des tâches Flink. Actuellement, Alibaba supprimera certains des composants dont Alibaba dépend en interne et publiera le code source de ce projet. Le projet sera open source au premier semestre 2019.

En résumé, l'écosystème Flink actuel présente de nombreux problèmes, mais en même temps, il y a beaucoup de place pour le développement. La communauté Apache Flink est humaine et nous nous efforçons constamment de construire un écosystème Flink plus fort pour libérer tout le potentiel de Flink.

Avez-vous une idée? Ressentez-vous de l'inspiration? Rejoignez la communauté et construisez ensemble un meilleur écosystème Flink.

Recommended Posts

Défis et opportunités Apache Flink
Intégrez Apache et Tomcat
Un guide rapide de PyFlink qui combine Apache Flink et Python
Apache Flink 1.9.0: fonctionnalité intégrée Alibaba Blink