Hadoop, Storm, Samza, Spark et Flink: Comparaison des cadres de données volumineuses

introduction

  • Big Data * est un terme générique désignant les stratégies et technologies non traditionnelles nécessaires pour collecter, organiser, traiter et recueillir des informations à partir de vastes ensembles de données. Bien que le problème de l’utilisation de données dépassant la puissance de calcul ou le stockage d’un seul ordinateur ne soit pas nouveau, l’omniprésence, l’ampleur et la valeur de ce type d’informatique se sont considérablement accrues ces dernières années.

Dans un guide précédent, nous avons abordé certains des concepts général, des étapes de traitement et de la terminologie utilisée dans systèmes de données volumineuses. Dans cet article, nous examinerons l’un des composants les plus essentiels d’un système de données volumineuses: les cadres de traitement. Les infrastructures de traitement calculent sur les données du système, soit en lisant à partir d’une mémoire non volatile, soit au fur et à mesure de son ingestion dans le système. Le traitement des données consiste à extraire des informations et des informations à partir de grandes quantités de points de données individuels.

Nous allons couvrir les cadres suivants:

  • * Frameworks batch uniquement: *

  • * lien: # apache-hadoop [Apache Hadoop] *

  • * Les cadres de flux uniquement: *

  • * lien: # apache-storm [Apache Storm] *

  • * lien: # apache-samza [Apache Samza] *

  • * Cadres hybrides: *

  • * lien: # apache-spark [Apache Spark] *

  • * lien: # apache-flink [Apache Flink] *

Que sont les cadres de traitement de données volumineuses?

  • Les frameworks de traitement * et * les moteurs de traitement * sont responsables de l’informatique sur les données d’un système de données. Bien qu’aucune définition faisant autorité ne distingue les «moteurs» des «cadres», il est parfois utile de définir le premier en tant que composant réel responsable de l’exploitation des données et le second en tant qu’ensemble de composants conçus pour faire de même.

Par exemple, * Apache Hadoop * peut être considéré comme un framework de traitement avec * MapReduce * comme moteur de traitement par défaut. Les moteurs et les cadres peuvent souvent être échangés ou utilisés en tandem. Par exemple, * Apache Spark *, un autre framework, peut s’accrocher à Hadoop pour remplacer MapReduce. Cette interopérabilité entre composants est l’une des raisons pour lesquelles les systèmes Big Data offrent une grande flexibilité.

Les systèmes qui gèrent cette étape du cycle de vie des données peuvent être complexes, mais les objectifs généraux sont très similaires: exploiter des données pour améliorer la compréhension, les schémas de surface et mieux comprendre les interactions complexes.

Pour simplifier la discussion de ces composants, nous allons regrouper ces cadres de traitement en fonction de l’état des données pour lesquelles ils sont conçus. Certains systèmes traitent des données par lots, tandis que d’autres traitent des données dans un flux continu au fur et à mesure de leur entrée dans le système. D’autres encore peuvent gérer les données de l’une ou l’autre de ces manières.

Nous allons présenter chaque type de traitement en tant que concept avant de plonger dans les spécificités et les conséquences de diverses implémentations.

Systèmes de traitement par lots

  • Le traitement par lots * a une longue histoire dans le monde du Big Data. Le traitement par lots implique d’opérer sur un grand ensemble de données statiques et de renvoyer le résultat ultérieurement, une fois le calcul terminé.

Les jeux de données dans le traitement par lots sont généralement…

  • bounded: les ensembles de données batch représentent une collection finie de données

  • persistante: les données sont presque toujours sauvegardées par un type de stockage permanent

  • grande: les opérations par lots sont souvent la seule option pour traiter des ensembles de données extrêmement volumineux

Le traitement par lots est bien adapté aux calculs où l’accès à un ensemble complet d’enregistrements est requis. Par exemple, lors du calcul des totaux et des moyennes, les jeux de données doivent être traités de manière globale plutôt que comme une collection d’enregistrements individuels. Ces opérations nécessitent que cet état soit maintenu pendant toute la durée des calculs.

Les tâches qui nécessitent de très grands volumes de données sont souvent mieux gérées par des opérations par lots. Que les jeux de données soient traités directement à partir du stockage permanent ou chargés en mémoire, les systèmes de traitement par lots sont conçus pour de grandes quantités et disposent des ressources pour les traiter. Étant donné que le traitement par lots excelle dans la gestion de gros volumes de données persistantes, il est fréquemment utilisé avec des données historiques.

