Najlepsza odpowiedź
Co dotyczy frameworka jako całości: w tej chwili Apache Spark wyprzedza swoich konkurentów o jeden krok , ze względu na pewne cechy, takie jak implementacja (i integracja) różnych i bardzo przydatnych narzędzi (żeby wymienić tylko Spark SQL i MLlib) oraz możliwość przechowywania danych pośrednich w RDD. Z tego powodu wielu programistów koncentruje się na tym i przypuszczam, że dopóki nie nastąpi nowy przełom w podstawowej technologii, każdy konkurent będzie nieistotny.
Inaczej, jeśli weźmiesz pod uwagę pojedyncze wdrożenia na Apache Spark można zidentyfikować niektórych konkurentów: H2O jest pretendentem do Spark MLlib, Storm (wskazał Joe) jest alternatywą dla przesyłania strumieniowego Spark, a istnieje kilka silników podobnych do SQL, które można porównać do Spark SQL .
Odpowiedź
Oto kilka JARGONÓW z Apache Spark, których będę używać.
Zadanie: – Fragment kodu, który odczytuje dane wejściowe z HDFS lub lokalnego, wykonuje obliczenia na danych i zapisuje dane wyjściowe.
Etapy: -Zadania są podzielone na etapy . Etapy są klasyfikowane jako mapa lub redukcja etapów (jest to łatwiejsze do zrozumienia, jeśli pracowałeś na Hadoop i chcesz skorelować). Etapy są podzielone na podstawie granic obliczeniowych, wszystkie obliczenia (operatory) nie mogą być aktualizowane na jednym etapie. Dzieje się to na wielu etapach.
Zadania: – Na każdym etapie są zadania, jedno zadanie na partycję. Jedno zadanie jest wykonywane na jednej partycji danych na jednym executorze (komputerze).
DAG – DAG oznacza Directed Acyclic Graph, w obecnym kontekście jest to DAG operatorów.
Executor – Proces odpowiedzialny za wykonanie zadania.
Sterownik – Program / proces odpowiedzialny za wykonanie zadania na silniku iskrowym
Główny – Maszyna, na której działa program Sterownika
Slave – maszyna, na której działa program Executor
Wszystkie zadania w Spark składają się z serii operatorów i działają na zbiorze danych. Wszystkie operatory w zadaniu służą do konstruowania DAG (Skierowany Graf Acykliczny). DAG jest optymalizowany poprzez przestawianie i łączenie operatorów tam, gdzie to możliwe. Na przykład załóżmy, że musisz przesłać zadanie Spark zawierające operację na mapie, po której następuje operacja filtru. Optymalizator Spark DAG zmieniłby kolejność tych operatorów, ponieważ filtrowanie zmniejszyłoby liczbę rekordów poddawanych operacji na mapie.
Spark ma małą bazę kodu, a system jest podzielony na różne warstwy. Każda warstwa ma pewne obowiązki. Warstwy są od siebie niezależne.
- Pierwsza warstwa to interpreter , Spark używa interpretera Scala, z pewnymi modyfikacjami.
- Podczas wpisywania kodu w konsoli Spark (tworzenie RDD i stosowanie operatorów ), Spark tworzy wykres operatora.
- Gdy użytkownik wykonuje akcję (np. Zbieranie), wykres jest przesyłany do harmonogramu DAG. Planista DAG dzieli wykres operatora na etapy (mapuj i zmniejszaj).
- Etap składa się z zadań opartych na partycjach danych wejściowych. Program planujący DAG potokuje operatorów w celu optymalizacji wykresu. Operatory map można zaplanować w jednym etapie. Ta optymalizacja jest kluczem do wydajności programu Sparks. Ostatecznym wynikiem harmonogramu DAG jest zestaw etapów.
- Etapy są przekazywane do Harmonogram zadań . Harmonogram zadań uruchamia zadania za pośrednictwem menedżer klastra . (Spark Standalone / Yarn / Mesos). Harmonogram zadań nie wie o zależnościach między etapami.
- Pracownik wykonuje zadania na serwerze podrzędnym. Nowa maszyna JVM jest uruchamiana na JOB. Pracownik wie tylko o kodzie, który jest do niego przekazywany.
Spark buforuje dane do przetworzenia, pozwalając mi je 100 razy szybciej niż hadoop. Spark używa Akka do wielowątkowości, zarządzanie stanem wykonawcy, planowanie zadań. Wykorzystuje Jetty do udostępniania plików (Jars i innych plików), Http Broadcast, uruchamiania Spark Web UI. Spark jest wysoce konfigurowalny i jest w stanie wykorzystać istniejące komponenty już istniejące w Hadoop Eco-System. Pozwoliło to firmie Spark na gwałtowny wzrost, a za niedługo wiele organizacji używa jej już w produkcji.
Możesz spojrzeć na
, aby bardziej szczegółowo zrozumieć.