Was sind die Anwendungsfälle für Apache Spark vs Hadoop


30

Mit Hadoop 2.0 und YARN ist Hadoop angeblich nicht mehr nur an Kartenreduzierungslösungen gebunden. Was sind die Anwendungsfälle für Apache Spark und Hadoop, wenn man bedenkt, dass beide auf HDFS basieren? Ich habe die Einführungsdokumentation für Spark gelesen, bin aber gespannt, ob jemand auf ein Problem gestoßen ist, das mit Spark effizienter und einfacher zu lösen war als mit Hadoop.

Antworten:


40

Hadoop bedeutet HDFS, YARN, MapReduce und viele andere Dinge. Meinen Sie damit Spark vs MapReduce ? Weil Spark auf / mit Hadoop läuft, was eher der Punkt ist.

Der Hauptgrund für die Verwendung von Spark liegt in der Geschwindigkeit. Dies liegt an der Tatsache, dass bei seiner Ausführung die Daten zwischen den Phasen im Speicher bleiben können, anstatt nach einer Map oder einer Reduzierung immer wieder in HDFS gespeichert zu werden. Dieser Vorteil ist sehr ausgeprägt für iterative Berechnungen, die mehrere zehn Stufen haben, von denen jede die gleichen Daten berührt. Hier könnte es "100x" schneller gehen. Bei einfachen ETL-ähnlichen Jobs mit einem Durchgang, für die MapReduce entwickelt wurde, ist dies im Allgemeinen nicht schneller.

Ein weiterer Grund für die Verwendung von Spark ist die bessere Hochsprache im Vergleich zu MapReduce. Es bietet eine funktionale, programmierähnliche Ansicht, die Scala nachahmt, was weitaus besser ist als das Schreiben von MapReduce-Code. (Obwohl Sie entweder Scala verwenden oder die etwas weniger entwickelten Java- oder Python-APIs für Spark verwenden müssen). Crunch und Cascading bieten bereits eine ähnliche Abstraktion über MapReduce, aber dies ist immer noch ein Bereich, in dem Spark eine gute Figur macht.

Schließlich hat Spark noch junge, aber vielversprechende Unterprojekte für ML, Graphanalyse und Streaming, die eine ähnliche, kohärente API aufweisen. Mit MapReduce müssten Sie sich dazu an verschiedene andere Projekte wenden (Mahout, Giraph, Storm). Es ist schön, es in einer Packung zu haben, wenn auch noch nicht "gebacken".

Warum würden Sie Spark nicht verwenden? paraphrasieren mich:

  • Spark ist in erster Linie Scala mit portierten Java-APIs. MapReduce ist für Java-Entwickler möglicherweise benutzerfreundlicher und nativer
  • Derzeit gibt es mehr MapReduce-Fachwissen als Spark
  • Für die datenparallelen, ETL-ähnlichen Jobs mit einem Durchgang, für die MapReduce entwickelt wurde, ist MapReduce im Vergleich zum Spark-Äquivalent leichter
  • Spark ist ziemlich ausgereift und YARN auch, aber Spark-on-YARN ist noch ziemlich neu. Die beiden sind möglicherweise noch nicht optimal integriert. Zum Beispiel glaube ich bis vor kurzem nicht, dass Spark YARN nach Zuordnungen basierend auf der Anzahl der Kerne fragen könnte? Das heißt: MapReduce ist möglicherweise einfacher zu verstehen, zu verwalten und anzupassen

Danke für die Klarstellung. Es hört sich so an, als hätte das Speichern von Daten einige interessante Auswirkungen. Ich werde etwas mehr über das Resilient Distributed Dataset-Konzept von Spark nachlesen.
idclark

3
+1 für eine wirklich klare und nützliche Antwort für viele Leute, die diese Frage hatten, wie ich.
VEFTHYM

3
Denken Sie daran, dass Sean Owen Mitautor des neuen O'Reilly-Buches über Spark ist. :-)
Sheldonkreger

1

Ich bin mir nicht sicher, was das YARN angeht, aber ich denke, dass Spark im Vergleich zu Hadoop (das als 100-mal schneller beworben wird) einen echten Unterschied macht, wenn Daten gut in den Speicher der Rechenknoten passen. Einfach, weil es den Zugriff auf die Festplatte vermeidet. Wenn die Daten nicht in den Speicher passen, ist aufgrund der Pufferung immer noch ein gewisser Gewinn zu verzeichnen.


0

Gute Infos @ Sean Owen. Möchte noch eine hinzufügen. Mit Spark können Sie Unified Data Pipelines in der Lambda-Architektur erstellen, die sowohl die Batch- als auch die Streaming-Ebene adressieren und in die gemeinsame Serving-Ebene schreiben können. Es ist von großem Vorteil, die Logik zwischen Batch und Streaming wiederzuverwenden. Neben der hervorragenden Jobüberwachung und Prozessvisualisierung in 1.4 ist auch das Streamen von K-Means-Algorithmen in Spark1.3 ein zusätzliches Plus für ML.


0

Es wäre fair, Spark mit MapReduce - dem Verarbeitungsframework von Hadoop - zu vergleichen . In den meisten Fällen kann Spark MapReduce übertreffen. Ersteres ermöglicht die In-Memory-Datenverarbeitung, wodurch Daten bis zu 100-mal schneller verarbeitet werden können. Aus diesem Grund ist Spark eine bevorzugte Option, wenn Sie schnell Informationen benötigen, z. B. wenn Sie diese benötigen

  • Kundenanalysen durchführen, z. B. das Verhalten eines Kunden mit den Verhaltensmustern eines bestimmten Kundensegments vergleichen und bestimmte Aktionen auslösen;
  • Risiken managen und verschiedene mögliche Szenarien prognostizieren;
  • Betrug in Echtzeit erkennen;
  • Führen Sie industrielle Big-Data-Analysen durch und sagen Sie Anomalien und Maschinenausfälle voraus.

MapReduce kann jedoch sehr große Datenmengen gut verarbeiten (wenn Sie mit der für die Verarbeitung erforderlichen Zeit einverstanden sind). Außerdem ist es eine wirtschaftlichere Lösung, da MapReduce von einer Festplatte liest / auf eine Festplatte schreibt. Und Festplatten sind in der Regel billiger als Speicher.


-1

Maschinelles Lernen ist ein gutes Beispiel für einen Problemtyp, bei dem funkenbasierte Lösungen trotz des jungen Alters von funkenbasiertem Garn Lichtjahre vor mapreduce-basierten Lösungen liegen.


2
Ich glaube nicht, dass dies zutrifft, aber ich glaube, ich weiß, worauf es ankommt: In-Memory arbeitet für iterative Berechnungen viel schneller und ML ist viel iterativ.
Sean Owen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.