Modèle de programmation pour Apache Beam

Dataflow est basé sur le projet Open Source Apache Beam. Ce document décrit le modèle de programmation Apache Beam.

Présentation

Apache Beam est un modèle unifié Open Source permettant de définir des pipelines par lot et par flux. Le modèle de programmation Apache Beam simplifie la mécanique de traitement de données à grande échelle. À l'aide de l'un des SDK Apache Beam, vous créez un programme qui définit le pipeline. Vous exécutez ensuite le pipeline sur une plate-forme spécifique telle que Dataflow. Ce modèle vous permet de vous concentrer sur la construction logique de votre tâche de traitement de données plutôt que sur la gestion de l'orchestration du traitement parallèle.

Apache Beam vous isole des détails de bas niveau du traitement distribué, tels que la coordination des nœuds de calcul, la segmentation des ensembles de données et d'autres tâches du même type. Dataflow gère entièrement ces détails de bas niveau.

Un pipeline est un graphe de transformations appliqué à des collections de données. Dans Apache Beam, une collection est appelée PCollection et une transformation est appelée PTransform. Une PCollection peut être limitée ou illimitée. Une PCollection limitée a une taille fixe et connue, et peut être traitée à l'aide d'un pipeline par lot. Les PCollections illimitées doivent utiliser un pipeline par flux, car les données sont traitées à mesure de leur arrivée.

Apache Beam fournit des connecteurs pour lire et écrire sur différents systèmes, y compris des services Google Cloud et des technologies tierces telles qu'Apache Kafka.

Le schéma suivant illustre un pipeline Apache Beam.

Schéma d'un pipeline Apache Beam

Vous pouvez écrire des PTransforms qui effectuent une logique arbitraire. Les SDK Apache Beam fournissent également une bibliothèque de PTransforms utiles et prêtes à l'emploi, telles que :

  • Filtrer tous les éléments qui ne respectent pas un prédicat.
  • Appliquer une fonction de mappage de type 1:1 sur chaque élément.
  • Regrouper les éléments par clé.
  • Compter les éléments d'une collection.
  • Compter les éléments associés à chaque clé d'une collection de clé-valeurs.

Pour exécuter un pipeline Apache Beam à l'aide de Dataflow, procédez comme suit :

  1. Utilisez le SDK Apache Beam pour définir et créer le pipeline. Vous pouvez également déployer un pipeline prédéfini à l'aide d'un modèle Dataflow.
  2. Utilisez Dataflow pour exécuter le pipeline. Dataflow alloue un pool de VM pour exécuter la tâche, déploie le code sur les VM et orchestre l'exécution de la tâche.
  3. Dataflow effectue des optimisations sur le backend pour exécuter votre pipeline efficacement et tirer parti de la parallélisation.
  4. Lorsqu'une tâche est en cours d'exécution et après qu'elle se termine, utilisez les fonctionnalités de gestion Dataflow pour surveiller la progression et résoudre les problèmes.

Concepts d'Apache Beam

Cette section contient un résumé explicatif des concepts fondamentaux.

Concepts fondamentaux

