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