Le compromis pour gérer de grandes quantités de données est un temps de calcul plus long. De ce fait, le traitement par lots n’est pas approprié dans les situations où le temps de traitement est particulièrement important.

Apache Hadoop

Apache Hadoop est une infrastructure de traitement qui fournit exclusivement un traitement par lots. Hadoop a été le premier framework Big Data à gagner une influence significative dans la communauté open source. Sur la base de plusieurs articles et présentations de Google sur la manière dont ils géraient d’énormes quantités de données à l’époque, Hadoop a réimplémenté les algorithmes et la pile de composants pour rendre le traitement par lots à grande échelle plus accessible.

Les versions modernes de Hadoop sont composées de plusieurs composants ou couches, qui fonctionnent ensemble pour traiter les données de lot:

  • * HDFS *: HDFS est la couche de système de fichiers distribuée qui coordonne le stockage et la réplication sur les nœuds du cluster. HDFS garantit la disponibilité des données malgré les défaillances inévitables de l’hôte. Il est utilisé comme source de données, pour stocker les résultats de traitement intermédiaires et pour conserver les résultats calculés finaux.

  • * YARN *: YARN, qui représente encore un autre négociateur de ressources, est le composant de coordination de cluster de la pile Hadoop. Il est responsable de la coordination et de la gestion des ressources sous-jacentes et de la planification des travaux à exécuter. YARN permet d’exécuter des charges de travail beaucoup plus variées sur un cluster Hadoop que lors de précédentes itérations en jouant le rôle d’interface avec les ressources du cluster.

  • * MapReduce *: MapReduce est le moteur de traitement par lots natif de Hadoop.

Modèle de traitement par lots

La fonctionnalité de traitement de Hadoop provient du moteur MapReduce. La technique de traitement de MapReduce suit la carte, mélange, réduit l’algorithme à l’aide de paires clé-valeur. La procédure de base implique:

  • Lecture du jeu de données à partir du système de fichiers HDFS

  • Division du jeu de données en morceaux et distribution parmi les nœuds disponibles

  • Application du calcul sur chaque nœud au sous-ensemble de données (les résultats intermédiaires sont réécrits sur HDFS)

  • Redistribution des résultats intermédiaires au groupe par clé

  • «Réduire» la valeur de chaque clé en résumant et en combinant les résultats calculés par les nœuds individuels

  • Ecrire les résultats finaux calculés sur HDFS

Avantages et limites

Étant donné que cette méthodologie s’appuie fortement sur le stockage permanent, la lecture et l’écriture plusieurs fois par tâche, elle a tendance à être assez lente. D’autre part, l’espace disque étant généralement l’une des ressources de serveur les plus abondantes, cela signifie que MapReduce peut gérer d’énormes jeux de données. Cela signifie également que MapReduce de Hadoop peut généralement fonctionner sur du matériel moins coûteux que certaines solutions de remplacement, car il ne tente pas de tout stocker en mémoire. MapReduce a un potentiel d’évolutivité incroyable et a été utilisé en production sur des dizaines de milliers de nœuds.

En tant que cible de développement, MapReduce est connu pour sa courbe d’apprentissage plutôt abrupte. D’autres ajouts à l’écosystème Hadoop peuvent en réduire l’impact à divers degrés, mais cela peut néanmoins contribuer à la mise en œuvre rapide d’une idée sur un cluster Hadoop.

Hadoop possède un écosystème étendu, le cluster Hadoop lui-même étant fréquemment utilisé comme bloc de construction pour d’autres logiciels. De nombreux autres frameworks et moteurs de traitement ont des intégrations Hadoop pour utiliser HDFS et le gestionnaire de ressources YARN.

Sommaire

Apache Hadoop et son moteur de traitement MapReduce offrent un modèle de traitement par lots éprouvé qui convient le mieux pour la gestion de très grands ensembles de données où le temps n’est pas un facteur important. Le faible coût des composants nécessaires au bon fonctionnement d’un cluster Hadoop rend ce traitement peu coûteux et efficace dans de nombreux cas d’utilisation. La compatibilité et l’intégration avec d’autres frameworks et moteurs signifient que Hadoop peut souvent servir de base à de multiples charges de travail de traitement utilisant différentes technologies.

