Einfuehrung in Apache Spark

48
Prof. Dr. Jens Albrecht TH Nürnberg Einführung in

Transcript of Einfuehrung in Apache Spark

Page 1: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht

TH Nürnberg

Einführung in

Page 2: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 3

Hybride BI-/Big-Data-Architektur

An

aly

seD

ate

nh

alt

un

gD

ate

nq

ue

lle

n

Klassische Datenquellen

OLTP-Systeme

Big-Data-Quellen

Dokumente, Server Logs, Sensor Daten,Social, Clickstream, GPS,

BusinessIntelligence

EnterpriseDWH

Data Marts

Predictive Analytics

OperationalAnalytics

ExplorativeAnalyse

Data Lake

Page 3: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 4

Agenda

Apache Hadoop vs. Apache Spark

Schweizer Taschenmesser für Big Data

Verteilte Verarbeitung mit RDDs

DataFrames und Spark SQL

Streaming und Machine Learning

Fazit

Page 4: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 5

Agenda

Apache Hadoop vs. Apache Spark

Schweizer Taschenmesser für Big Data

Verteilte Verarbeitung mit RDDs

DataFrames und Spark SQL

Streaming und Machine Learning

Fazit

Page 5: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 6

Hadoop: Pro & Contra

Stärken von Hadoop

• Verteilte Speicherung (HDFS)

• Verteilte Verarbeitung (MapReduce)

• Fehlertoleranz

• Open Source

• Professionelle Distributionen

• Umfangreiches Ökosystem

Schwächen von Hadoop

• Hohe Latenz bei Verarbeitung (träge)

• Komplexe API

• Machine Learning problematisch

• Kein Streaming

Page 6: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 7

Hadoop Environment

Distributed Job Processing

MapReduce(Hive, Sqoop, Pig, Mahout)

Distributed Storage (HDFS)

Resource Management

YARN

Hadoop+ Ecosystem

Admin: Ambari, Cloudera Manager

FileFormat: Avro, Parquet, ORC, …

DB: HBase, Cassandra, Acummulo, …

Security: Ranger, Sentry, Kerberos, …

Page 7: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 8

Hadoop Environment mit Spark

Distributed Job Processing

Spark MapReduce(Hive, Sqoop, Pig, Mahout)

Distributed Storage (HDFS)

Resource Management

YARN

Hadoop+ Ecosystem

Admin: Ambari, Cloudera Manager

FileFormat: Avro, Parque, ORC, …

DB: HBase, Cassandra, Acummulo, …

Security: Ranger, Sentry, …

Page 8: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 9

Hadoop MapReduce vs. Spark

HDFS

Hadoop MapReduce: Schreiben nach jeder Map- oder Reduce-Operation

HDFSSchritt 1 HDFSSchritt 2 HDFSSchritt 3

HDFS

Spark: Arbeitet im Hauptspeicher und optimiert Einzelschritte

RAMSchritt 1 HDFSSchritt

2+3

Page 9: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 10

Spark Infrastruktur

Cluster Manager (Master)

▸ Local

▸ YARN (Hadoop)

▸ Mesos

▸ Standalone

Driver Program

SparkSession

Executor

Worker Node

CacheTasks

Cluster Manager

Executor

Worker Node

CacheTasks

Page 10: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 11

Agenda

Apache Hadoop vs. Apache Spark

Schweizer Taschenmesser für Big Data

Verteilte Verarbeitung mit RDDs

DataFrames und Spark SQL

Streaming und Machine Learning

Fazit

Page 11: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 12

Apache Spark – Swiss Army Knife of Big Data

☛ Skalierbare, performante, funktionale Engine für Big Data Processing

▸ Skalierbar durch Verteilung

▸ Performance: InMemory-Verarbeitung und Query Optimization

▸ Funktionalität: Einfache, einheitliche API; mächtige Funktionen

Batch Processing

Interactive Data Discovery

JavaPython

Scala R

Data Streaming

Graph Processing

SQL

Apache Spark

Machine Learning

Page 12: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 13

Anwendungsfälle für Apache Spark

� Datenintegration und –aufbereitung (ETL)

▸ Verknüpfung verschiedenster Datenquellen

▸ Komplexe Transformationen mit relationalen und nicht-relationalen Operatoren über DataFrame API

▸ Ergebnisse als Tabelle (Hive, JDBC) oder Datei

� Interaktive Analyse und Data Discovery

▸ Interaktive Anfragen direkt auf Rohdaten möglich

▸ Zugriff mit SQL, Python, R sowie über JDBC/ODBC

