Spark vs Hadoop: quel est le meilleur framework Big Data?



Ce billet de blog parle d'Apache Spark vs Hadoop. Cela vous donnera une idée du bon cadre Big Data à choisir dans différents scénarios.

Je vais commencer ce blog Apache Spark vs Hadoop en présentant d'abord Hadoop et Spark afin de définir le bon contexte pour les deux frameworks. Ensuite, nous comparerons les deux cadres Big Data sur différents paramètres pour analyser leurs forces et leurs faiblesses.Mais quel que soit le résultat de notre comparaison, sachez que Spark et Hadoop sont des composants cruciaux du .

Apache Spark vs Hadoop: introduction à Hadoop

Hadoop est un framework qui vous permet de stocker d'abord le Big Data dans un environnement distribué afin que vous puissiez le traiter en parallèle. Il existe essentiellement deux composants dans Hadoop:





HDFS

HDFS crée une abstraction de ressources, laissez-moi vous simplifier la tâche. Semblable à la virtualisation, vous pouvez voir le HDFS logiquement comme une seule unité de stockage de Big Data, mais vous stockez en réalité vos données sur plusieurs nœuds de manière distribuée. Ici, vous avez une architecture maître-esclave. Dans HDFS, Namenode est un nœud maître et les Datanodes sont des esclaves.

NomNœud

C'est le démon maître qui maintient et gère les DataNodes (nœuds esclaves). Il enregistre les métadonnées de tous les fichiers stockés dans le cluster, par exemple emplacement des blocs stockés, taille des fichiers, autorisations, hiérarchie, etc. Il enregistre chaque modification apportée aux métadonnées du système de fichiers.



Par exemple, si un fichier est supprimé dans HDFS, le NameNode l'enregistrera immédiatement dans EditLog. Il reçoit régulièrement un Heartbeat et un rapport de blocage de tous les DataNodes du cluster pour s'assurer que les DataNodes sont actifs. Il garde un enregistrement de tous les blocs dans HDFS et dans quels nœuds ces blocs sont stockés.

comment utiliser la classe de scanner

DataNode

Ce sont des démons esclaves qui s'exécutent sur chaque machine esclave. Les données réelles sont stockées sur DataNodes. Ils sont responsables du traitement des demandes de lecture et d'écriture des clients. Ils sont également responsables de la création de blocs, de la suppression des blocs et de leur réplication en fonction des décisions prises par le NameNode.

HDFS - Apache Spark contre Hadoop - EdurekaFIL

YARN effectue toutes vos activités de traitement en allouant des ressources et en planifiant des tâches. Il a deux démons majeurs, à savoir Gestionnaire de ressources et NodeManager .



Gestionnaire de ressources

Il s'agit d'un composant de niveau cluster (un pour chaque cluster) et s'exécute sur la machine maître. Il gère les ressources et planifie les applications s'exécutant sur YARN.

NodeManager

Il s'agit d'un composant au niveau du nœud (un sur chaque nœud) et s'exécute sur chaque machine esclave. Il est responsable de la gestion des conteneurs et du suivi de l'utilisation des ressources dans chaque conteneur. Il assure également le suivi de la santé des nœuds et de la gestion des journaux. Il communique en permanence avec ResourceManager pour rester à jour. Ainsi, vous pouvez effectuer un traitement parallèle sur HDFS à l'aide de MapReduce.

Pour en savoir plus sur Hadoop, vous pouvez parcourir ce Blog. Maintenant que nous sommes tous prêts avec l'introduction de Hadoop, passons à l'introduction de Spark.

Apache Spark vs Hadoop: introduction à Apache Spark

Apache Spark est un cadre d'analyse de données en temps réel dans un environnement informatique distribué. Il exécute des calculs en mémoire pour augmenter la vitesse de traitement des données. Il est plus rapide pour le traitement de données à grande échelle car il exploite les calculs en mémoire et d'autres optimisations. Par conséquent, il nécessite une puissance de traitement élevée.