Systèmes de traitement de flux

  • Traitement de flux * Les systèmes calculent plus de données lorsqu’ils entrent dans le système. Cela nécessite un modèle de traitement différent du paradigme de lot. Au lieu de définir les opérations à appliquer à un ensemble de données entier, les processeurs de flux définissent les opérations qui seront appliquées à chaque élément de données individuel lors de son passage dans le système.

Les ensembles de données en traitement de flux sont considérés comme «non liés». Cela a quelques implications importantes:

  • L’ensemble de données total est uniquement défini comme la quantité de données entrée dans le système jusqu’à présent.

  • Le jeu de données working est peut-être plus pertinent et se limite à un seul élément à la fois.

  • Le traitement est basé sur les événements et ne “finit” pas tant qu’il n’est pas explicitement arrêté. Les résultats sont immédiatement disponibles et seront continuellement mis à jour au fur et à mesure de l’arrivée des nouvelles données.

Les systèmes de traitement de flux peuvent traiter une quantité de données presque illimitée, mais ils ne traitent qu’un seul (traitement de flux réel) ou très peu d’éléments (traitement de micro-batch) à la fois, avec un état minimal maintenu entre les enregistrements. Alors que la plupart des systèmes fournissent des méthodes permettant de maintenir certains états, le traitement à la vapeur est hautement optimisé pour un traitement plus * fonctionnel * avec peu d’effets secondaires.

Les opérations fonctionnelles se concentrent sur des étapes discrètes ayant un état limité ou des effets secondaires limités. Effectuer la même opération sur le même élément de données produira la même sortie indépendamment des autres facteurs. Ce type de traitement s’accorde bien avec les flux, car l’état entre les éléments est généralement une combinaison de difficile, limité et parfois indésirable. Ainsi, bien qu’un certain type de gestion d’État soit généralement possible, ces cadres sont beaucoup plus simples et plus efficaces en leur absence.

Ce type de traitement se prête à certains types de charges de travail. Le traitement avec des exigences en temps quasi réel est bien pris en charge par le modèle de diffusion en continu. Les analyses, la consignation des erreurs sur les serveurs ou les applications, ainsi que d’autres métriques basées sur l’heure sont un choix naturel, car réagir aux changements dans ces domaines peut être essentiel pour les fonctions métier. Le traitement de flux est un bon choix pour les données pour lesquelles vous devez réagir à des changements ou à des pics et où vous souhaitez connaître les tendances au fil du temps.

Apache Storm

Apache Storm est une infrastructure de traitement de flux qui se concentre sur une latence extrêmement faible et constitue peut-être la meilleure option pour les charges de travail nécessitant un traitement en temps quasi réel. Il peut gérer de très grandes quantités de données avec des résultats plus lents et moins latents que d’autres solutions.

Modèle de traitement de flux

Le traitement du flux Storm fonctionne en orchestrant les DAG (Directed Acyclic Graphs) dans un cadre appelé * topologies *. Ces topologies décrivent les différentes transformations ou étapes à suivre pour chaque donnée entrante lors de son entrée dans le système.

Les topologies sont composées de:

  • * Streams *: flux de données conventionnels. Ce sont des données non bornées qui arrivent en permanence dans le système.

  • * Spouts *: sources de flux de données au bord de la topologie. Ceux-ci peuvent être des API, des files d’attente, etc. qui produisent des données à exploiter.

  • * Boulons *: les boulons représentent une étape de traitement qui consomme des flux, leur applique une opération et génère le résultat sous forme de flux. Les boulons sont connectés à chacun des becs, puis se connectent les uns aux autres pour organiser tout le traitement nécessaire. À la fin de la topologie, la sortie de boulon finale peut être utilisée comme entrée pour un système connecté.

Storm a pour principe de définir de petites opérations discrètes à l’aide des composants ci-dessus, puis de les composer en une topologie. Par défaut, Storm offre au moins une fois des garanties de traitement, ce qui signifie qu’il peut garantir que chaque message est traité au moins une fois, mais il peut y avoir des doublons dans certains scénarios d’échec. Storm ne garantit pas que les messages seront traités dans l’ordre.

Une abstraction appelée * Trident * est également disponible pour obtenir un traitement avec une seule et unique condition. Pour être explicite, Storm without Trident est souvent appelé * Core Storm *. Trident modifie considérablement la dynamique de traitement de Storm, augmentant la latence, ajoutant un état au traitement et mettant en œuvre un modèle de micro-traitement au lieu d’un système de diffusion en continu élément par article.

