[Big Data] Storm : concepts généraux

Ce billet présente Apache Storm et ses concepts associés.

Pour comprendre les concepts associés aux Big Data, à Hadoop,… vous pouvez aller ici.

 

Présentation de Storm

Storm est un système de calculs distribués créé par Nathan Marz et son équipe de chez BackType (plus tard racheté par Twitter) permettant le traitement en temps-réel de gros volumes de données soumises à des opérations de lectures/écritures aléatoires. Il permet de répondre à des problématiques Big Data liées aux traitements temps-réel.

La quintessence de Storm repose autour des caractéristiques suivantes :

  • Rapidité à près d’un million de messages de 100 octets peuvent être traités par seconde par nœud
  • Scalabilité à grâce au parallélisme des opérations à travers les nœuds du cluster.
  • Fiabilité à chaque tuple (voir plus loin) sera traité au moins une fois ou une seule fois. Les messages ne sont rejoués qu’en cas d’échec.
  • Tolérance aux pannes à en cas d’indisponibilité d’un nœud, le worker node (voir plus loin) associé sera redémarré sur un autre noeud.
  • Facilité de prise-en-main à une fois déployé, Storm est facile à utiliser. Un exemple sera abordé dans un billet dédié à l’utilisation de Storm en environnement Azure HDInsight.

En outre, Storm supporte une variété de langages de programmation (C#, Java, Python,…) et apparaît comme la plateforme idoine pour traiter une variété de scénarii tels que :

  • Le monitoring d’applications.
  • La détection de fraudes financières (banque, assurance,…).
  • L’analyse comportementale d’utilisateurs (réseaux sociaux, e-commerce,…).

Pour connaître plus de cas d’utilisation de Storm, vous pouvez aller ici : https://storm.apache.org/documentation/Powered-By.html.
Vous pouvez également aller à l’URL suivante, pour connaître toute la genèse de la création de Storm : http://nathanmarz.com/blog/history-of-apache-storm-and-lessons-learned.html.

 

 

Fonctionnement général de Storm

Un cluster Storm est sensiblement comparable à un cluster Hadoop. Là où sur Hadoop, on exécute des jobs MapReduce, Storm utilise ce qu’on appelle des « topologies ». Au-delà de leur terminologie, c’est surtout au niveau de leur fonctionnement que les jobs et les topologies diffèrent. En effet, là où un job MapReduce peut se terminer, une topologie, quant à elle, tourne en continu.

Storm possède 2 types de noeuds:

  • Un nœud maître (master node), qui exécute un démon appelé Nimbus, qui peut être comparé au JobTracker de Hadoop. Un tel nœud est responsable de la distribution d’instructions sur le cluster, de l’attribution de tâches, le monitoring…
  • Des nœuds esclaves ou travailleurs (worker nodes), qui exécutent un démon appelé Supervisor. Le superviseur écoute les travaux confiés à son noeud et démarre ou arrête le processus de travail si nécessaire, en fonction des ordres de Nimbus. Chaque processus de travail exécute un sous-ensemble d’une topologie, sachant qu’une topologie en cours d’exécution se compose de nombreux processus de travail répartis sur de nombreuses machines.

Nimbus communique avec ses superviseurs via un coordonnateur appelé ZooKeeper. L’état de fonctionnement de chaque démon (Nimbus et superviseurs) est maintenu dans Zookeeper ou sur le disque local. De cette façon, en cas d’arrêt de Nimbus et des superviseurs, ceux-ci vont commencer à remonter comme si de rien n’était.

 


 

Storm possède principalement 5 niveaux d’abstraction lui permettant de traiter efficacement des données :

  • Les tuples, qui sont des structures de données sous forme de listes d’éléments ordonnés en tant que collections de paires clé/valeur.
  • Les flux (ou streams), qui sont, en fait, des séquences de tuples illimitées.
  • Les spouts (becs, en français), qui sont des sources de flux qui peuvent lire des tuples et les émettre comme des flux. Exemple classique : connexion d’un spout à l’API de Twitter pour émettre un flux de tweets.
  • Les bolts (boulons, en français), sont des « transformateurs » mono-étapes de flux. Ils créent de nouveaux flux en fonction des flux d’entrée. Lorsqu’une transformation nécessite plusieurs étapes, alors autant de bolts que d’étapes sont utilisés. Les types de transformation sont variées (filtrages, agrégations, jointures, tris,…).
  • Les topologies, évoquées plus haut comme l’équivalent de jobs MapReduce au sein d’Hadoop. Il s’agit concrètement d’un réseau graphique où chaque nœud représente un spout ou un bolt. On parle également d’un réseau de flux d’abonnements, avec les spouts comme sources de données et les bolts comme abonnés, sachant qu’un bolt peut être la source de données d’un autre bolt.


 

Lorsqu’un spout ou un bolt émet un flux, il envoie le tuple à tout bolt qui souscrit à ce flux. Les spouts et bolts exécutent de nombreux threads sur le cluster Storm, et passent des messages les uns aux autres de manière distribuée. Le tout, sachant qu’il n’y a pas de files d’attente intermédiaires.

Pour finir, Storm offre également la possibilité de contrôler le routage des tuples vers des bolts au sein d’une topologie. Il s’agit de ce qu’on appelle le stream grouping (ou regroupement de flux), qui se décline en plusieurs types d’opérations personnalisables :

  • Shuffle : envoi de tuples vers des bolts de façon aléatoire. Exemple d’usage : opérations mathématiques.
  • All : envoi d’une copie de chaque tuple à tous les bolts. Exemple d’usage : envoi d’un signal à tous les bolts.
  • Global : envoi d’un flux en entier (i.e., de l’ensemble des sources) vers un ou plusieurs bolts.
  • Direct : envoi ciblé de tuples. En d’autres mots : les bolts destinés à recevoir les tuples sont, ici, spécifiquement choisis.
  • Fields : envoi de tuples vers un bolt en fonction d’un ou plusieurs champs (fields) de tuples (on parle de flux partitionné). Exemple d’usage : comptage de tuples d’un type défini.

 

Pour aller plus loin…

Gardez un œil ici. D’autres articles autour du Big Data y seront pondus, y compris de nouvelles démonstrations techniques, comme l’utilisation de Storm en environnement Azure.

Si vous souhaitez approfondir votre lecture, vous pouvez également consulter la documentation officielle : https://storm.apache.org/documentation/Concepts.html.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s