cloud data management - uni-leipzig.deteil2).pdf · filter – behält elemente im stream für die...
TRANSCRIPT
Universität Leipzig, Institut für Informatikhttp://dbs.uni-leipzig.de
Cloud Data ManagementKapitel 7: Big Data Streaming-Apache Flink-(Teil 2)
Dr. Eric Peukert Wintersemester 2017
CDM WS 17/18, Dr. Eric Peukert
Integration von Batch and Stream ProcessingFehlertoleranz über RDDsSkalierbarkeit auf hunderte Knoten
Spark - Streaming
SparkR(R on Spark)
CDM WS 17/18, Dr. Eric Peukert
Erweiterung der Spark API um Operatoren zur StromverarbeitungTeilen des Datenstroms in sog. Micro-Batches (z.B. 10s)Jedes Micro-Batch als RDDs verarbeitenErgebnisbatches als Ergebnis zurückliefern
Spark Streaming (2)
3
Spark Streaming
Spark Engine
InputDatenstrom
OutputDatenstrom
CDM WS 17/18, Dr. Eric Peukert
Lesen von Strömen aus verschiedenen QuellenAbstraktion DStream bestehend aus einer Menge von Micro-Batches -> RDDsStromverarbeitung über Operatoren
Zustandsfreimap, filter, reduce, cogroup
Zustandsbehaftetzeit-basierte Fenster, inkrementelle Aggregation
Ströme können mit existierenden RDDs kombiniert werden über transform
FehlertoleranzExactly-Once-Semantik – über checkpoints d.h. asynchrone Replikation von StateRDDs
Spark Streaming API
4https://dzone.com/articles/spark-streaming-1https://stanford.edu/~rezab/sparkclass/slides/td_streaming.pdf
CDM WS 17/18, Dr. Eric Peukert
Erstellung eines StreamingContext ssc = StreamingContext(sc,1)
Erstellung eines Discretized Stream (DStream)lines = ssc.socketTextStream(localhost,9999)
RDD-ähnliche Operationen:val words = lines.flatMap(_.split(" "))val pairs = words.map(word => (word, 1))val wordCounts = pairs.reduceByKey(_ + _)
Spark Streaming Beispiel
5http://spark.apache.org/docs/1.2.2/streaming-programming-guide.html
CDM WS 17/18, Dr. Eric Peukert
Sliding Windowdefiniert durch Länge und Intervallwindow(), countByWindow(), reduceByWindow()..
// Reduce last 30 seconds of data, every 10 secondsval windowedWordCounts = pairs.reduceByKeyAndWindow((a:Int,b:Int) => (a + b), Seconds(30), Seconds(10))
Windows
6http://spark.apache.org/docs/1.2.2/streaming-programming-guide.html
CDM WS 17/18, Dr. Eric Peukert
RDDs Lineage Information kann für Recovery genutzt werden wenn die RDDs auf fehlertolerantem Storage liegen (z.B. HDFS, S3) -> gilt nicht für StreamsEmpfangene Daten werden repliziert über mehrere Spark Executors auf Worker Nodes (replication factor 2)
Falls Daten noch nicht repliziert waren müssen sie von der Quelle nochmals gesendet werden
Ausfall Worker Node / Driver NodeReliable Receivers (erwartet Bestätitgung wenn Daten repliziert sind)
nicht replizierte Daten werden nochmals gesendetUnreliable Receivers -> führen zu Datenverlust
Fault Tolerance in Spark Streaming
7http://spark.apache.org/docs/1.2.2/streaming-programming-guide.html
CDM WS 17/18, Dr. Eric Peukert
1. Receiver wird als (mehrere parallele) Tasks gestartetempfängt Daten und speichertdiese im Memory (über den Block Manager) 2. Blöcke werden repliziert an andere Worker, meldet dies als Blockreports an StreamingContextJeder Batch wird als RDD behandelt und der SparkContext startet die auf dem RDD definierten Operationen in den Executors
Spark Streaming Architektur
8
Executor
Executor
Driver
ReceiverStreamingContext
SparkContext
ReplicateBlocks
InputSreamReportBlocks
Jobs
Tasktoprocessblocks
Driver
Worker
https://www.sigmoid.com/spark-streaming-internals/
Universität Leipzig, Institut für Informatikhttp://dbs.uni-leipzig.de
Cloud Data ManagementKapitel 7: Big Data Streaming-Apache Flink-(Teil 2)
Dr. Eric Peukert Wintersemester 2017
CDM WS 17/18, Dr. Eric Peukert
entstanden aus Forschungsprojekt StratosphereErweiterungen des MapReduce Paradigmas um Iterationen und StreamingAnwendung traditioneller Datenbankkonzepte + Iterationen
seit 2014 OpenSource „Apache Flink“ – Top Level bereits 2014
Apache Flink
10
CDM WS 17/18, Dr. Eric Peukert
Apache Flink Motivation
11https://www.researchgate.net/publication/304536933_Apache_Flink_in_current_research
DB-Technology MapReduce Technology
Flink Konzepte
DeklarativitätAnfrageoptimierung
• Skalierbarkeit• User-definedfunctions• KomplexeDatentypen• Schemaonread
• Iterationen• Datenflüsse• NativesStreaming• WeitereAPIs
CDM WS 17/18, Dr. Eric Peukert
Verteilte Streaming Dataflow Engineparallele Ausführung von Dataflows im ClusterProgrammierabstraktionen: DataSet und DataStream
Architektur
12https://www.researchgate.net/publication/304536933_Apache_Flink_in_current_research
CDM WS 17/18, Dr. Eric Peukert
Apache Flink für verschiedene Workloads
13
Flink
Machine Learning
Graph Analyse
Stream Processing
Batch Processing
CDM WS 17/18, Dr. Eric Peukert
Flink Philosophy
14https://www.slideshare.net/KostasTzoumas/flink-internals
CDM WS 17/18, Dr. Eric Peukert
JobGraphDirected Acyclic Graph parallelisierter Operationen(mit Zyklen für Iterationen)Operatoren werden übersetzt in parallele Entitäten die Partitionen von Zwischenergebnissen oder Input-files prozessieren -> datenparallel
Im Gegensatz zu Hadoop -> keine zwei individuellen Phasen (Map und Reduce) -> sondern parallele AbarbeitungErgebnisse eines Operators werden direkt an den nächsten weitergeleitet -> Pipelined Execution
Flink Programme
15
CDM WS 17/18, Dr. Eric Peukert
Flink Programme werden zu Streaming Dataflows übersetzt (bestehend aus Streams, Transformations, Source und Sink Operatoren)Streams
potentiell unendlicher Fluß von Data RecordsTransformation Operators
erhalten ein oder mehrere Streams als Input und generieren Streams als Output
Streams und Transformations
16
Source map keyBy Sink
Streams(IntermediateStreams)
ZielOperatorenQuelloperatoren Transformationen
CDM WS 17/18, Dr. Eric Peukert
Pipelined Streaming Engine & DAG
17
Job Manager
Worker1 Worker2
Worker4Worker5
CDM WS 17/18, Dr. Eric Peukert
Map 1:1FlatMap 1:nFilter – behält Elemente im Stream für die eine Bedingung giltKeyBy – partitioniert den Strom in nicht überlappende Partitionenà erzeugt KeyedStreamReduce -> kombiniert das aktuelle Element mit dem letzten Ergebnis des Reduce (Erzeugt z.B. einen Strom partieller Summen) Window – erzeugt Fenster auf KeyedStreamWindow Reduce, Join, CoGroupAggregations (sum, min..) – auf Streams und WindowedStreamsIterationen... und weitere
Operatoren
18
CDM WS 17/18, Dr. Eric Peukert
Tumbling Window (zeitbasiert)
Sliding Window (zeitbasiert)
Fester in Flink
19https://flink.apache.org/news/2015/12/04/Introducing-windows.html
val vehicleCnts: DataStream[(Int, Int)] = ...val tumblingCnts: DataStream[(Int, Int)] = vehicleCnts.keyBy(0).timeWindow(Time.minutes(1)).sum(1)
val slidingCnts: DataStream[(Int, Int)] = vehicleCnts.keyBy(0).timeWindow(Time.minutes(1), Time.seconds(30)).sum(1)
CDM WS 17/18, Dr. Eric Peukert
Problem beim schnellen Verarbeiten von Records mit sehr alter Event-Time (aus vorgelagertem Puffer z.B. Kafka)Messen von Fortschritt anhand Watermark
Watermarks sind periodische Marker und fließen mit dem Datenstrom, tragen Zeitstempel t zur Mitteilung der Event-Time, d.h. danach kommen keine weiteren Events deren Event-Time kleiner istGeneriert in der Source oder kurz danach
Fenster in Flink & Watermarks
20https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/event_time.html
CDM WS 17/18, Dr. Eric Peukert
Operatoren aktualisieren ihre Event-Time und senden Watermark weiterSpäte Tupel werden verworfen (jedoch kann eine „Allowed Lateness“ + Trigger definiert werden)
Watermark
21https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/event_time.html
CDM WS 17/18, Dr. Eric Peukert
Flink –Beispiel (Streaming)
22
Input
Transformations
Output
CDM WS 17/18, Dr. Eric Peukert
Word Count – in Flink (Scala)
23https://ci.apache.org/projects/flink/flink-docs-stable/dev/datastream_api.html#task-chaining-and-resource-groups
CDM WS 17/18, Dr. Eric Peukert
Streams zur Laufzeit bestehen aus Stream PartitionsTransformationen (mit Zustand)- zur Laufzeit durch mehere Operator Subtasks (pot. verteilt und unabhängig) ausgeführt
Paralleler Datenfluß
24
Source map keyBy Sink
Source[1] map() [1] keyBy[1]
Sink
Source[2] map() [2] keyBy[2]
https://ci.apache.org/projects/flink/flink-docs-stable/concepts/programming-model.html
StreamPartitions OperatorSubtasks
parallelism=2 parallelism=1
CDM WS 17/18, Dr. Eric Peukert
Flink verkettet Operator Subtasksjeder Task wird durch einen Thread ausgeführt
Verkettung von Operator Subtasks
25
Source map keyBy Sink
Source[1] map() [1] keyBy[1]
Sink
Source[2] map() [2] keyBy[2]
OperatorSubtasks
parallism=2
https://ci.apache.org/projects/flink/flink-docs-stable/concepts/programming-model.html
CDM WS 17/18, Dr. Eric Peukert
One-to-one (or forwarding)erhält die Partitionierung und Reihenfolge der Elemente (vergleichbar zu Spark – narrow dependencies)
Redistribution patternverändern die Partitionierung von StreamsReihenfolge nur zwischen Paaren von Subtasks erhalten (Parallelität kann die weitere Reihenfolge im Stream verändern)
Verkettung von Operator Subtasks(2)
26
Source[1] map() [1] keyBy[1]
Sink
Source[2] map() [2] keyBy[2]
parallism=2
https://ci.apache.org/projects/flink/flink-docs-stable/concepts/programming-model.html
CDM WS 17/18, Dr. Eric Peukert
Master/Worker PatternKommunikation und Failure-Detection überAkka/Akka DeathWatch
Flink Runtime
27https://ci.apache.org/projects/flink/flink-docs-release-1.0/internals/general_arch.html
CDM WS 17/18, Dr. Eric Peukert
JobManager (Master)koordiniert verteilte AusführungScheduling von Tasks, Koordination von Checkpoints, Koordination von RecoveryHigh-Availability -> Mehrere JobManager (leader und standby)
TaskManager (Workers)führen Tasks aus (Subtasks)puffern und tauschen Data Streams aus
Ressource ManagementÜber YARN, Mesos oder Standalone werden JobManager und TaskManager gestartet
Master/Worker Pattern in Flink
28
CDM WS 17/18, Dr. Eric Peukert
Schedule Tasks, Allokieren von Execution-Slots bei Task ManagersStellt Datenlokalität sicherTriggern von CheckpointsRecoveryUnterschiedliche StateBackends möglich
JobManager
29https://ci.apache.org/projects/flink/flink-docs-stable/concepts/runtime.html
CDM WS 17/18, Dr. Eric Peukert
TaskManagmer melden sich beim JobManagerJeder TaskManager ist ein JVM-Prozessführen einen oder mehrere Subtasks in seperaten Threads aussog. Task Slots zeigen an wieviele Tasks ein Worker akzeptiert
Task Manager
30https://ci.apache.org/projects/flink/flink-docs-stable/concepts/runtime.html
CDM WS 17/18, Dr. Eric Peukert
Start eines Flink-Prozesses
31https://cwiki.apache.org/confluence/display/FLINK/Akka+and+Actors
CDM WS 17/18, Dr. Eric Peukert
Kostenbasierter OptimizerEnumerierung von Ausführungsplänen, Auswahl des Plans mit minimalen Kosten (basierend auf Input/Output Statistiken)Operatoren erkennen welche Felder modifiziert werden (Inspection) -> wird ausgenutzt um Reihenfolgend zu vertauschenChaining von Operatoren im Speicher
Flink Optimierung
32
CDM WS 17/18, Dr. Eric Peukert
Optimizer Beispiel (noch aus Stratosphere)
33http://stratosphere.eu/assets/papers/2014-VLDBJ_Stratosphere_Overview.pdf
z.B.SuchenachkonfligierendenAttributzugriffen(überstatischeCode-analyse),nurdasreadsetvonOperatorendarfüberlappen
CDM WS 17/18, Dr. Eric Peukert
Materialisierung von Zwischenergebnissen/ Fehlertoleranz über CheckpointingAutmatische Selektion des Operators an dem ein Checkpoint gespeichert wird (Ephemeral Checkpointing)Garantie-Levels
at least once vs. exactly onceVerschiedene Restart Strategien
Fixed Delay, Failure Rate
Fehlertoleranz in Flink
34
CDM WS 17/18, Dr. Eric Peukert
Neue Tasks Deployen oder laufende Tasks beendenFlink untersützt das setzen eines Savepoints und Neustart mit veränderter paralellism
Dynamische Skalierung in Flink (Elastizität)
35https://www.slideshare.net/tillrohrmann/dynamic-scaling-how-apache-flink-adapts-to-changing-workloads
CDM WS 17/18, Dr. Eric Peukert
Eigenes Speichermanagementanstatt Java Objects und aufwändiger Garbage CollectionRecords werden als Tuples in Byte Buffer geschrieben und effizient über Memory oder TCP-Verbindungen ausgetauscht
Flink CEPPatternAPI
Weitere Features
36
Pattern<MonitoringEvent, ?> warningPattern = Pattern.<MonitoringEvent>begin("First Event").subtype(TemperatureEvent.class).where(evt -> evt.getTemperature() >= TEMPERATURE_THRESHOLD).next("Second Event").subtype(TemperatureEvent.class).where(evt -> evt.getTemperature() >= TEMPERATURE_THRESHOLD).within(Time.seconds(10));
PatternStream<MonitoringEvent> tempPatternStream = CEP.pattern(inputEventStream.keyBy("rackID"),warningPattern);
DataStream<Alert> alertStream= tempPatternStream.select(new PatternSelectFunction(){...});
https://flink.apache.org/news/2016/04/06/cep-monitoring.html
CDM WS 17/18, Dr. Eric Peukert
Batch ist ein Spezialfall von StreamingBlockierende Operatoren können verwendet werden Im Batch werden keine Checkpoints gespeichert – Recovery wird durch komplettes „Replay“ des Stroms erreicht
Programme werden in einen Ausführungsplan überführt, optimiert und ausgeführt (wie im Streaming)
Batch-Verarbeitung
37
Streaming
Batch
https://ci.apache.org/projects/flink/flink-docs-release-1.4/concepts/programming-model.html
CDM WS 17/18, Dr. Eric Peukert
Vergleichbar zu Spark RDD[String] Wesentlicher Unterschied:
DataSet kann auf verschiedene Arten erstellt bzw. wiederhergestellt werdenähnlich wie ein RDD über seine Vorgänger im Ausführungsplanimplizite Updates möglich über Iterationenmeist nicht vollständig materialisiert (ist im Strom-System nicht nötig)
DataSet<String>
38https://www.slideshare.net/KostasTzoumas/flink-internals
Source map filter Sink
CDM WS 17/18, Dr. Eric Peukert
map, flatMap, filter, reducereduceGroupjoin, coGroup, aggregate, cross, project, distinctunion, iterate, iterateDelta...
Transformation Operatoren der DataSet API
39
CDM WS 17/18, Dr. Eric Peukert
Flink –Beispiel (DataSet API)
40
public class WordCount {public static void main(String[] args) throws Exception {
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<String> text = env.fromElements("Who's there?","I think I hear them. Stand, ho! Who's there?");
DataSet<Tuple2<String, Integer>> wordCounts = text.flatMap(new LineSplitter()).groupBy(0).aggregate(SUM, 1);
wordCounts.print();
env.execute("Word Count Example");}
}
Input
Transformations
Output
public class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {@Overridepublic void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
for (String word : line.split(" ")) {out.collect(new Tuple2<String, Integer>(word, 1));
}}
}
CDM WS 17/18, Dr. Eric Peukert
Native Iterationen – loop innerhalb des Systems im Gegensatz zu MapReduce und SparkIterationen führen kontrollierte Zyklen in DAG ein über eine sog. Step-FunctionBulkIterations vs. DeltaIterations
Iterationen
41http://stratosphere.eu/assets/papers/2014-VLDBJ_Stratosphere_Overview.pdf
CDM WS 17/18, Dr. Eric Peukert
Abstraktionslevels / APIs in Flink
Table APO - Vereinigung von DataSet und DataStream API
42https://ci.apache.org/projects/flink/flink-docs-release-1.4/concepts/programming-model.html
CDM WS 17/18, Dr. Eric Peukert
deklarative Anfragesprache (SQL-like) für relationale Streams und Batch Processing
Relationale Table-Abstraktionkann aus existierenden DataSets oder DataStreams erzeugt werdenTables haben ein SchemaAnwendung von relationalen Operatoren: Selection, Aggregation, JoinAnfragen mit SQL (wenn Tabellen registriert sind)
Relationaler Plan wird optimiert mit Apache Calcite und transformiert in ein DataStream oder DataSet Program
Table API
43
CDM WS 17/18, Dr. Eric Peukert
Select, As, GroupBy, Where, Join (LeftOuter,FullOuter,RightOuter)Union, OrderBy, Limit ...Windows
Table API Operators
44
Table table = input.window([Window w].as("w")) // define window with alias w.groupBy("w") // group the table by window w.select("b.sum") // aggregate
CDM WS 17/18, Dr. Eric Peukert
Table registrieren
DataStream als Tabelle registrieren
Table API
45
StreamExecutionEnvironmentenv= StreamExecutionEnvironment.getExecutionEnvironment();StreamTableEnvironmenttableEnv= TableEnvironment.getTableEnvironment(env);
//registertheDataStreamcustastable"Customers"withfieldsderivedfromthedatastreamtableEnv.registerDataStream("Customers", cust)
//registertheDataStreamordastable"Orders"withfieldsuser,product,andamounttableEnv.registerDataStream("Orders", ord, "user,product,amount");
ExecutionEnvironmentenv= ExecutionEnvironment.getExecutionEnvironment();BatchTableEnvironmenttableEnv= TableEnvironment.getTableEnvironment(env);//convertaDataSetintoaTableTablecustT= tableEnv.toTable(custDs, "name,zipcode").where("zipcode='12345'").select("name")//registertheTablecustTastable"custNames"tableEnv.registerTable("custNames", custT)
https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/table_api.html
CDM WS 17/18, Dr. Eric Peukert
Konzepte hinter Flink TableDynamische Tabellen und Kontinuierliche AnfragenTabellen verändern sich über die Zeit und werden immer wieder angefragt (vergleichbar zu einer materialisierten Sicht)Table wird aus DataSet oder DataStream erstellt und transformiert in einer neue Table über TransformationenWenn eine Table zurück zu einem DataStream oder DataSet transformiert wird:à Übersetzung eines logischen Operatorbaums in ein DataSet/DataStream Programm
Konzepte
46https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/table/streaming.html
CDM WS 17/18, Dr. Eric Peukert
Table API Architecture
47https://flink.apache.org/news/2016/05/24/stream-sql.html
CDM WS 17/18, Dr. Eric Peukert
Inhaltsverzeichnis (vorläufig)
1. Einführung• Cloud Computing• Cloud Data Management
2. Infrastruktur und Dienste• Hardware-Infrastrukur• Software-Infrastruktur• Cloud-Dienste• IaaS, Virtualisierung• OpenStack & Docker
3. Verteilte Dateisysteme• Google File System (GFS)• Hadoop File System (HDFS)
4. MapReduce (MR)• Konzept + Hadoop• Algorithmen in “MR-Form”• YARN / MRv2
5. MapReduce und Datenbanken• SQL und MR• Effiziente Joins in MR• Datenanalyse mit MR• Kopplung von RDBMS mit MR
6. Large-scale Datenanalyse• Apache Spark
7. Data Streaming • Spark Streaming• Apache Flink
CDM WS 17/18, Dr. Eric Peukert
Zusammenfassung
49
CDM WS 17/18, Dr. Eric Peukert
http://asterios.katsifodimos.com/assets/publications/flink-deb.pdfBei Interesse:
http://blog.madhukaraphatak.com/introduction-to-flink-for-spark-developers-flink-vs-spark/
Weitere Quellen
50