▸ Datenanalyse und -visualisierung mit Data-Science-Notebooks wie Apache Zeppelin

� Near Real-Time Data Processing

▸ Kontinierliche Verarbeitung von Datenströmen für IoT-Anwendungen, Betrugserkennung u.v.m.

� Machine Learning und Data Science

▸ Einsatz von ML-Verfahren für Vorhersagen, Betrugserkennung, Empfehlungssysteme u.v.m

� High-Performance Computing

▸ Parallelisierung aufwändiger Berechnungen im Cluster für rechenintensive Simulationen

Page 13: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 14

Spark Historie

2009 Start der Entwicklung am AMPLab der Universität Berkeley durch Matei Zaharia

2013 Gründung der Firma Databricks

Juni 2013 Apache Incubation

Feb. 2014 Apache Top-Level

Mai 2014 Spark 1.0: SparkSQL, MLlib, GraphX, Streaming

März 2015 Spark 1.3: DataFrame API

Jan. 2016 Spark 1.6: Dataset API

Juli 2016 Spark 2.0: überarbeite API für DataFrames und Datasets, Performance Optimierungen, SparkSQL erweitert

Dez. 2016 Spark 2.1: Verbesserungen bei Streaming und Machine Learning

Mai 2017 Spark 2.1.1

Page 14: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 15

Agenda

Apache Hadoop vs. Apache Spark

Schweizer Taschenmesser für Big Data

Verteilte Verarbeitung mit RDDs

DataFrames und Spark SQL

Streaming und Machine Learning

Fazit

Page 15: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 16

RDD

Worker Worker Worker WorkerPartition

RDDs

� Verteilte Collections:

▸ Alle Operationen werden parallel ausgeführt

� Partitionierung

▸ HDFS-Blöcke werden zu Partitionen

Page 16: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 17

Beispielanalyse mit RDDs

"id;timestamp;temp;humid;status"

"403;2016090723;15.6;94.0;OK"

"3668;2016090800;16.6;90.0;OK"

"3379;2016090801;14.8;95.0;OK"

"403;2016090801;-999;-999;ERROR"

"3379;2016090802;14.2;95.0;OK"

"3668;2016090802;13.9;96.0;OK"

sc.textFile("/…/weather.csv")

map: line � line.split(";")[0, 2, 4]

filter: status == "OK"

map: (id, temp, status) � (int(id), float(temp))

["id", "temp", "status"]

["403", "15.6", "OK"]

["3668", "16.6", "OK"]

["3379", "14.8", "OK"]

["403", "-999", "ERROR"]

["3379", "14.2", "OK"]

["3668", "13.9", "OK"]

["403", "15.6", "OK"]

["3668", "16.6", "OK"]

["3379", "14.8", "OK"]

["3379", "14.2", "OK"]

["3668", "13.9", "OK"]

(403, 15.6)

(3668, 16.6)

(3379, 14.8)

(3379, 14.2)

(3668, 13.9)

reduceByKey: (id, temp) � (id, min(temp))

(403, 15.6)

(3379, 14.2)

(3668, 13.9)

Analyse: Ermittle das Minimum der Temperaturdaten pro Station

collect()

Tran

sfo

rmat

ion

en

Action

Page 17: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 18

Beispielanalyse mit RDDs

� Variante 1

� Variante 2

mintemp_rdd = sc.textFile(hdfs_path + "weather.csv")

.map(lambda line: [line.split(';')[i] for i in (0, 2, 4)])

.filter(lambda (id, temp, status): status == "OK")

.map(lambda (id, temp, status): (int(id), float(temp)))

.reduceByKey(min)

mintemp_rdd.collect()

file_rdd = sc.textFile(hdfs_path + "weather.csv")

tuple_rdd = file_rdd.map(lambda line: [line.split(';')[i] for i in (0, 2, 4)])

filtered_rdd = tuple_rdd.filter(lambda (id, temp, status): status == "OK")

pair_rdd = filtered_rdd.map(lambda (id, temp, status): (int(id), float(temp)))

mintemp_rdd = pair_rdd.reduceByKey(min)

mintemp_rdd.collect()

Page 18: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 19

Operationen auf RDDs

� Transformations: Erzeugung eines neuen RDD aus bestehendem

▸ Lazy evaluation – Ergebnisse nicht materialisiert

▸ Deutlich mehr Funktionalität als Map-Reduce

� Actions: Geben einen Wert oder ein Dataset an Aufrufer zurück

map filter sample

groupByKey sortByKey reduceByKey

union pipe repartition

join leftOuterJoin rightOuterJoin

reduce collect count

first take(n) saveAsTextFile