Les utilisateurs de Storm recommandent généralement d’utiliser Core Storm chaque fois que possible pour éviter ces pénalités. Dans cet esprit, la garantie de Trident de traiter les éléments une seule fois est utile dans les cas où le système ne peut pas gérer intelligemment les messages en double. Trident est également le seul choix possible dans Storm lorsque vous devez conserver l’état entre les éléments, par exemple lorsque vous comptez le nombre d’utilisateurs qui cliquent sur un lien en une heure. Trident donne à Storm la flexibilité, même si elle ne joue pas avec les atouts naturels du framework.

Les topologies Trident sont composées de:

  • * Lots de flux *: Il s’agit de micro-lots de données de flux qui sont divisés en blocs afin de fournir une sémantique de traitement par lots.

  • * Opérations *: Il s’agit de procédures de traitement par lots pouvant être effectuées sur les données.

Avantages et limites

Storm est probablement la meilleure solution actuellement disponible pour le traitement en temps quasi réel. Il est capable de gérer des données avec une latence extrêmement faible pour les charges de travail devant être traitées avec un délai minimal. Storm est souvent un bon choix lorsque le temps de traitement affecte directement l’expérience utilisateur, par exemple lorsque les retours du traitement sont directement renvoyés à la page d’un visiteur sur un site Web.

Storm avec Trident vous offre la possibilité d’utiliser des micro-lots au lieu du traitement en flux pur. Bien que cela donne aux utilisateurs une plus grande souplesse pour adapter l’outil à l’usage auquel il est destiné, cela tend également à annuler certains des principaux avantages du logiciel par rapport à d’autres solutions. Cela étant dit, le choix du style de traitement du flux reste utile.

Core Storm n’offre pas de garantie de commande des messages. Core Storm offre au moins une fois des garanties de traitement, ce qui signifie que le traitement de chaque message peut être garanti mais que des doublons peuvent se produire. Trident offre des garanties ponctuelles et peut effectuer des commandes entre lots, mais pas à l’intérieur.

En termes d’interopérabilité, Storm peut s’intégrer au négociateur de ressources YARN de Hadoop, facilitant ainsi le raccordement à un déploiement Hadoop existant. Plus que la plupart des infrastructures de traitement, Storm offre une prise en charge linguistique très étendue, offrant aux utilisateurs de nombreuses options pour la définition des topologies.

Sommaire

Pour les charges de travail de traitement de flux pur avec des exigences de latence très strictes, Storm est probablement la meilleure option mature. Il peut garantir le traitement des messages et peut être utilisé avec un grand nombre de langages de programmation. Comme Storm n’effectue pas de traitement par lots, vous devrez utiliser un logiciel supplémentaire si vous avez besoin de ces fonctionnalités. Si vous avez besoin de garanties de traitement en une seule fois, Trident peut vous le fournir. Cependant, d’autres cadres de traitement de flux pourraient également convenir mieux à ce stade.

Apache Samza

Apache Samza est une infrastructure de traitement de flux étroitement liée au système de messagerie Apache Kafka. Bien que Kafka puisse être utilisé par de nombreux systèmes de traitement de flux, Samza est spécialement conçu pour tirer parti de l’architecture et des garanties uniques de Kafka. Il utilise Kafka pour fournir la tolérance aux pannes, la mise en mémoire tampon et le stockage d’état.

Samza utilise YARN pour la négociation des ressources. Cela signifie que par défaut, un cluster Hadoop est requis (au moins HDFS et YARN), mais cela signifie également que Samza peut s’appuyer sur les riches fonctionnalités intégrées à YARN.

Modèle de traitement de flux

Samza s’appuie sur la sémantique de Kafka pour définir la manière dont les flux sont gérés. Kafka utilise les concepts suivants pour traiter des données:

  • * Sujets *: Chaque flux de données entrant dans un système Kafka est appelé un sujet. Un sujet est essentiellement un flux d’informations connexes auquel les consommateurs peuvent s’abonner.

  • * Partitions *: Kafka divise les messages entrants en partitions afin de répartir un sujet entre les nœuds. Les divisions de partition sont basées sur une clé telle que chaque message avec la même clé est garanti pour être envoyé à la même partition. Les partitions ont garanti la commande.

  • * Brokers *: Les nœuds individuels qui constituent un cluster Kafka sont appelés des courtiers.

  • * Producteur *: Tout composant écrivant dans un sujet Kafka est appelé producteur. Le producteur fournit la clé utilisée pour partitionner un sujet.

  • * Consommateurs *: Les consommateurs sont tout composant qui lit un sujet de Kafka. Les consommateurs sont responsables de la gestion des informations relatives à leur propre offset, afin de savoir quels enregistrements ont été traités en cas de défaillance.

