cloud data management - uni-leipzig.deteil2).pdf · filter – behält elemente im stream für die...

50
Universität Leipzig, Institut für Informatik http://dbs.uni-leipzig.de Cloud Data Management Kapitel 7: Big Data Streaming -Apache Flink- (Teil 2) Dr. Eric Peukert Wintersemester 2017

Upload: others

Post on 22-May-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 2: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

CDM WS 17/18, Dr. Eric Peukert

Integration von Batch and Stream ProcessingFehlertoleranz über RDDsSkalierbarkeit auf hunderte Knoten

Spark - Streaming

SparkR(R on Spark)

Page 3: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 4: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 5: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 6: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 7: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 8: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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/

Page 9: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 10: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 11: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 12: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 13: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

CDM WS 17/18, Dr. Eric Peukert

Apache Flink für verschiedene Workloads

13

Flink

Machine Learning

Graph Analyse

Stream Processing

Batch Processing

Page 14: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

CDM WS 17/18, Dr. Eric Peukert

Flink Philosophy

14https://www.slideshare.net/KostasTzoumas/flink-internals

Page 15: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 16: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 17: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

CDM WS 17/18, Dr. Eric Peukert

Pipelined Streaming Engine & DAG

17

Job Manager

Worker1 Worker2

Worker4Worker5

Page 18: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 19: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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)

Page 20: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 21: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 22: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

CDM WS 17/18, Dr. Eric Peukert

Flink –Beispiel (Streaming)

22

Input

Transformations

Output

Page 23: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 24: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 25: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 26: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 27: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 28: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 29: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 30: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 31: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

CDM WS 17/18, Dr. Eric Peukert

Start eines Flink-Prozesses

31https://cwiki.apache.org/confluence/display/FLINK/Akka+and+Actors

Page 32: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 33: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 34: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 35: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 36: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 37: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 38: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 39: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

CDM WS 17/18, Dr. Eric Peukert

map, flatMap, filter, reducereduceGroupjoin, coGroup, aggregate, cross, project, distinctunion, iterate, iterateDelta...

Transformation Operatoren der DataSet API

39

Page 40: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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));

}}

}

Page 41: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 42: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 43: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 44: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 45: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 46: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 47: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

CDM WS 17/18, Dr. Eric Peukert

Table API Architecture

47https://flink.apache.org/news/2016/05/24/stream-sql.html

Page 48: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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

Page 49: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

CDM WS 17/18, Dr. Eric Peukert

Zusammenfassung

49

Page 50: Cloud Data Management - uni-leipzig.deTeil2).pdf · Filter – behält Elemente im Stream für die eine Bedingung gilt KeyBy – partitioniert den Strom in nicht überlappende Partitionen

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