2. Prof. Dr. Jens Albrecht Einführung in Apache Spark 3
Hybride BI-/Big-Data-Architektur
AnalyseDatenhaltungDatenquellen
Klassische Datenquellen
OLTP-Systeme
Big-Data-Quellen
Dokumente, Server Logs, Sensor Daten,
Social, Clickstream, GPS,
Business
Intelligence
Enterprise
DWH
Data
Marts
Predictive
Analytics
Operational
Analytics
Explorative
Analyse
Data Lake
3. 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
4. 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
5. 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
7. 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, …
8. 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 HDFS
Schritt
2+3
9. 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
Cache
Tasks
Cluster Manager
Executor
Worker Node
Cache
Tasks
10. 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
11. 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
Java
Python
Scala R
Data Streaming
Graph Processing
SQL
Apache Spark
Machine Learning
12. 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
13. 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
14. 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
15. Prof. Dr. Jens Albrecht Einführung in Apache Spark 16
RDD
Worker Worker Worker Worker
Partition
RDDs
Verteilte Collections:
▸ Alle Operationen werden parallel ausgeführt
Partitionierung
▸ HDFS-Blöcke werden zu Partitionen
16. 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
17. 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()
18. 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
…
19. 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
20. 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
21. 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
22. 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.
23. 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
24. 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
25. 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')
26. 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')
27. 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()
28. 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
29. Prof. Dr. Jens Albrecht Einführung in Apache Spark 31
weather
HDFS file
Datasource
project
join
filter
stations
JDBC
Datasource weather
HDFS file
Datasource
project
join
stations
JDBC
Datasource
project
filter
project
filter
Nicht-optimierter Plan Optimierter Plan
Spark SQL Optimizer: Filter Push-Down
Predicate
Pushdown
temp > 33
AND
state = 'By'
temp > 33 state = 'By'
30. 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)
31. Prof. Dr. Jens Albrecht Einführung in Apache Spark 33
MapReduce/Tez
Hive
Spark SQL vs. Hive
HDFS
Hive
Meta
Store
SQL Processor
Spark
Distributed
SQL Engine
RDD/DataFrame
Hive on Spark
32. 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
33. Prof. Dr. Jens Albrecht Einführung in Apache Spark 35
Spark SQL als ETL Engine: Live Demo
34. 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
35. 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 ProcessingStreams of Data
36. 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?
37. 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 ETL
Real-time
ML
Event-based
Application
(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
38. Prof. Dr. Jens Albrecht Einführung in Apache Spark 40
Spark Streaming
Micro Batches
gemäß 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
40. Prof. Dr. Jens Albrecht Einführung in Apache Spark 42
Input
Source
Sink
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 StreamingKafka
File
Socket
….
File
Foreach
Console
Memory
….
readStream writeStream
Result
Table
41. 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
Streaming
Server
Streaming
Server
Streaming
Server
Streaming Cluster
42. 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
43. 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
44. 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
45. 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
46. 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
47. 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
DWH
RDBMS
Data Lake
Hadoop, NoSQL
Spark SQL
Spark
Streaming
Graph
Analytics
Machine
Learning
Scala Java Python R
DataFrame / Dataset API
RDD API
Data Sources API
ParquetJSONCSV Hive JDBC MongoDB Cassandra …
Reporting
Near Real-time
Processing Machine Learning
Data Discovery
Visual Analytics
Kafka
Files SQL and NoSQL Databases Data Streams
48. 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