Quels sont les cas d'utilisation pour Apache Spark vs Hadoop

30

Avec Hadoop 2.0 et YARN, Hadoop ne serait plus lié uniquement aux solutions de réduction de carte. Avec cet avancement, quels sont les cas d'utilisation d'Apache Spark vs Hadoop considérant que les deux se trouvent au sommet de HDFS? J'ai lu la documentation d'introduction de Spark, mais je suis curieux de savoir si quelqu'un a rencontré un problème plus efficace et plus facile à résoudre avec Spark qu'avec Hadoop.

idclark
la source

Réponses:

40

Hadoop signifie HDFS, YARN, MapReduce et bien d'autres choses. Voulez-vous dire Spark vs MapReduce ? Parce que Spark fonctionne sur / avec Hadoop, ce qui est plutôt le point.

La principale raison d'utiliser Spark est la vitesse, et cela vient du fait que son exécution peut conserver les données en mémoire entre les étapes plutôt que de toujours persister dans HDFS après une carte ou une réduction. Cet avantage est très prononcé pour les calculs itératifs, qui comportent des dizaines d'étages dont chacun touche les mêmes données. C'est là que les choses pourraient être "100x" plus rapides. Pour les travaux simples ETL en un seul passage pour lesquels MapReduce a été conçu, ce n'est généralement pas plus rapide.

Une autre raison d'utiliser Spark est son langage de haut niveau plus agréable que MapReduce. Il fournit une vue fonctionnelle similaire à la programmation qui imite Scala, ce qui est bien plus agréable que d'écrire du code MapReduce. (Bien que vous deviez utiliser Scala ou adopter les API Java ou Python légèrement moins développées pour Spark). Crunch et Cascading fournissent déjà une abstraction similaire au-dessus de MapReduce, mais c'est toujours un domaine où Spark est agréable.

Enfin, Spark propose des sous-projets encore jeunes mais prometteurs pour le ML, l'analyse de graphiques et la diffusion en continu, qui présentent une API similaire et cohérente. Avec MapReduce, vous devrez vous tourner vers plusieurs autres projets différents pour cela (Mahout, Giraph, Storm). C'est agréable de l'avoir dans un seul emballage, bien qu'il ne soit pas encore «cuit».

Pourquoi n'utiliseriez-vous pas Spark? me paraphrasant :

  • Spark est principalement Scala, avec des API Java portées; MapReduce pourrait être plus convivial et plus natif pour les développeurs Java
  • Il y a plus d'expertise MapReduce que Spark
  • Pour les travaux parallèles aux données, en un seul passage, de type ETL, MapReduce a été conçu pour, MapReduce est plus léger que l'équivalent Spark
  • Spark est assez mature, tout comme YARN maintenant, mais Spark-on-YARN est encore assez nouveau. Les deux ne sont peut-être pas encore intégrés de manière optimale. Par exemple, jusqu'à récemment, je ne pense pas que Spark pourrait demander à YARN des allocations basées sur le nombre de cœurs? C'est-à-dire: MapReduce pourrait être plus facile à comprendre, à gérer et à régler
Sean Owen
la source
Merci pour la clarification. Garder les données en mémoire semble avoir des implications intéressantes - Je vais lire un peu plus sur le concept de jeu de données distribué résilient de Spark.
idclark
3
+1 pour une réponse vraiment claire et utile pour beaucoup de gens qui avaient cette question, comme moi.
vefthym
3
Gardez à l'esprit que Sean Owen est co-auteur du nouveau livre O'Reilly sur Spark. :-)
sheldonkreger
1

Je ne suis pas sûr du YARN, mais je pense que Spark fait une réelle différence par rapport à Hadoop (annoncé comme 100 fois plus rapide) si les données peuvent parfaitement s'intégrer dans la mémoire des nœuds de calcul. Tout simplement parce qu'il évite l'accès au disque dur. Si les données ne correspondent pas à la mémoire, il y a encore un gain à cause de la mise en mémoire tampon.

iliasfl
la source
0

Bonne information @Sean Owen. Je voudrais en ajouter un de plus. Spark peut aider à créer des pipelines de données unifiées dans l'architecture Lambda adressant à la fois les couches Batch et Streaming avec une capacité d'écriture sur la couche de service commune. C'est un énorme avantage de réutiliser la logique entre le batch et le streaming. De plus, les algorithmes de streaming K-Means dans Spark1.3 sont un atout supplémentaire pour ML, à part une excellente surveillance des tâches et des visualisations de processus dans 1.4.

Srini Vemula
la source
0

Il serait juste de comparer Spark avec MapReduce - le cadre de traitement de Hadoop. Dans la majorité des cas, Spark peut surpasser MapReduce. Le premier permet le traitement des données en mémoire, ce qui permet de traiter les données jusqu'à 100 fois plus rapidement. Pour cette raison, Spark est une option préférée si vous avez besoin d'informations rapidement, par exemple, si vous devez

  • exécuter des analyses client, par exemple comparer le comportement d'un client avec les modèles de comportement d'un segment de client particulier et déclencher certaines actions;
  • gérer les risques et prévoir divers scénarios possibles;
  • détecter la fraude en temps réel;
  • exécuter des analyses de Big Data industrielles et prévoir les anomalies et les pannes de machines.

Cependant, MapReduce est bon pour traiter des ensembles de données vraiment énormes (si vous êtes d'accord avec le temps requis pour le traitement). En outre, c'est une solution plus économique, car MapReduce lit / écrit sur un disque. Et les disques sont généralement moins chers que la mémoire.

Irene
la source
-1

L'apprentissage automatique est un bon exemple d'un type de problème où les solutions à base de Spark ont ​​des années-lumière d'avance sur les solutions à base de mapreduce, malgré le jeune âge de l'étincelle sur fil.

Max Gibiansky
la source
2
Je ne pense pas que ce soit vrai, mais je pense que je sais où vous en êtes: la mémoire fonctionne beaucoup plus rapidement pour le calcul itératif et beaucoup de ML est itératif.
Sean Owen