Hadoop oznacza HDFS, YARN, MapReduce i wiele innych rzeczy. Masz na myśli Spark vs MapReduce ? Ponieważ Spark działa na / z Hadoop, co jest raczej celem.
Głównym powodem korzystania ze Spark jest szybkość, a wynika to z faktu, że jego wykonanie może przechowywać dane w pamięci między etapami, a nie zawsze utrzymywać powrót do HDFS po Mapowaniu lub Zmniejszaniu. Ta zaleta jest bardzo wyraźna w przypadku obliczeń iteracyjnych, które mają dziesiątki etapów, z których każdy dotyka tych samych danych. To tutaj rzeczy mogą być „100x” szybsze. W przypadku prostych, jednoprzebiegowych zadań podobnych do ETL, dla których zaprojektowano MapReduce, generalnie nie jest to szybsze.
Innym powodem używania Spark jest jego ładniejszy język wysokiego poziomu w porównaniu do MapReduce. Zapewnia funkcjonalny widok podobny do programowania, który naśladuje Scalę, co jest o wiele ładniejsze niż pisanie kodu MapReduce. (Chociaż musisz albo użyć Scali, albo zastosować nieco mniej rozwinięte API Java lub Python dla Spark). Crunch and Cascading już teraz zapewniają podobną abstrakcję na MapReduce, ale wciąż jest to obszar, w którym Spark jest miły.
Wreszcie Spark ma jeszcze młode, ale obiecujące podprojekty dla ML, analizy wykresów i streamingu, które ujawniają podobny, spójny API. Z MapReduce musiałbyś w tym celu zwrócić się do kilku innych projektów (Mahout, Giraph, Storm). Fajnie jest mieć go w jednym opakowaniu, choć jeszcze nie „upieczonym”.
Dlaczego nie używałbyś Spark? parafrazując siebie:
- Spark to przede wszystkim Scala z przeniesionymi interfejsami API Java; MapReduce może być bardziej przyjazny i bardziej natywny dla programistów Java
- Obecnie istnieje więcej wiedzy na temat MapReduce niż Spark
- Dla zadań równoległych do danych, jednoprzebiegowych, podobnych do ETL zaprojektowano MapReduce, MapReduce jest lżejszy w porównaniu do odpowiednika Spark
- Spark jest dość dojrzały, podobnie jak YARN, ale Spark-on-YARN jest wciąż całkiem nowy. Oba mogą nie być jeszcze optymalnie zintegrowane. Na przykład do niedawna nie sądzę, aby Spark mógł poprosić YARN o przydziały na podstawie liczby rdzeni? Oznacza to, że MapReduce może być łatwiejszy do zrozumienia, zarządzania i dostrojenia