Jakie są przypadki użycia dla Apache Spark vs. Hadoop


30

Z Hadoop 2.0 i YARN Hadoop prawdopodobnie nie jest już związany tylko rozwiązaniami zmniejszającymi mapę. Z tym postępem, jakie są przypadki użycia Apache Spark vs. Hadoop, biorąc pod uwagę, że oba siedzą na szczycie HDFS? Przeczytałem dokumentację wprowadzającą do Spark, ale jestem ciekawy, czy ktoś napotkał problem, który był bardziej wydajny i łatwiejszy do rozwiązania dzięki Sparkowi w porównaniu do Hadoopa.

Odpowiedzi:


40

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

Dziękuję za wyjaśnienie. Przechowywanie danych w pamięci wydaje się mieć pewne interesujące implikacje. Przeczytam nieco dalej o koncepcji Resilient Distributed Dataset Spark.
idclark

3
+1 za naprawdę jasną i przydatną odpowiedź dla wielu ludzi, którzy mieli to pytanie, takich jak ja.
vefthym

3
Pamiętaj, że Sean Owen jest współautorem nowej książki O'Reilly na temat Spark. :-)
sheldonkreger

1

Nie jestem pewien co do YARN, ale myślę, że Spark robi istotną różnicę w porównaniu z Hadoop (reklamowany jako 100 razy szybszy), jeśli dane mogą dobrze pasować do pamięci węzłów obliczeniowych. Po prostu dlatego, że unika dostępu do dysku twardego. Jeśli dane nie mieszczą się w pamięci, nadal występuje pewien zysk z powodu buforowania.


0

Dobra informacja @Sean Owen. Chciałbym dodać jeden dodatkowy. Spark może pomóc w budowaniu ujednoliconych potoków danych w architekturze Lambda adresujących zarówno do warstw Batch, jak i Streaming, z możliwością zapisu do wspólnej warstwy obsługującej. Ogromną zaletą jest ponowne wykorzystanie logiki między partią a przesyłaniem strumieniowym. Dodatkowo, strumieniowanie algorytmów K-Means w Spark1.3 stanowi dodatkowy plus do ML oprócz doskonałego monitorowania zadań i wizualizacji procesów w 1.4.


0

Sprawiedliwe byłoby porównanie Spark z MapReduce - strukturą przetwarzania Hadoop. W większości przypadków Spark może przewyższyć MapReduce. Ten pierwszy umożliwia przetwarzanie danych w pamięci, co umożliwia przetwarzanie danych nawet 100 razy szybciej. Z tego powodu Spark jest preferowaną opcją, jeśli potrzebujesz szybkiego wglądu, na przykład, jeśli potrzebujesz

  • uruchamiać analitykę klienta, np. porównywać zachowanie klienta z wzorcami zachowania określonego segmentu klienta i uruchamiać określone działania;
  • zarządzać ryzykiem i prognozować różne możliwe scenariusze;
  • wykrywanie oszustw w czasie rzeczywistym;
  • prowadzić przemysłową analizę dużych zbiorów danych i przewidywać anomalie i awarie maszyn.

MapReduce jest jednak dobry w przetwarzaniu naprawdę dużych zbiorów danych (jeśli nie masz czasu potrzebnego na przetwarzanie). Poza tym jest to bardziej ekonomiczne rozwiązanie, ponieważ MapReduce odczytuje / zapisuje na dysk. A dyski są ogólnie tańsze niż pamięć.


-1

Uczenie maszynowe jest dobrym przykładem rodzaju problemu, w którym rozwiązania oparte na iskrze wyprzedzają rozwiązania oparte na mapreduce o wiele lat świetlnych, pomimo młodego wieku przędzenia iskrowego.


2
Nie sądzę, że to prawda, ale myślę, że wiem, do czego zmierzasz: w pamięci działa znacznie szybciej w przypadku obliczeń iteracyjnych, a wiele ML jest iteracyjnych.
Sean Owen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.