L'ensemble de données distribuées résilientes (RDD) est une structure de données fondamentale de Spark. C'est une collection d'objets distribués immuable. Chaque ensemble de données dans RDD est divisé en partitions logiques, qui peuvent être calculées sur différents nœuds du cluster. Les RDD peuvent contenir tout type d'objets Python, Java ou Scala, y compris des classes définies par l'utilisateur. Les composants Spark le rendent rapide et fiable. Apache Spark comprend les composants suivants:

  1. Spark Core - Spark Core est le moteur de base pour le traitement de données parallèle et distribué à grande échelle. De plus, des bibliothèques supplémentaires construites au sommet du cœur permettent diverses charges de travail pour le streaming, SQL et l'apprentissage automatique. Il est responsable de la gestion de la mémoire et de la récupération des pannes, de la planification, de la distribution et de la surveillance des travaux sur un cluster et de l'interaction avec les systèmes de stockage
  2. Spark Streaming - Spark Streaming est le composant de Spark qui est utilisé pour traiter les données de streaming en temps réel. C'est donc un ajout utile à l'API Spark principale. Il permet un traitement de flux à haut débit et tolérant aux pannes des flux de données en direct
  3. Spark SQL : Spark SQL est un nouveau module de Spark qui intègre le traitement relationnel avec l'API de programmation fonctionnelle de Spark. Il prend en charge l'interrogation de données via SQL ou via le langage de requête Hive. Pour ceux d'entre vous familiarisés avec le SGBDR, Spark SQL constituera une transition facile par rapport à vos anciens outils où vous pourrez étendre les limites du traitement de données relationnel traditionnel.
  4. GraphX : GraphX ​​est l'API Spark pour les graphiques et le calcul parallèle de graphes. Ainsi, il étend le Spark RDD avec un graphe de propriétés distribuées résilient. À un niveau élevé, GraphX ​​étend l'abstraction Spark RDD en introduisant le Resilient Distributed Property Graph: un multigraphe dirigé avec des propriétés attachées à chaque sommet et arête.
  5. MLlib (Machine Learning): MLlib signifie Machine Learning Library. Spark MLlib est utilisé pour effectuer un apprentissage automatique dans Apache Spark.

Comme vous pouvez le voir, Spark est livré avec des bibliothèques de haut niveau, y compris la prise en charge de R, SQL, Python, Scala, Java, etc. Ces bibliothèques standard augmentent les intégrations transparentes dans des flux de travail complexes. À ce sujet, il permet également à divers ensembles de services de s'intégrer, tels que MLlib, GraphX, SQL + Data Frames, services de streaming, etc. pour augmenter ses capacités.

Pour en savoir plus sur Apache Spark, vous pouvez parcourir ce Blog. Maintenant, le terrain est prêt pour Apache Spark vs Hadoop. Allons de l'avant et comparons Apache Spark avec Hadoop sur différents paramètres pour comprendre leurs points forts.

Apache Spark vs Hadoop: paramètres à comparer

Performance

Spark est rapide car il dispose d'un traitement en mémoire. Il peut également utiliser le disque pour les données qui ne rentrent pas toutes dans la mémoire. Le traitement en mémoire de Spark fournit des analyses en temps quasi réel. Cela rend Spark adapté au système de traitement des cartes de crédit, à l'apprentissage automatique, à l'analyse de sécurité et aux capteurs de l'Internet des objets.

Hadoop a été initialement configuré pour collecter en continu des données à partir de plusieurs sources sans se soucier du type de données et de les stocker dans un environnement distribué. MapReduce utilise le traitement par lots. MapReduce n'a jamais été conçu pour le traitement en temps réel, l'idée principale derrière YARN est le traitement parallèle sur un ensemble de données distribué.

Le problème avec la comparaison des deux est qu'ils effectuent le traitement différemment.

Facilité d'utilisation

Spark est fourni avec des API conviviales pour Scala, Java, Python et Spark SQL. Spark SQL est très similaire à SQL, il devient donc plus facile pour les développeurs SQL de l'apprendre. Spark fournit également un shell interactif permettant aux développeurs d'interroger et d'effectuer d'autres actions, et d'avoir des commentaires immédiats.