Comme Kafka est un journal immuable, Samza traite les flux immuables. Cela signifie que toutes les transformations créent de nouveaux flux consommés par d’autres composants sans affecter le flux initial.

Avantages et limites

La dépendance de Samza sur un système de file d’attente semblable à celui de Kafka peut sembler restrictive à première vue. Cependant, il offre au système des garanties et des fonctionnalités uniques qui ne sont pas communes aux autres systèmes de traitement de flux.

Par exemple, Kafka offre déjà un stockage répliqué de données accessibles avec un faible temps de latence. Il fournit également un modèle multi-abonné très simple et peu coûteux à chaque partition de données. Toutes les sorties, y compris les résultats intermédiaires, sont également écrites en Kafka et peuvent être consommées indépendamment par les étapes en aval.

À bien des égards, cette dépendance étroite à Kafka reflète la manière dont le moteur MapReduce fait fréquemment référence à HDFS. Bien que le référencement de HDFS entre chaque calcul entraîne de sérieux problèmes de performances lors du traitement par lots, il résout un certain nombre de problèmes lors du traitement en flux.

La forte relation de Samza avec Kafka permet aux étapes de traitement d’être liées très vaguement. Un nombre arbitraire d’abonnés peut être ajouté à la sortie de n’importe quelle étape sans coordination préalable. Cela peut être très utile pour les organisations où plusieurs équipes peuvent avoir besoin d’accéder à des données similaires. Les équipes peuvent toutes s’abonner au sujet des données entrant dans le système ou s’abonner facilement à des sujets créés par d’autres équipes ayant subi un traitement. Cela peut être fait sans alourdir davantage les infrastructures sensibles à la charge telles que les bases de données.

Écrire directement à Kafka élimine également les problèmes de * contrepression *. La contre-pression se produit lorsque les pics de charge entraînent un afflux de données à un taux supérieur à celui que les composants peuvent traiter en temps réel, ce qui entraîne des blocages de traitement et éventuellement une perte de données. Kafka est conçu pour conserver les données pendant de très longues périodes, ce qui signifie que les composants peuvent être traités à leur convenance et peuvent être redémarrés sans conséquence.

Samza est capable de stocker l’état en utilisant un système de point de contrôle tolérant aux pannes implémenté en tant que magasin clé-valeur local. Cela permet à Samza d’offrir une garantie de livraison au moins une fois, mais elle ne permet pas une récupération précise de l’état agrégé (comme des comptages) en cas de défaillance, car les données peuvent être livrées plusieurs fois.

Samza propose des abstractions de haut niveau qui sont, à bien des égards, plus faciles à utiliser que les primitives fournies par des systèmes tels que Storm. Samza ne prend actuellement en charge que les langues JVM, ce qui signifie qu’elle n’a pas la même souplesse linguistique que Storm.

Sommaire

Apache Samza est un bon choix pour la diffusion en continu de charges de travail où Hadoop et Kafka sont déjà disponibles ou qu’il est judicieux de mettre en œuvre. Samza lui-même convient parfaitement aux organisations composées de plusieurs équipes utilisant (sans nécessairement coordonner étroitement) les flux de données à différentes étapes du traitement. Samza simplifie grandement de nombreuses étapes du traitement de flux et offre des performances de faible latence. Cela peut ne pas convenir si les exigences de déploiement ne sont pas compatibles avec votre système actuel, si vous avez besoin d’un traitement à latence extrêmement faible ou si vous avez des besoins importants en sémantique unique.

Systèmes de traitement hybrides: Processeurs de traitement par lots et de flux

Certains environnements de traitement peuvent gérer des charges de travail par lots et par flux. Ces frameworks simplifient diverses exigences de traitement en permettant aux mêmes composants ou API associés d’être associés pour les deux types de données.

Comme vous le verrez, la manière dont cela est réalisé varie considérablement entre Spark et Flink, les deux cadres dont nous allons discuter. Cela dépend en grande partie de la façon dont les deux paradigmes de traitement sont combinés et des hypothèses sur la relation entre les ensembles de données fixes et non fixes.

