Einfuehrung in Apache Spark
-
Upload
jens-albrecht -
Category
Business
-
view
315 -
download
0
Transcript of Einfuehrung in Apache Spark
Prof. Dr. Jens Albrecht
TH Nürnberg
Einführung in
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
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
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
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
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, …
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, …
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
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
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
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
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
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
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
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
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
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()
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
…
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
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
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
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.
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
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
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')
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')
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()
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
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'
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)
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
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
Prof. Dr. Jens Albrecht Einführung in Apache Spark 35
Spark SQL als ETL Engine: Live Demo
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
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
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?
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
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
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
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
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
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
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
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
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
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
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
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