Vous pouvez facilement ingérer des données dans Hadoop en utilisant le shell ou en les intégrant avec plusieurs outils comme Sqoop, Flume, etc. YARN est juste un cadre de traitement et il peut être intégré à plusieurs outils comme Hive et Pig. HIVE est un composant d'entreposage de données qui effectue la lecture, l'écriture et la gestion de grands ensembles de données dans un environnement distribué à l'aide d'une interface de type SQL. Tu peux passer par ça Écosystème Hadoop blog pour connaître les différents outils qui peuvent être intégrés à Hadoop.

Frais

Hadoop et Spark sont tous deux des projets open source Apache, il n'y a donc aucun coût pour le logiciel. Le coût est uniquement associé à l'infrastructure. Les deux produits sont conçus de manière à pouvoir fonctionner sur du matériel standard avec un faible coût total de possession.

Maintenant, vous vous demandez peut-être en quoi ils sont différents. Le stockage et le traitement dans Hadoop sont basés sur disque et Hadoop utilise des quantités standard de mémoire. Donc, avec Hadoop, nous avons besoin de beaucoup d'espace disque ainsi que de disques plus rapides. Hadoop nécessite également plusieurs systèmes pour distribuer les E / S de disque.

En raison du traitement en mémoire d'Apache Spark, il nécessite beaucoup de mémoire, mais il peut gérer une vitesse et une quantité de disque standard. Étant donné que l'espace disque est une commodité relativement peu coûteuse et que Spark n'utilise pas d'E / S disque pour le traitement, il nécessite à la place de grandes quantités de RAM pour tout exécuter en mémoire. Ainsi, le système Spark entraîne plus de coûts.

Mais oui, il est important de garder à l’esprit que la technologie de Spark réduit le nombre de systèmes requis. Il a besoin de beaucoup moins de systèmes qui coûtent plus cher. Ainsi, il y aura un moment où Spark réduira les coûts par unité de calcul même avec l'exigence de RAM supplémentaire.

Traitement de l'information

Il existe deux types de traitement de données: le traitement par lots et le traitement par flux.

Traitement par lots vs traitement par flux

Le traitement par lots : Le traitement par lots a été crucial dans le monde du Big Data. En termes simples, le traitement par lots fonctionne avec des volumes de données élevés collectés sur une période. Dans le traitement par lots, les données sont d'abord collectées, puis les résultats traités sont produits à un stade ultérieur.

Le traitement par lots est un moyen efficace de traiter de grands ensembles de données statiques. En règle générale, nous effectuons un traitement par lots pour les ensembles de données archivés. Par exemple, calculer le revenu moyen d'un pays ou évaluer l'évolution du commerce électronique au cours de la dernière décennie.

Traitement de flux : Le traitement de flux est la tendance actuelle dans le monde du Big Data. Le besoin de l'heure est la vitesse et les informations en temps réel, ce que fait le traitement à la vapeur. Le traitement par lots ne permet pas aux entreprises de réagir rapidement aux besoins changeants de l'entreprise en temps réel, le traitement par flux a connu une croissance rapide de la demande.

Revenant maintenant à Apache Spark vs Hadoop, YARN est essentiellement un cadre de traitement par lots. Lorsque nous soumettons un travail à YARN, il lit les données du cluster, effectue l'opération et réécrit les résultats dans le cluster. Ensuite, il lit à nouveau les données mises à jour, effectue l'opération suivante et réécrit les résultats dans le cluster et ainsi de suite.

Spark effectue des opérations similaires, mais il utilise un traitement en mémoire et optimise les étapes. GraphX ​​permet aux utilisateurs de visualiser les mêmes données que des graphiques et des collections. Les utilisateurs peuvent également transformer et joindre des graphiques avec des ensembles de données distribués résilients (RDD).

Tolérance aux pannes