Alors que les projets centrés sur un type de traitement peuvent être parfaitement adaptés à des cas d’utilisation spécifiques, les frameworks hybrides tentent de proposer une solution générale pour le traitement des données. Ils fournissent non seulement des méthodes de traitement de données, mais ils possèdent leurs propres intégrations, bibliothèques et outils pour effectuer des tâches telles que l’analyse de graphes, l’apprentissage automatique et l’interrogation interactive.

Apache Spark

Apache Spark est une infrastructure de traitement par lots de nouvelle génération avec des capacités de traitement de flux. Conçu à partir de nombreux principes identiques au moteur MapReduce de Hadoop, Spark se concentre principalement sur l’accélération des charges de travail de traitement par lots en offrant un calcul en mémoire complet et une optimisation du traitement.

Spark peut être déployé en tant que cluster autonome (s’il est associé à une couche de stockage capable) ou peut être connecté à Hadoop au lieu du moteur MapReduce.

Modèle de traitement par lots

Contrairement à MapReduce, Spark traite toutes les données en mémoire, n’interagissant qu’avec la couche de stockage pour charger initialement les données en mémoire et, à la fin, pour conserver les résultats finaux. Tous les résultats intermédiaires sont gérés en mémoire.

Bien que le traitement en mémoire contribue considérablement à la rapidité, Spark accélère également les tâches liées aux disques grâce à une optimisation globale pouvant être obtenue en analysant à l’avance l’ensemble complet des tâches. Pour ce faire, il crée des graphiques acycliques dirigés, ou * DAG *, qui représentent toutes les opérations à effectuer, les données à exploiter ainsi que les relations entre elles, ce qui permet au processeur de coordonner plus efficacement le travail.

Pour mettre en œuvre le calcul par lots en mémoire, Spark utilise un modèle appelé Jeu de données distribuées résilient, ou * RDD *, pour gérer les données. Ce sont des structures immuables existant dans la mémoire qui représentent des collections de données. Les opérations sur les RDD produisent de nouveaux RDD. Chaque RDD peut retracer sa lignée par le biais de ses RDD parents et finalement vers les données sur le disque. Les RDD sont essentiellement un moyen pour Spark de conserver la tolérance de panne sans avoir à écrire sur le disque après chaque opération.

Modèle de traitement de flux

Les capacités de traitement de flux sont fournies par Spark Streaming. Spark lui-même est conçu pour des charges de travail axées sur les lots. Pour faire face à la disparité entre la conception du moteur et les caractéristiques des charges de travail en streaming, Spark met en œuvre un concept appelé micro-batchs *. Cette stratégie est conçue pour traiter les flux de données comme une série de très petits lots pouvant être gérés à l’aide de la sémantique native du moteur de traitement par lots.

Spark Streaming fonctionne en tamponnant le flux par incréments de moins d’une seconde. Ceux-ci sont envoyés en tant que petits ensembles de données fixes pour le traitement par lots. En pratique, cela fonctionne assez bien, mais cela conduit à un profil de performance différent de celui des infrastructures de traitement de flux véritables.

Avantages et limites

La raison évidente d’utiliser Spark sur Hadoop MapReduce est la vitesse. Spark peut traiter les mêmes ensembles de données beaucoup plus rapidement en raison de sa stratégie de calcul en mémoire et de sa planification avancée des DAG.

Un autre avantage majeur de Spark est sa polyvalence. Il peut être déployé en tant que cluster autonome ou intégré à un cluster Hadoop existant. Il peut effectuer un traitement par lots et par flux, vous permettant d’exploiter un seul cluster pour gérer plusieurs styles de traitement.

Au-delà des capacités du moteur lui-même, Spark dispose également d’un écosystème de bibliothèques pouvant être utilisées pour l’apprentissage automatique, les requêtes interactives, etc. Il est presque universellement reconnu que les tâches Spark sont plus faciles à écrire que MapReduce, ce qui peut avoir des conséquences importantes pour la productivité.

L’adaptation de la méthodologie de traitement par lots au traitement de flux implique la mise en mémoire tampon des données au moment de leur entrée dans le système. La mémoire tampon lui permet de gérer un volume élevé de données entrantes, ce qui augmente le débit global, mais attendre de vider la mémoire tampon entraîne également une augmentation significative de la latence. Cela signifie que Spark Streaming peut ne pas être approprié pour le traitement où une faible latence est impérative.