Page 19: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 20

RDDs: Operatorengraph (DAG)

CSV File

map

csv RDD

Result

reduce

RDD

Join

RDD

Action

joined RDD

JSON File

map

JSON RDD

RDD

RDD Lineage

Page 20: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 21

Agenda

Apache Hadoop vs. Apache Spark

Schweizer Taschenmesser für Big Data

Verteilte Verarbeitung mit RDDs

DataFrames und Spark SQL

Streaming und Machine Learning

Fazit

Page 21: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 22

DataFrames

ID: Integer Temp: Double Status: String

403 15.6 OK

3668 16.6 OK

3379 14.6 OK

3379 -999.0 ERROR

3668 13.9 OK

[403, 15.6, "OK"]

[3668, 16.6, "OK"]

[3379, 14.8, "OK"]

[3379, -999.0, "ERROR"]

[3668, 13.9, "OK"]

RDD: Schemafrei

• verteilte Liste von Objekten

• Spark kennt innere Struktur nicht

DataFrame: mit Schema

• verteilte Tabelle mit benannten,typisierten Spalten

• Basis für Spark SQL

Page 22: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 23

DataFrames

� DataFrames

▸ Konzept übernommen aus R und Python (Pandas)

▸ Verteilte Collection tabellen-strukturierter Daten:Datensätze mit typisierten, benannten Spalten

▸ RDD mit Schema

▸ APIs für Scala, Java, Python, R

� Schema Definition:

▸ Explizit: Case Class, StructType

▸ Implizit: automatische Erkennung durch Sampling

� Unterstützung vielder Datenquellen

▸ Nativ: RDD, JSON, JDBC, Parquet

▸ 3rd Party: CSV, Cassandra uvm.

Page 23: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 24

Definition von DataFrames

DataFrameRDD

DataSource

JSON

Parquet

Hive

JDBC

3rd Party

CSV

HBase

MongoDB

Cassandra

Custom

Page 24: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 25

Beispiel-Schema

id;timestamp;temp;humid;status

403;2016090723;15.6;94.0;OK

3668;2016090800;16.6;90.0;OK

3379;2016090801;14.8;95.0;OK

403;2016090801;-999;-999;ERROR

3379;2016090802;14.2;95.0;OK

3668;2016090802;13.9;96.0;OK

RDBMS Quelle CSV Quelle: weather.csv

Page 25: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 26

Definition von DataFrames

# Erzeuge DateFrame aus csv mit automatischer Schema-Erkennung

weather_df = spark.read.format("com.databricks.spark.csv") \

.option("header", "true") \

.option("inferSchema", "true") \

.load("weather.csv")

# Erzeuge DataFrame aus JDBC-Quelle

stations_df = spark.read.format('jdbc') \

.option('url', 'jdbc:mysql://host/db') \

.option('dbtable', 'stations')

Page 26: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 27

Data Frames und Spark SQL

# DataFrames als temporäre Tabellen registrieren

weather_df.createOrReplaceTempView("weather_csv")

stations_df.createOrReplaceTempView("stations_jdbc")

# Anfrage

query = """

SELECT name, timestamp, temp

FROM stations_jdbc s JOIN weather_csv w ON s.id = w.id

WHERE temp > 33 AND state = 'Bayern'

"""

# Spark SQL erzeugt neuen DataFrame basierend auf Anfrage

result_df = spark.sql(query)

# Mögliche Actions

result_df.show()

result_df.collect()

result_df.write.saveAsTable('weather_report', mode='overwrite')

Page 27: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 28

DataFrame DSL

� SQL

� DataFrame API

SELECT name, timestamp, temp

FROM stations_jdbc s JOIN weather_csv w ON s.id = w.id

WHERE temp > 33 AND state = 'Bayern'

result_df = stations_df \

.join(weather_df, stations_df.id == weather_df.id) \

.filter("temp > 33 AND state = 'Bayern'") \

.select("name", "timestamp", "temp")

result_df.show()

Page 28: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 29

DataFrames:

� Motivation: Wissen über Strukturen hat viele Vorteile

� Einfachheit: Einfache API für strukturierte Datenformate wie relationale Tabellen, CSV, JSON etc.

▸ SQL-ähnliche Transformationen in DataFrame API

▸ SQL-Zugriff auf DataFrames mit SparkSQL

▸ Unterstützung verschiedener DSLs (Domain Specific Languages)

� Effiziente Serialisierung und Speicherorganisation

▸ Bei Serialisierung von RDDs enthält jedes Element sein eigenes Schema, bei DataFrames nicht erforderlich