Hadoop et Spark offrent tous deux une tolérance aux pannes, mais les deux ont une approche différente. Pour HDFS et YARN, les démons maîtres (c'est-à-dire NameNode et ResourceManager respectivement) vérifient les pulsations des démons esclaves (c'est-à-dire DataNode et NodeManager respectivement). Si un démon esclave échoue, les démons maîtres replanifient toutes les opérations en attente et en cours sur un autre esclave. Cette méthode est efficace, mais elle peut également augmenter considérablement les délais d'exécution des opérations avec une seule défaillance. Comme Hadoop utilise du matériel standard, HDFS garantit la tolérance aux pannes en répliquant les données.

installer php sur windows 8

Comme nous l'avons vu ci-dessus, les RDD sont des éléments constitutifs d'Apache Spark. Les RDD fournissent une tolérance aux pannes à Spark. Ils peuvent faire référence à n'importe quel ensemble de données présent dans un système de stockage externe comme HDFS, HBase, système de fichiers partagé. Ils peuvent être opérés en parallèle.

jobtracker et tasktracker dans hadoop

Les RDD peuvent conserver un ensemble de données en mémoire à travers les opérations, ce qui rend les actions futures 10 fois beaucoup plus rapides. Si un RDD est perdu, il sera automatiquement recalculé en utilisant les transformations d'origine. C'est ainsi que Spark assure la tolérance aux pannes.

Sécurité

Hadoop prend en charge Kerberos pour l'authentification, mais c'est difficile à gérer. Néanmoins, il prend également en charge les fournisseurs tiers comme LDAP (Lightweight Directory Access Protocol) pour l'authentification. Ils offrent également le cryptage. HDFS prend en charge les autorisations de fichiers traditionnelles, ainsi que les listes de contrôle d'accès (ACL). Hadoop fournit une autorisation de niveau de service, qui garantit que les clients disposent des autorisations appropriées pour la soumission de travaux.

Spark prend actuellement en charge l'authentification via un secret partagé. Spark peut s'intégrer à HDFS et utiliser les ACL HDFS et les autorisations au niveau des fichiers. Spark peut également s'exécuter sur YARN en exploitant la capacité de Kerberos.

Cas d'utilisation où Hadoop s'adapte le mieux:

  • Analyse des données d'archive. YARN permet le traitement parallèle d'énormes quantités de données. Des parties de données sont traitées parallèlement et séparément sur différents DataNodes et recueille les résultats de chaque NodeManager.
  • Si des résultats instantanés ne sont pas nécessaires. Hadoop MapReduce est une bonne solution économique pour le traitement par lots.

Cas d'utilisation où Spark convient le mieux:

Analyse Big Data en temps réel:

L'analyse de données en temps réel consiste à traiter les données générées par les flux d'événements en temps réel arrivant au rythme de millions d'événements par seconde, les données Twitter par exemple. La force de Spark réside dans sa capacité à prendre en charge le streaming de données avec le traitement distribué. Il s'agit d'une combinaison utile qui permet un traitement des données en temps quasi réel. MapReduce est handicapé d'un tel avantage car il a été conçu pour effectuer un traitement par lots ou distribué sur de grandes quantités de données. Les données en temps réel peuvent toujours être traitées sur MapReduce mais leur vitesse est loin d'être proche de celle de Spark.

Spark prétend traiter les données 100 fois plus vite que MapReduce, tout en 10 fois plus vite avec les disques.

Traitement graphique:

La plupart des algorithmes de traitement de graphes comme le classement de page effectuent plusieurs itérations sur les mêmes données, ce qui nécessite un mécanisme de transmission de messages. Nous devons programmer MapReduce explicitement pour gérer ces itérations multiples sur les mêmes données. En gros, cela fonctionne comme ceci: Lisez les données du disque et après une itération particulière, écrivez les résultats sur le HDFS, puis lisez les données du HDFS pour la prochaine itération. Ceci est très inefficace car cela implique la lecture et l'écriture de données sur le disque, ce qui implique des opérations d'E / S lourdes et la réplication des données sur le cluster pour la tolérance aux pannes. De plus, chaque itération MapReduce a une latence très élevée et l'itération suivante ne peut commencer qu'une fois la tâche précédente terminée.

