[PYTHON] Apache Flink 1.9.0: fonctionnalité intégrée Alibaba Blink

** Apache Flink 1.9.0 ** est une mise à jour importante qui intègre de nombreuses fonctionnalités Blink ** d'Alibaba **, y compris la récupération par lots des travaux par lots et un moteur de requête basé sur Blink.

22 août 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) a été officiellement publié. Cette nouvelle version est [Alibaba Blink](https://medium.com/@alitech_2017/alibaba-blink-real-time-computing-for-big-time-gains-707fdd583c26?spm=a2c65.11461447.0.0.2162645aQwyb7q Il s'agit de la première version après que la version interne de) ait été intégrée et intégrée dans la version officielle d'Apache, Flink.

En tant que tel, il y a quelques changements importants dans cette toute nouvelle mise à jour. Une fonctionnalité notable de cette nouvelle version est la récupération de style par lots (https://hub.packtpub.com/apache-flink-1-9-0-releases-with-fine-grained-) pour les travaux par lots. batch-recovery-state-processor-api-and-more /? Spm = a2c65.11461447.0.0.2162645aQwyb7q) et un nouveau moteur de requête basé sur Blink pour les API de table et les requêtes SQL (https: //www.i) -programmer.info/news/197-data-mining/13043-apache-flink-19-adds-new-query-engine.html?spm=a2c65.11461447.0.0.2162645aQwyb7q) aperçu. Dans le même temps, cette version fournit également l'une des fonctionnalités les plus demandées, l'API State Processor, qui donne aux jobs Flink DataSet la flexibilité de lire et d'écrire des points de sauvegarde. Cette version comprend également une interface Web reconstruite, un aperçu de la nouvelle API de table Python de Flink et une intégration avec l'écosystème Apache Hive.

Dès le début, l'objectif du projet Apache Flink était de développer un système de traitement de flux capable d'intégrer et d'exécuter de nombreuses formes d'applications de traitement de données en temps réel et hors ligne en plus de diverses applications événementielles. Avec cette version, Apache et Alibaba Cloud ont franchi une étape majeure vers leur premier objectif en intégrant les capacités de traitement par flux et par lots de Blink dans un environnement d'exécution unifié.

J'espère que cet article sera utile à toute personne intéressée par cette mise à jour et souhaitant savoir ce qui est attendu. Cet article décrit les principales nouvelles fonctionnalités, améliorations et modifications importantes apportées à Apache Flink dans cette nouvelle mise à jour. Nous examinerons également les futurs plans de développement d'Apache.

Remarque: la distribution binaire Flink 1.9 et les artefacts source ont été mis à jour dans la documentation (https://ci.apache.org/projects/flink/flink-docs-release-1.9/?spm=a2c65.11461447.0.0.2162645) Il est désormais disponible avec aQwyb7q) sur la page de téléchargement du projet Flink (https://flink.apache.org/downloads.html?spm=a2c65.11461447.0.0.2162645aQwyb7q). Flink 1.9 est une API compatible avec les versions précédentes de 1.x pour les API annotées avec l'annotation @Public. Flink liste de diffusion et JIRA Vous pouvez partager vos idées avec la communauté via /FLINK/summary?spm=a2c65.11461447.0.0.2162645aQwyb7q).

Nouvelles fonctionnalités et améliorations

Collecte de travaux par lots minimisée (FLIP-1)

Avec cette nouvelle version, le temps de récupération d'un lot après l'échec d'une tâche, qu'il s'agisse d'un ensemble de données, d'une API de table ou d'un travail SQL, a été considérablement réduit.

Jusqu'à Flink 1.9, les échecs de tâches de tâches par lots étaient récupérés grâce au processus complexe consistant à annuler toutes les tâches et à redémarrer l'ensemble du travail. Autrement dit, le travail devait repartir de zéro, annulant toute progression.

Cependant, cette version de Flink utilise ces données pour conserver les résultats intermédiaires à la périphérie du shuffle réseau et ne récupérer que les tâches affectées par l'échec. Dans le cadre de ce processus, vous pouvez avoir une zone de basculement qui est un ensemble de tâches connectées via un échange de données en pipeline. Une connexion par lots pour un travail définit les limites de sa zone de basculement. Pour plus d'informations sur tout cela, voir [FLIP-1](https://cwiki.apache.org/confluence/display/FLINK/FLIP-1+%3A+Fine+Grained+Recovery+from+Task+Failures?spm= Voir a2c65.11461447.0.0.2162645aQwyb7q).

image.png

Pour utiliser cette nouvelle stratégie de basculement, assurez-vous qu'il existe une entrée jobmanager.execution.failover-strategy: region dans flink-conf.yaml.

Remarque: La configuration du package de distribution 1.9 a cette entrée par défaut, mais si vous souhaitez réutiliser le fichier de configuration de la configuration précédente, vous devrez l'ajouter manuellement.

La stratégie de basculement "Région" décrite ci-dessus accélère et améliore la récupération des travaux de streaming, c'est-à-dire des travaux sans mélange comme keyBy () et rééquilibrage. Lorsqu'un tel travail est récupéré, seules les tâches du pipeline concerné (zone d'échec) seront redémarrées. Pour toutes les autres tâches de streaming, le comportement de récupération est le même que dans les versions précédentes de Flink.

API du processeur d'état (FLIP-43)

Jusqu'à Flink 1.9, pour accéder à l'état du travail de l'extérieur, (encore expérimental) Queryable State /state/queryable_state.html?spm=a2c65.11461447.0.0.2162645aQwyb7q) était limité. Cette version introduit une nouvelle bibliothèque puissante pour la lecture, l'écriture et la modification des instantanés d'état à l'aide de l'API DataSet. En pratique, cela signifie:

La nouvelle API de processeur d'état couvre toutes les variantes d'instantanés (points de sauvegarde, points de contrôle complets, points de contrôle incrémentiels). Pour plus d'informations, voir FLIP-43 S'il vous plaît.

Arrêt au point de sauvegarde (FLIP-34)

"Cancel-with-savepoint" , Flink est une opération courante pour arrêter et redémarrer des tâches, créer une fourche et mettre à jour. Cependant, la mise en œuvre existante de ceci avait le problème que la persistance des données des données transférées vers le système de stockage externe ne pouvait pas être entièrement garantie. Pour améliorer la sémantique de bout en bout lors de l'arrêt d'un travail, Flink 1.9 introduit un nouveau mode SUSPEND qui arrête un travail à un point de sauvegarde tout en assurant la cohérence des données de sortie. Vous pouvez suspendre le travail dans le client Flink CLI comme suit:

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

Le statut du dernier travail en cas de succès est défini sur «FINISHED», de sorte que vous pouvez facilement voir si l'opération a échoué. Voir FLIP-34 pour plus d'informations.

Refactoring de l'interface utilisateur Web Flink

[Discussion] sur l'interface utilisateur Web de Flink (http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Change-underlying-Frontend-Architecture-for-Flink-Web-Dashboard-td24902 Après .html? Spm = a2c65.11461447.0.0.2162645aQwyb7q) (voir lien ici), la communauté a décidé de refactoriser ce composant avec la dernière version stable, Angular (qui se trouve être Angular 7.0 ou version ultérieure). fait. Cette mise à jour repensée est la valeur par défaut de la 1.9.0. Cependant, Flink 1.9.0 inclut un lien pour basculer vers l'ancienne interface utilisateur Web.

image.png

image.png

Remarque: il convient de noter que compte tenu de ces changements majeurs, il n'est pas garanti que les anciennes versions de l'interface Web auront les mêmes fonctionnalités que la nouvelle version à l'avenir. Les anciennes versions de l'interface utilisateur Web seront obsolètes une fois que la nouvelle version sera stable.

Aperçu du nouveau processeur de requêtes Blink SQL

Avec Blink d'Alibaba intégré à Apache Flink, la communauté a travaillé sur l'intégration de l'optimiseur de requêtes de Blink et des exécutions de l'API de table et des fonctionnalités de requête SQL dans Flink. La première étape de cette tâche a été de refactoriser le module monolithique «flink-table» en un module plus petit (FLIP-32. -32% 3A + Restructuration + flink-table + pour + futures + contributions? Spm = a2c65.11461447.0.0.2162645aQwyb7q)). Pour les modules API Java et Scala, les optimiseurs et les modules d'exécution, cela signifie des interfaces bien structurées et bien définies.

image.png

L'étape suivante était d'étendre le planificateur Blink pour implémenter une nouvelle interface d'optimisation. Une version du processeur Flink antérieure à 1.9 et un nouveau processeur de requêtes basé sur Blink. Le processeur de requêtes basé sur Blink offre une meilleure couverture SQL et 1.9 prend entièrement en charge TPC-H. La prise en charge de TPC-DS est prévue pour la prochaine version.

Il améliore également les performances des requêtes par lots en fonction de la sélection de plans en fonction des coûts et d'une optimisation plus large des requêtes avec davantage de règles d'optimisation. Enfin, la génération de code et les implémentations d'opérateurs coordonnées ont également été améliorées. Le processeur de requêtes basé sur Blink permet une diffusion en continu plus puissante, ainsi que de nouvelles fonctionnalités tant attendues telles que les jointures de table de dimension, TopN, la déduplication, des optimisations pour résoudre les biais de données dans des scénarios agrégés et des fonctions intégrées plus pratiques. Je le fais.

Remarque: La sémantique des deux processeurs de requête et l'ensemble des opérations prises en charge sont pour la plupart mis en correspondance, mais pas exactement. Consultez les notes de version pour plus d'informations.

Cependant, l'intégration du processeur de requêtes de Blink n'est pas encore terminée. Les processeurs antérieurs à Flink 1.9 sont toujours le processeur par défaut dans Flink 1.9 et sont recommandés pour les environnements de production.

Vous pouvez activer le processeur Blink en définissant les paramètres d'environnement lors de la création de l'environnement de table. Le processeur sélectionné doit se trouver dans le chemin de classe du processus Java en cours d'exécution. Dans une configuration de cluster, par défaut, les deux processeurs de requête sont automatiquement chargés dans le chemin de classe. Lors de l'interrogation depuis l'EDI, ajoutez explicitement des dépendances du planificateur au projet (https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/? spm = a2c65.11461447.0.0.2162645aQwyb7q # table-program-dependencies) doit être effectué.

Autres améliorations dans l'API de table et SQL

En plus des progrès passionnants du planificateur Blink, la communauté a également travaillé pour améliorer ces interfaces.

Dans le cadre de la refactorisation et de la division du module flink-table, deux modules API indépendants pour Java et Scala ont été créés. Pour quiconque utilise Java, ce n'est pas un grand changement. Cependant, les utilisateurs Java peuvent désormais utiliser l'API de table et SQL sans utiliser de dépendances Scala.

Dans la communauté, les [Informations de type] de Flink (https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/types_serialization.html?spm=a2c65.11461447.0.0.2162645aQwyb7q#flinks-typeinformation- class) New Data Type System pour séparer l'API Table de la classe et améliorer la conformité aux normes SQL /table/types.html?spm=a2c65.11461447.0.0.2162645aQwyb7q#data-types) a été implémenté. Ce travail est toujours en cours et sera terminé dans la prochaine version. Dans Flink 1.9, UDF n'a pas encore été porté sur le nouveau système de types.

--Conversion multi-colonnes / multi-lignes de l'API de table (voir [FLIP-29](voir FLIP-29)

La fonctionnalité de l'API Table a été améliorée par une série de transformations qui prennent en charge l'entrée et la sortie multi-lignes et multi-colonnes. Ces transformations ont rendu beaucoup plus facile la mise en œuvre de la logique de traitement, qui est lourde à mettre en œuvre à l'aide d'opérateurs relationnels.

--Nouvelle API de catalogue unifié

La communauté a remanié et remplacé certaines API de catalogue existantes pour fournir une manière unifiée de gérer les catalogues internes et externes. Ce travail a été principalement initié vers l'intégration avec Hive. De plus, cette refonte a amélioré la commodité générale de la gestion des métadonnées de catalogue dans Flink.

Avant la version 1.9, Flink SQL ne prenait en charge que les instructions DML telles que SELECT et INSERT. Les tables externes, en particulier les sources et les récepteurs de table, devaient être enregistrées à l'aide de code Java / Scala ou de fichiers de configuration. Dans Flink 1.9, la communauté a ajouté la prise en charge des instructions SQL DDL pour l'enregistrement et la suppression de tables, en particulier les commandes CREATE TABLE et DROP TABLE. Cependant, la communauté n'a pas ajouté d'extensions de syntaxe spécifiques au flux pour définir l'extraction d'horodatage et la génération de filigrane. La prise en charge complète des scénarios de flux est prévue pour la prochaine version.

Aperçu de l'intégration Hive (FLINK-10556)

Apache Hive permet de stocker de grandes quantités de données structurées et d'exécuter des requêtes Hadoop Largement utilisé dans l'écosystème. En plus d'être un processeur de requêtes, Hive est un Metastore pour gérer et organiser de grands ensembles de données. Il comporte un catalogue appelé .0.2162645aQwyb7q). Un point d'intégration courant pour les processeurs de requêtes est de s'intégrer à Hive Metastore pour rendre Hive disponible pour la gestion des données.

Récemment, la communauté a commencé à implémenter un catalogue externe de requêtes SQL qui se connectent à l'API Flink Table et Hive Metastore. Flink 1.9 vous permet d'interroger et de traiter divers formats de données stockés dans Hive. De plus, l'intégration avec Hive vous permet d'utiliser Hive UDF dans les API Flink Table et les requêtes SQL. Pour plus d'informations, voir FLINK-10556.

Auparavant, les tables définies dans l'API Table et SQL étaient toujours temporaires. Le nouveau connecteur de catalogue vous permet également de conserver les tables créées avec des instructions SQL DDL vers Metastore. Autrement dit, vous pouvez vous connecter à Metastore et enregistrer une table, par exemple une table similaire à une rubrique Kafka. Vous pouvez maintenant interroger la table chaque fois que le catalogue est connecté à Metastore.

Remarque: veuillez noter que la prise en charge de Hive dans Flink 1.9 est expérimentale. La communauté prévoit de stabiliser ces fonctionnalités dans la prochaine version et accueille vos commentaires.

Aperçu de la nouvelle API de table Python (FLIP-38 )

Cette version présente la première version de l'API de table Python (voir FLIP-38). C'est un début vers l'objectif de la communauté d'introduire un support Python à part entière dans Flink. Cette fonctionnalité est conçue comme un wrapper d'API Python mince pour l'API Table, qui traduit essentiellement les appels de méthode API Table Python en appels API Java Table. Dans Flink 1.9, l'API de table Python ne prend actuellement pas en charge UDF, permettant uniquement les opérations relationnelles standard. Le support UDF dans Python est sur la feuille de route pour les futures versions.

Si vous souhaitez essayer la nouvelle API Python, installez PyFlink manuellement (https://ci.apache.org/projects/flink/flink-docs-release-1.9/flinkDev/building.html?spm=a2c65.11461447.0 .0.2162645aQwyb7q # build-pyflink) doit être effectué. Regardez la procédure pas à pas (https://ci.apache.org/projects/flink/flink-docs-release-1.9/tutorials/python_table_api.html?spm=a2c65.11461447.0.0.2162645aQwyb7q) dans la documentation et voyez vous-même Vous pouvez commencer à explorer avec. Communauté Fournit actuellement un package Python pour pyflink qui peut être installé via pip.

Changements importants

--La bibliothèque d'apprentissage automatique (flink-ml) est maintenant disponible dans FLIP-39 J'ai fait.

--Flink peut être compilé et exécuté dans Java 9, mais certains composants qui interagissent avec des systèmes externes, tels que les connecteurs, les systèmes de fichiers, les journalistes, etc., ont leurs projets correspondants ignorant le support de Java 9. Cela peut ne pas fonctionner car cela peut ne pas fonctionner.

Notes de version

Si vous prévoyez de mettre à niveau une version existante de Flink, veuillez consulter les notes de publication (https://ci.apache.org/projects/flink/flink-docs-release) pour un aperçu détaillé des changements et des nouvelles fonctionnalités. -1.9 / release-notes / flink-1.9.html? Spm = a2c65.11461447.0.0.2162645aQwyb7q).

Recommended Posts

Apache Flink 1.9.0: fonctionnalité intégrée Alibaba Blink
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