▸ Datentransfers zwischen Knoten deutlich effizienter realisierbar

� Bessere Optimierungsmöglichkeiten (Catalyst Optimizer)

▸ Generische Abstraktionsebene für Anfrage-Optimierung

Page 29: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 31

weather

HDFS file

Datasource

project

join

filter

stations

JDBC

Datasource weatherHDFS file

Datasource

project

join

stationsJDBC

Datasource

project

filter

project

filter

Nicht-optimierter Plan Optimierter Plan

Spark SQL Optimizer: Filter Push-Down

PredicatePushdown

temp > 33AND

state = 'By'

temp > 33 state = 'By'

Page 30: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 32

Spark SQL

� Unterstützung aller 99 TPC-DS-Anfragen

▸ Subqueries

▸ With-Klausel

▸ Left, Right, Outer Join

� OLAP Erweiterungen

▸ SQL 2003: Grouping, Windowing (Partition By …)

▸ Crosstab: Explode, Pivot….

� Zusätzliche Funktionen

▸ User-Defined Functions

▸ Geschachtelte Datentypen (Map, Array, StructFiled)

Page 31: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 33

MapReduce/Tez

Hive

Spark SQL vs. Hive

HDFS

HiveMetaStore

SQL Processor

Spark

DistributedSQL Engine

RDD/DataFrame

Hive on Spark

Page 32: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 34

Spark als ETL Engine

DWHRDBMS

Data LakeHadoop, NoSQL

Files SQL and NoSQL Databases Data Streams

RDD

Data Sources API

ParquetJSONCSV Hive JDBC MongoDB Cassandra … Kafka

DataFrame + Spark SQL

Page 33: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 35

Spark SQL als ETL Engine: Live Demo

Page 34: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 36

Agenda

Apache Hadoop vs. Apache Spark

Schweizer Taschenmesser für Big Data

Verteilte Verarbeitung mit RDDs

DataFrames und Spark SQL

Streaming und Machine Learning

Fazit

Page 35: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 37

Batch vs. Stream

Clickstream

Transactions

Machine Logs

Sensor Data

Data Producers Batches of Data Batch Processing

Clickstream

Transactions

Machine Logs

Sensor Data

Stream Processing Streams of Data

Page 36: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 38

Streaming – Continuous / Repeated Queries

� Wie viele Leute waren in den letzten 5 Minuten auf meiner

Web-Seite?

� Wieviele Systemfehler sind in der letzten halben Stunde

aufgetreten?

� Wie viele Requests sind pro IP-Adresse in der letzten Minute

aufgetreten?

� Was ist der Durchschnittswert der Temperatur-Sensoren pro

Maschine in den letzten zwei Minuten?

Page 37: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 39

Static Data

Continuous Applications

Continuous Data Processing

NoSQLHDFS RDBMS

Data Streams

Batches of Data

Read & Join with stream and batch

Write Output

Real-time Dashboard

Event Processing

Real-time ETLReal-time

ML

Event-basedApplication(Fraud Detection, Alert, Recommendation, …)

Dashboard

Database

Based on: https://databricks.com/blog/2016/07/28/continuous-applications-evolving-streaming-in-apache-spark-2-0.html

Page 38: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 40

Spark Streaming

Micro Batchesgemäß Zeitfenster(Trigger Intervall)

Spark Streaming• RDD-basiert• kein Exactly-Once• Batch-Time Windows

Kafka

Streams

Structured Streaming• seit Version 2.0 (Alpha)• DataFrame-basiert• API identisch zu Batch-API• Event-Time-Windows• End-to-End Exactly-Once

durch WAL und Checkpoints

Infinite DataFrames bzw.

Unbounded Tables

Page 39: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 41

Structured Streaming: DataFrame API

# Define DataFrame as a streamevents_stream_df = \spark.readStream \

.format("json") \ # or parquet, kafka, …

.option(…) \ # format specific options

.schema(my_schema) \ # required

.load("path/to/data")

# Define transformationsoutput_df = events_stream_df.select(…).join(…)

# Start processing stream in 2 seconds microbatchesoutput_df.writeStream \

.trigger(processingTime="2 seconds") \

.format("parquet") \

.start("path/to/write")

https://databricks.com/blog/2017/02/23/working-complex-data-formats-structured-streaming-apache-spark-2-1.htmlhttps://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#creating-streaming-dataframes-and-streaming-datasets

Page 40: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 42

Input

SourceSink

Structured Streaming

� Output Modes (writeStream)

▸ Append: Nur an Result-Table neu angefügte Sätze werden geschrieben(für Einzelsatzverarbeitung ohne Aggregation)