Pipelines
Un pipeline encapsule toute la série de calculs nécessaires à la lecture des données d'entrée, à la transformation de ces données et à l'écriture des données de sortie. La source d'entrée et le récepteur de sortie peuvent être du même type ou de types différents, ce qui vous permet de convertir les données d'un format à un autre. Les programmes Apache Beam commencent par construire un objet Pipeline, puis utilisent cet objet comme base pour créer les ensembles de données du pipeline. Chaque pipeline représente une seule tâche pouvant être répétée.
PCollection
Une PCollection représente un ensemble de données multi-éléments qui peut être distribué et qui agit en tant que données du pipeline. Les transformations Apache Beam utilisent des objets PCollection comme entrées et sorties pour chaque étape de votre pipeline. Une PCollection peut contenir un ensemble de données d'une taille fixe ou un ensemble de données illimité provenant d'une source de données constamment mise à jour.
Transformations
Une transformation représente une opération de traitement qui transforme les données. Une transformation utilise une ou plusieurs PCollection en entrée, effectue une opération que vous spécifiez sur chaque élément de cette collection, et génère une ou plusieurs PCollection en sortie. Une transformation peut effectuer quasiment tout type de traitement, y compris effectuer des calculs mathématiques sur des données, convertir des données d'un format à un autre, regrouper des données, lire et écrire des données, filtrer des données pour en extraire certains éléments, ou encore combiner des éléments de données en valeurs uniques.
ParDo
ParDo est l'opération de traitement parallèle principale dans les SDK Apache Beam. Elle appelle une fonction spécifiée par l'utilisateur sur chacun des éléments de la PCollection en entrée. ParDo collecte les éléments de sortie (quel que soit leur nombre, même s'il n'y en a aucun) dans une PCollection de sortie. La transformation ParDo traite les éléments indépendamment, et éventuellement en parallèle.
E/S pipeline
Les connecteurs d'E/S Apache Beam vous permettent de lire des données dans votre pipeline et d'écrire des données de sortie à partir de votre pipeline. Un connecteur d'E/S se compose d'une source et d'un récepteur. Toutes les sources et tous les récepteurs Apache Beam sont des transformations qui permettent à votre pipeline d'utiliser des données provenant de différents formats de stockage de données. Vous pouvez également écrire un connecteur d'E/S personnalisé.
Agrégation
L'agrégation est le processus consistant à calculer une valeur à partir de plusieurs éléments d'entrée. Le modèle de calcul principal pour l'agrégation dans Apache Beam consiste à regrouper tous les éléments avec une clé et une fenêtre communes. Ensuite, il combine chaque groupe d'éléments à l'aide d'une opération associative et commutative.
Fonctions définies par l'utilisateur
Certaines opérations dans Apache Beam permettent d'exécuter du code défini par l'utilisateur afin de configurer la transformation. Pour ParDo, le code défini par l'utilisateur spécifie l'opération à appliquer à chaque élément, et pour Combine, il indique comment combiner les valeurs. Un pipeline peut contenir des fonctions définies par l'utilisateur écrites dans un langage différent de celui de votre exécuteur. Un pipeline peut également contenir des fonctions définies par l'utilisateur écrites dans plusieurs langages.
Exécuteur
L'exécuteur est le logiciel qui accepte un pipeline et l'exécute. La plupart des exécuteurs sont des convertisseurs ou des adaptateurs de systèmes de traitement de big data massivement parallèle. D'autres exécuteurs existent pour les tests et le débogage en local.
Source
Une transformation qui lit à partir d'un système de stockage externe. Un pipeline lit généralement les données d'entrée à partir d'une source. La source possède un type, qui peut être différent du type de récepteur. Vous pouvez donc modifier le format des données lors de leur passage dans le pipeline.
Récepteur
Une transformation qui écrit dans un système de stockage de données externe, tel qu'un fichier ou une base de données.
TextIO
Une fonction PTransform pour lire et écrire des fichiers texte. La source et le récepteur TextIO acceptent les fichiers compressés avec gzip et bzip2. La source d'entrée TextIO est compatible avec JSON. Vos données sources doivent toutefois être délimitées par un saut de ligne pour que le service Dataflow puisse paralléliser l'entrée et la sortie. Vous pouvez utiliser une expression régulière pour cibler des fichiers spécifiques avec la source TextIO. Dataflow est compatible avec les schémas généraux de caractères génériques. Votre expression glob peut apparaître n'importe où dans le chemin de fichier. Dataflow n'accepte toutefois pas les caractères génériques récursifs (**).

Concepts avancés

Heure de l'événement
Heure à laquelle un événement de données se produit, déterminée par l'horodatage de l'élément de données lui-même. Elle est différente de l'heure à laquelle l'élément de données réel est traité à n'importe quelle étape du pipeline.
Fenêtrage
Le fenêtrage permet de regrouper des opérations sur des collections illimitées en les divisant en fenêtres de collections finies en fonction de l'horodatage des différents éléments. Une fonction de fenêtrage indique à l'exécuteur comment affecter des éléments à une fenêtre initiale et comment fusionner des fenêtres d'éléments groupés. Apache Beam vous permet de définir différents types de fenêtres ou d'utiliser les fonctions de fenêtrage prédéfinies.
Filigranes
Apache Beam suit un filigrane, qui est la notion du système qui permet de prévoir que toutes les données d'une fenêtre spécifique sont arrivées dans le pipeline. Apache Beam suit un filigrane car il n'est pas garanti que les données parviennent dans un pipeline dans l'ordre chronologique ou à des intervalles prévisibles. De plus, rien ne certifie que les événements de données s'afficheront dans le pipeline dans leur ordre de génération.
Déclencheur
Les déclencheurs déterminent à quel moment émettre les résultats agrégés à l'arrivée des données. Pour les données limitées, les résultats sont émis une fois que toutes les entrées ont été traitées. Pour les données illimitées, les résultats sont émis lorsque le filigrane dépasse la fin de la fenêtre, indiquant ainsi que le système estime que toutes les données d'entrée pour cette fenêtre ont été traitées. Apache Beam fournit plusieurs déclencheurs prédéfinis et vous permet de les combiner.

Étapes suivantes

Apache Beam® est une marque déposée d'Apache Software Foundation ou de ses filiales aux États-Unis et/ou dans d'autres pays.