Faites du Big Data en temps réél avec HDInsight Storm.
5 questions pour comprendre ce que Storm va apporter à vos analyses HDInsight.
Il y a quelques jours, lors de la conférence Strata + Hadoop World, nous avons annoncé la preview de Apache Storm.
1. Qu'est-ce que Storm ?
Apache Storm est un projet open source de l'écosystème Hadoop qui donne aux utilisateurs l'accès à une plate-forme d'analyse d'événements en temps réel (event-processing) permettant de traiter plusieurs millions d'événements .
Concrêtement, Storm est un système de calcul distribué open source, hautement disponible qui permet de traiter des données en temps réel. Storm fourni également des garanties de traitement des données, c’est-à-dire, la possibilité de retraiter des données qui n'auraient pas réussies à être traitées la première fois.
L'objectif est d'exécuter en temps réel des traitements de données en masse réparties sur un cluster de serveurs en proposant une alternative à Hadoop qui réalise ses traitements distribués en mode batch.
2. Que va apporter Azure HDInsight Storm?
HDInsight Storm est un service Azure qui propose un cluster HDInsight implémentant le system distribué Storm, et qui peut être intégrer au sein d'une solution plus complète sur Azure.
Par exemple, Storm peut consommer en entrée des données provenant d'autres services Azure comme les files d'attente Service Bus ou les Hub Event et fournir des données en sortie pour utilisation au travers de sites Web ou d'autres solutions de visualisation de données.
Un cluster HDInsight Storm peut également être configuré sur un réseau virtuel d'Azure, ce qui réduit la latence des communications avec d'autres ressources sur le même réseau virtuel et fourni une communication sécurisée avec les ressources au sein d'un Datacenter privé.
L'intérêt de Storm, c'est qu'il repose sur un framework Apache nommé Thrift qui va permettre de développer des traitements de calcul sur mes données en temps réel dans de nombreux langages de programmation.
3. Comment sont traitées les données avec HDInsight Storm ?
Le cluster Storm fonctionne de manière similaire aux job MapReduce que l'on connait déjà sur HDInsight ou sur Hadoop, mais se base sur un autre paradigme décrit par un vocabulaire bien précis.
Essayons donc de comprendre les composants du cluster Storm :
On va commencer par un exemple très concret avant de partir sur les définitions plus abstraites :
o Un cluster Storm contient deux types de nœuds :
- Des head nodes qui font tourner "Nimbus" : similaires aux noeuds JobTracker de Hadoop, ils sont responsables de distribuer le code sur les différents nœuds enfants du cluster, leur indiquer les tâches à exécuter et surveiller le bon déroulement de ces tâches. HDInsight fourni 2 nœuds Nimbus ce qui permet d'éviter un single point of failure sur le cluster Storm.
- Des worker nodes qui font tourner "Supervisor" qui est comme son nom l'indique, le superviseur de chaque worker node et qui surveille le lancement et l'arrêt de l'exécution des tâches (worker processes) sur ces nœuds.
o Les "worker processes" exécutent un sous ensemble du job principal que l'on appelle "topology". L'exécution d'une topologie est donc distribuée au travers de plusieurs "worker processes" sur le cluster. Contrairement aux jobs MapReduce, une topologie continue à s'exécuter jusqu'à ce que l'utilisateur lui-même l'arrête.
o La "Topology" défini en fait un graphe de calculs qui traite des flux de données nommés "streams".
o Un "Stream" est une collection de "tuples" qui ne sont pas reliés entre eux. Les “streams” sont produits par des "spouts" et des "bolts" et sont consommés par des "bolts".
o Un “tuple” représente donc la données au sens "Storm" à savoir une liste nommée de valeurs typées dynamiquement.
o Un "spout" consomme les données depuis une source de données et émet un ou plusieurs "streams". En général les données sont lues depuis des sources de type "queues" comme Kafka, Azure ServiceBus Queues ou Event Hubs. La queue assure la persistance des données en cas de panne.
o Les "bolts" consomment des "streams", effetuent des traitements sur les "tuples" et peuvent générer des "streams". Les "bolts" écrivent également les données en sortie sur des stockages externes comme des queues des bases HDInsight Hbase, un blob ou tout autre stockage de données.
o Apache Thrift est un framework qui permet de faire du développement cross langages. Il vous permet de créer des services applicatifs qui tournent en C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, et d'autres langages. Nimbus est un service créé au travers de Thrift, et une “topology” est une définition Thrift
De ce fait, il est possible de développer des topologies en utilisant tout type de langage de programmation.
4. Quels type de scénario vais-je pouvoir mettre en œuvre avec Storm ?
De l'analyse en temps réelle
Etant donné que Storm traite des flux de données en temps réel, il permet de réaliser des analyses de données qui impliquent une recherche et une réaction rapide en fonction d'événements ou de patterns spécifiques.
Par exemple, une topologie Storm va pouvoir surveiller les données des capteurs et générer des alertes SMS pour avertir lorsqu'un évènement ou un pattern spécifique se produit.
Extract Transform Load (ETL)
Un processus d'ETL peut être considéré comme une suite logique d'un traitement de Storm.
Par exemple, si vous effectuez la détection des fraudes en temps réel, vous êtes déjà en amont en train de récupérer et transformer des données.
Vous pouvez également définir que les bolts stockent les données en sortie sur une HBase, dans Hive, ou tout autre stockage de données pour les utiliser plus tard dans des analyses à froid.
Distributed RPC
Le RPC distribué est un pattern qui peut être créé au travers de Storm. Une requête est transmises à Storm, qui distribue ensuite le calcul sur plusieurs nœuds et retourne un flux de résultats au client en attente.
Online machine learning
Storm peut être utilisé avec une solution de Machine Learning comme Azure ML qui aurait déjà été entrainée par du traitement batch comme au travers d'une solution comme Mahout. L'intérêt, c'est queau dela de l'utilisation d'un modèle de calcul générique et distribué, on ouvre la porte à des solutions de Machine Leanrning basées sur des flux en temps réels.
5. Quels types de langages puis-je utiliser ?
Le cluster HDInsight Storm supporte les langages :
- .NET
- Java
- Python.
Cependant, Storm supporte d'autres langages qui vont juste nécessiter l'installation d'un composant additionnel pour prendre en charge le langage en question.