▸ Complete: Vollständige Result-Table wird geschrieben (für Aggregationen)

▸ Update: Nur durch letzten Microbatch geänderte Sätze werden geschrieben(mit und ohne Aggregation möglich)

Spark StreamingKafkaFileSocket….

FileForeachConsoleMemory….

readStream writeStream

ResultTable

Page 41: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 43

Probleme in verteilten Streaming-Systemen

� Exactly-Once

vs. At-most/At-least Once

� Late Data / Out of Order

� Latency

� Usability of API

StreamingServer

StreamingServer

StreamingServer

Streaming Cluster

Page 42: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 44

Fehlertoleranz

� Voraussetzungen für Exactly Once

▸ Alle Sources und Sinks sowie die Execution Engine müssen den Verarbeitungsfortschritt protokollieren

▸ Funktioniert nur mit Sources, die welche eine Leseposition mitführen (Kafka Offsets, Kinesis Sequence Numbers)

▸ Engine nutzt Checkpoints und Write-Ahead-Log

▸ Sinks müssen idempotent für Re-Processing nach Fehler sein.

� Behandlung verspäteter Daten mit Watermarks

▸ Structured Streaming puffert Daten eines Zeitfensters, so dass verspätete Datensätze korrekt verarbeitet werden

▸ Watermark ("allowed lateness": definiert den bisher erreichten Zeitpegel, z.B. "aktueller Zeitpunkt – 10 Minuten"; alles davor gilt als abgeschlossen.

https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#handling-late-data-and-watermarking

Page 43: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 45

Trigger

� Mögliche Trigger

▸ Verarbeitungszeit (Microbatch): z.B. 1 Minute

▸ Eventzahl: Alle 10 Events

▸ Spezielle Events: Dateiende, Flush, vorausgehendes Event

▸ Kombination: mindestens nach 1 Minute oder nach 10 Events

� Trigger in Spark: Nur Verarbeitungszeit

Page 44: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 46

Spark Machine Learning

� MLlib – Machine Learning Library

▸ spark.mllib: RDD-basiert (Wartungsmodus, läuft aus)

▸ spark.ml: DataFrame-basiert, Basis für zukünftige Entwicklung

Abb.: Fiedler, Albrecht: Machine Learning mit Apache Spark, iX 5/2017

Page 45: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 47

Spark Machine Learning

� Feature Extraction, Transformation

▸ Extract: TF-IDF, Word2Vec

▸ Transform: Tokenizer, n-gram, PCA, Scaling, Bucketing, …

� Verfügbare Algorithmen (Auszug)

▸ Regression

▸ Decision Tree, Random Fores

▸ Multilayer Perceptron

▸ Naive Bayes

▸ K-Means

▸ Gaussion Mixture Model

Page 46: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 48

Agenda

Apache Hadoop vs. Apache Spark

Schweizer Taschenmesser für Big Data

Verteilte Verarbeitung mit RDDs

DataFrames und Spark SQL

Streaming und Machine Learning

Fazit

Page 47: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 50

Big Data Architektur mit Spark

Storage and

Processing

Layer

Data

Analytics

Layer

Data

Ingestion

Layer

Spark Core

DWHRDBMS

Data LakeHadoop, NoSQL

Spark SQLSpark

Streaming

Graph

Analytics

Machine

Learning

Scala Java Python R

DataFrame / Dataset API

RDD API

Data Sources API

ParquetJSONCSV Hive JDBC MongoDB Cassandra …

ReportingNear Real-time

Processing Machine LearningData Discovery

Visual Analytics

Kafka

Files SQL and NoSQL Databases Data Streams

Page 48: Einfuehrung in Apache Spark

Prof. Dr. Jens Albrecht Einführung in Apache Spark 51

Bewertung

� Stärken

▸ Performance durch In-Memory und SQL-ähnliche Anfrageoptimierung

▸ Effiziente Entwicklung durch mächtige API (identisch für Scala, Java, Python)

▸ Machine Learning, interaktive Abfragen

▸ Einheitliches System für Batch- und Stream-Processing

▸ Viele Schnittstellen zu kommerziellen und Open-Source-Produkten

▸ Aktuell größte Aufmerksamkeit in Open Source Community

� Grenzen

▸ interaktive Performance nicht vergleichbar mit In-Memory-Datenbanken

▸ Mittlere Latenz bei Streaming aufgrund Micro-Batching

▸ Benötigt viele Ressourcen im Cluster

� Zukunftssicherheit

▸ APIs werden stabiler

▸ Entwicklung durch Databricks auf längere Zeit gesichert