De plus, la transmission de messages nécessite des scores de nœuds voisins afin d'évaluer le score d'un nœud particulier. Ces calculs nécessitent des messages de ses voisins (ou des données à travers plusieurs étapes du travail), un mécanisme qui manque à MapReduce. Différents outils de traitement de graphiques tels que Pregel et GraphLab ont été conçus afin de répondre au besoin d'une plate-forme efficace pour les algorithmes de traitement de graphiques. Ces outils sont rapides et évolutifs, mais ne sont pas efficaces pour la création et le post-traitement de ces algorithmes complexes à plusieurs étapes.

L'introduction d'Apache Spark a résolu ces problèmes dans une large mesure. Spark contient une bibliothèque de calcul de graphes appelée GraphX ​​qui simplifie notre vie. Le calcul en mémoire associé à la prise en charge des graphes intégrés améliore les performances de l'algorithme d'une magnitude d'un ou deux degrés par rapport aux programmes MapReduce traditionnels. Spark utilise une combinaison de Netty et Akka pour distribuer des messages à travers les exécuteurs. Examinons quelques statistiques illustrant les performances de l'algorithme PageRank à l'aide de Hadoop et Spark.

Algorithmes d'apprentissage automatique itératifs:

Presque tous les algorithmes d'apprentissage automatique fonctionnent de manière itérative. Comme nous l'avons vu précédemment, les algorithmes itératifs impliquent des goulots d'étranglement d'E / S dans les implémentations de MapReduce. MapReduce utilise des tâches grossières (parallélisme au niveau des tâches) qui sont trop lourdes pour les algorithmes itératifs. Spark avec l'aide de Mesos - un noyau de système distribué, met en cache l'ensemble de données intermédiaire après chaque itération et exécute plusieurs itérations sur cet ensemble de données mis en cache, ce qui réduit les E / S et permet d'exécuter l'algorithme plus rapidement de manière tolérante aux pannes.

Spark dispose d'une bibliothèque d'apprentissage automatique évolutive intégrée appelée MLlib qui contient des algorithmes de haute qualité qui exploitent les itérations et donnent de meilleurs résultats que les approximations en une passe parfois utilisées sur MapReduce.

  • Traitement rapide des données. Comme nous le savons, Spark permet le traitement en mémoire. En conséquence, Spark est jusqu'à 100 fois plus rapide pour les données en RAM et jusqu'à 10 fois pour les données en stockage.
  • Traitement itératif. Les RDD de Spark permettent d'effectuer plusieurs opérations cartographiques en mémoire, sans avoir besoin d'écrire des ensembles de données provisoires sur un disque.
  • Traitement en temps quasi réel. Spark est un excellent outil pour fournir des informations commerciales immédiates. C'est la raison pour laquelle Spark est utilisé dans le système de streaming des cartes de crédit.

'Apache Spark: un tueur ou un sauveur d'Apache Hadoop?'

La réponse à cela - Hadoop MapReduce et Apache Spark ne sont pas en concurrence. En fait, ils se complètent assez bien. Hadoop met d'énormes ensembles de données sous contrôle par des systèmes de produits de base. Spark fournit un traitement en mémoire en temps réel pour les ensembles de données qui en ont besoin. Lorsque nous combinons la capacité d'Apache Spark, c'est-à-dire une vitesse de traitement élevée, des analyses avancées et une prise en charge d'intégration multiple avec le fonctionnement à faible coût de Hadoop sur du matériel de base, cela donne les meilleurs résultats. Hadoop complète les capacités d'Apache Spark. Spark ne peut pas remplacer complètement Hadoop mais la bonne nouvelle est que la demande de Spark est actuellement à un niveau record! C'est le bon moment pour maîtriser Spark et tirer le meilleur parti des opportunités de carrière qui se présentent à vous. Commencez maintenant!

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires et nous vous répondrons dans les plus brefs délais.

Si vous souhaitez apprendre Spark et construire une carrière dans le domaine de Spark pour effectuer un traitement de données à grande échelle à l'aide de RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​et Scala avec des cas d'utilisation réels, consultez nos cas d'utilisation interactifs en ligne Ici, qui vient avec un support 24 * 7 pour vous guider tout au long de votre période d'apprentissage.