Étant donné que la RAM coûte généralement plus cher que l’espace disque, l’exécution de Spark est plus onéreuse que celle de systèmes basés sur disque. Cependant, la vitesse de traitement accrue signifie que les tâches peuvent être exécutées beaucoup plus rapidement, ce qui peut compenser complètement les coûts lorsque vous travaillez dans un environnement où vous payez les ressources à l’heure.

Une autre conséquence de la conception en mémoire de Spark est que la rareté des ressources peut être un problème lors du déploiement sur des clusters partagés. Par rapport à MapReduce de Hadoop, Spark utilise beaucoup plus de ressources, ce qui peut interférer avec d’autres tâches susceptibles de tenter d’utiliser le cluster à ce moment-là. En substance, Spark pourrait être un voisin moins prévenant que d’autres composants pouvant fonctionner sur la pile Hadoop.

Sommaire

Spark est une excellente option pour ceux qui ont diverses charges de traitement. Le traitement par lots Spark offre d’incroyables avantages en termes de vitesse et de consommation de mémoire. Spark Streaming est une bonne solution de traitement de flux pour les charges de travail qui valorisent le débit sur la latence.

Apache Flink est une infrastructure de traitement de flux pouvant également gérer des tâches par lots. Il considère que les lots sont simplement des flux de données avec des limites finies et traite donc le traitement par lots comme un sous-ensemble du traitement de flux. Cette approche axée sur le flux de données pour tous les traitements a un certain nombre d’effets secondaires intéressants.

Cette approche basée sur le flux premier a été appelée * architecture Kappa *, par opposition à l’architecture Lambda plus largement connue (le traitement par lots étant utilisé comme méthode de traitement principale, les flux étant utilisés pour compléter et fournir des résultats précoces mais non raffinés). L’architecture Kappa, où les flux sont utilisés pour tout, simplifie le modèle et n’est devenue possible que récemment, les moteurs de traitement des flux étant devenus plus sophistiqués.

Modèle de traitement de flux

Le modèle de traitement de flux de Flink traite les données entrantes élément par élément comme un véritable flux. Flink fournit son API DataStream pour travailler avec des flux de données non liés. Les composants de base avec lesquels Flink fonctionne sont:

  • * Les flux * sont des ensembles de données immuables et non liés qui circulent dans le système.

  • * Les opérateurs * sont des fonctions qui agissent sur les flux de données pour produire d’autres flux.

  • * Les sources * sont le point d’entrée des flux entrant dans le système

  • * Les éviers * sont l’endroit où les flux sortent du système Flink. Ils peuvent représenter une base de données ou un connecteur vers un autre système

Les tâches de traitement de flux prennent des instantanés à des points définis pendant leur calcul pour les utiliser en cas de problèmes. Pour stocker l’état, Flink peut fonctionner avec un certain nombre d’arrière-plans d’états en fonction de niveaux de complexité et de persistance variables.

De plus, le traitement de flux de Flink est capable de comprendre le concept de «temps d’événement», c’est-à-dire l’heure à laquelle l’événement s’est réellement produit, et peut également gérer des sessions. Cela signifie qu’il peut garantir l’ordre et le regroupement de certaines manières intéressantes.

Modèle de traitement par lots

Le modèle de traitement par lots de Flink n’est à bien des égards qu’une extension du modèle de traitement des flux. Au lieu de lire à partir d’un flux continu, il lit un ensemble de données limité à partir d’un stockage persistant en tant que flux. Flink utilise exactement le même temps d’exécution pour ces deux modèles de traitement.

Flink offre certaines optimisations pour les charges de travail par lots. Par exemple, étant donné que les opérations par lots sont sauvegardées par un stockage persistant, Flink supprime les instantanés des charges par lots. Les données sont toujours récupérables, mais le traitement normal se termine plus rapidement.

Une autre optimisation consiste à scinder les tâches par lots afin que les étapes et les composants ne soient impliqués qu’en cas de besoin. Cela aide Flink à bien jouer avec les autres utilisateurs du cluster. Une analyse préventive des tâches permet à Flink d’optimiser également en visualisant l’ensemble des opérations, la taille de l’ensemble de données et les exigences des étapes à venir.

Avantages et limites

Flink est actuellement une option unique dans le monde du framework de traitement. Bien que Spark effectue un traitement par lots et par flux, sa diffusion en continu ne convient pas à de nombreux cas d’utilisation en raison de son architecture micro-batch. L’approche «Flood first» de Flink offre une faible latence, un débit élevé et un traitement réel entrée par entrée.

