Wprowadzenie do Apache Spark Jakub Toczek
Epoka informacyjna
MapReduce
MapReduce
Apache Hadoop narodziny w 2006 roku z Apache Nutch open source składa się z systemu plików HDFS i silnika MapReduce napisany w Javie i w C
HDFS
Apache Spark - czym jest? Ogólny silnik do przetwarzania Big Data. Open source.
Spark - motywacja Trudność w programowaniu w Hadoopie (MapReduce) Nadmierne wykorzystywanie HDD przez Hadoopa Potrzeba frameworku bardziej przyjaznego machine-learning
Trudność w programowaniu
Trudność w programowaniu Python: Scala: Java:
Spark - motywacja Trudność w programowaniu w Hadoopie (MapReduce) Nadmierne wykorzystywanie HDD przez Hadoopa Potrzeba frameworku bardziej przyjaznego machine-learning
Historia 2009 - wychodzi pierwsza wersja Spark a (część doktoratu Matei Zaharia z UC Berkeley AMPLab) 2010 - upublicznienie kodu źródłowego (licencja BSD) 2013 - Spark staje się częścią Apache Software Foundation i zmienia licencję na Apache 2.0 listopad 2014 - Apache Spark pobija rekord w szybkości sortowania (100 TB danych w 23 min, wcześniejszy rekord: Hadoop i 72 min używając 10x więcej maszyn)
Spark i optymalizacja Spark oferuje nam: lazy computation (optymalizacja przed wykonywaniem) jak najmniejsza ilość skanowań HDD (jak się da to tylko na początku, reszta obliczeń w pamięci RAM) obsługa interaktywnych zapytań możliwość przetwarzania strumieni prosty i przyjemny framework wsparcie dla machine learning
Budowa Sparka
Główne filary Sparka DAG Direct Acyclic Graph (Skierowany graf acykliczny) RDD Resilient Distributed Dataset
DAG - przykład WordCount
DAG - przykład mapowanie + filtrowanie
RDD Struktura danych w Sparku. Niezmienna, rozproszona kolekcja obiektów. Każdy zbiór danych w RDD jest podzielony na logiczne partycje, które mogą być przetwarzane przez różne wierzchołki klastra. Może przechowywać obiekty Pythonowe, Javowe i w Scali. Read-only - po każdej operacji na RDD tworzony jest nowy RDD.
RDD Istnieją dwa sposoby stworzenia RDD: zrównoleglenie kolekcji danych w programie sterownika odwołanie się do zewnętrznego systemu przechowywania danych jak HDFS, HBase albo dowolne źródło danych oferujące Hadoop Input Format Spark używa RDD do szybszego przetwarzania operacji MapReduce.
RDD Trzy podstawowe tryby przetrzymywania RDD: tylko w pamięci tylko na dysku w pamięci i na dysku
RDD Dwa rodzaje obsługiwanych operacji: transformacje akcje Przykłady transformacji: map, filter, flatmap, groupbykey, reducebykey, aggregatebykey, pipe i coalesce. Przykłady akcji: reduce, collect, count, first, take, countbykey i foreach. Zapraszam na: http://spark.apache.org/docs/latest/programming-guide.html
Dlaczego RDD? Może być przechowywany w pamięci podręcznej. Aplikacje iteracyjne jak i interaktywne wymagają szybkiej wymiany danych między równoległymi jobami. W MapReduce wymiana danych jest bardzo wolna przez replikacje, serializacje i zapis danych na dysk. Bez względu na system plików, zajmuje to ok 90% całkowitego czasu przetwarzania.
Operacje iteracyjne na MapReduce
Operacje interaktywne na MapReduce
Operacje iteracyjne na Spark RDD
Operacje interaktywne na Spark RDD
Jak działa Apache Spark?
Przykład WordCount
Przykład WordCount
Przykład WordCount
Spark Streaming Rozszerzenie Sparka generujące mikro-zadania wsadowe (co jakiś czas np 2s), pozwalające na analizę strumieni danych. Używa tych samych mechanizmów do zrównoleglania co Spark Core. Zapewnia analizę elementu strumienia danych dokładnie raz. Większość innych frameworków traktuje strumienie pojedynczo.
Spark Streaming
Spark SQL Zadania są generowane na podstawie zapytań SQL. Podobny do Hive, może korzystać z jego komponentów i zapytań.
Instalacja Nie wymaga wcześniej zainstalowanego Hadoopa. Trzeba mieć zainstalowane JDK. Działa na komputerach z systemem opartych na UNIXie (Linux, Mac OS) oraz Windows (tutaj trzeba zbudować projekt Spark a samemu za pomocą Maven a). Projekty buduje się za pomocą Maven a. (Z własnego doświadczenia lepiej na Win10 ściągnąć sobie maszynę wirtualną z linuxem)
Źródła https://www.tutorialspoint.com/apache_spark/ https://en.wikipedia.org/wiki/apache_spark http://spark.apache.org/docs/latest/programming-guide.html http://0x0fff.com/spark-architecture-talk/ https://www.sigmoid.com/apache-spark-internals/ https://www.infoq.com/articles/apache-spark-introduction