Flink gère beaucoup de choses par lui-même. De manière quelque peu non conventionnelle, il gère sa propre mémoire au lieu de s’appuyer sur les mécanismes de récupération de place Java natifs pour des raisons de performances. Contrairement à Spark, Flink ne nécessite pas d’optimisation manuelle ni d’ajustement lorsque les caractéristiques des données qu’il traite changent. Il gère également le partitionnement et la mise en cache des données.

Flink analyse son travail et optimise ses tâches de plusieurs manières. Une partie de cette analyse est similaire à celle effectuée par les planificateurs de requêtes SQL dans les bases de données relationnelles, en définissant le moyen le plus efficace d’implémenter une tâche donnée. Il est capable de mettre en parallèle des étapes pouvant être complétées en parallèle, tout en rassemblant des données pour des tâches bloquantes. Pour les tâches itératives, Flink tente d’effectuer un calcul sur les nœuds où les données sont stockées pour des raisons de performances. Il peut également effectuer une «itération delta» ou une itération uniquement sur les parties de données modifiées.

En termes d’outillage utilisateur, Flink offre une vue de planification Web permettant de gérer facilement les tâches et d’afficher le système. Les utilisateurs peuvent également afficher le plan d’optimisation des tâches soumises pour voir comment il sera réellement implémenté sur le cluster. Pour les tâches d’analyse, Flink propose des bibliothèques de requêtes, de traitement de graphes et d’apprentissage automatique de type SQL, ainsi que des calculs en mémoire.

Flink fonctionne bien avec d’autres composants. Il est écrit comme étant un bon voisin s’il est utilisé dans une pile Hadoop, n’utilisant que les ressources nécessaires à un moment donné. Il s’intègre facilement à YARN, HDFS et Kafka. Flink peut exécuter des tâches écrites pour d’autres infrastructures de traitement telles que Hadoop et Storm avec des packages de compatibilité.

L’un des plus gros inconvénients de Flink à l’heure actuelle est qu’il s’agit d’un projet encore très jeune. Les déploiements à grande échelle dans la nature ne sont toujours pas aussi courants que d’autres cadres de traitement et il n’ya pas eu beaucoup de recherche sur les limites de Flink en matière d’échelle. Avec le cycle de développement rapide et des fonctionnalités telles que les packages de compatibilité, les déploiements de Flink peuvent commencer à se multiplier à mesure que les entreprises ont la possibilité de les expérimenter.

Sommaire

Flink offre à la fois un traitement de flux à faible latence et une prise en charge des tâches par lots traditionnelles. Flink est probablement mieux adapté aux organisations qui ont de grandes exigences en matière de traitement de flux et certaines tâches orientées lot. Sa compatibilité avec les programmes natifs de Storm et Hadoop et sa capacité à s’exécuter sur un cluster géré par YARN peuvent être facilement évalués. Son développement rapide mérite d’être surveillé.

Conclusion

Il existe de nombreuses options de traitement dans un système Big Data.

Hadoop est un bon choix, qui est probablement moins coûteux à mettre en œuvre que d’autres solutions, pour les charges de travail par lot ne nécessitant que peu de temps.

Pour les charges de travail de flux uniquement, Storm prend en charge de nombreuses langues et peut fournir un traitement à très faible latence, mais peut également fournir des doublons et ne peut pas garantir la commande dans sa configuration par défaut. Samza s’intègre étroitement à YARN et à Kafka afin d’offrir flexibilité, facilité d’utilisation par plusieurs équipes, réplication simple et gestion de l’état.

Pour les charges de travail mixtes, Spark fournit un traitement par lots à grande vitesse et un traitement par micro-lots pour la diffusion en continu. Il offre un support étendu, des bibliothèques et des outils intégrés et des intégrations flexibles. Flink fournit un traitement de flux réel avec une prise en charge du traitement par lots. Il est fortement optimisé, peut exécuter des tâches écrites pour d’autres plates-formes et fournit un traitement à faible temps de latence, mais en est encore aux premiers jours de l’adoption.

La solution la mieux adaptée à votre situation dépendra beaucoup de l’état des données à traiter, de la précision de vos exigences et du type de résultats qui vous intéresse. Il existe des compromis entre mettre en œuvre une solution tout-en-un et travailler avec des projets étroitement ciblés. Des considérations similaires sont également à prendre en compte lors de l’évaluation de solutions nouvelles et innovantes par rapport à leurs contreparties matures et bien testées.