42
Adil Oulghard Apache Beam Master de Recherche en Informatique et Télécommunications (MIT) Semestre 3 Encadrant : Pr. AIT LAHCEN Ayoub

Apache Beam

Embed Size (px)

Citation preview

Page 1: Apache Beam

Adil Oulghard

Apache Beam

Master de Recherche en Informatique et Télécommunications (MIT) Semestre 3

Encadrant :Pr. AIT LAHCEN Ayoub

Adil
Voir les notes concernant la presentation dans les commenatires
Page 2: Apache Beam

Données infinis et non-ordonnés

Apache Beam (incubation)

What, Where, When, How

Plan

Conclusion

2

4

1

3

5 Démo (WordCount)

Page 3: Apache Beam

Données infinis et non-ordonnés1

Page 4: Apache Beam

Objectifs:

le score total par équipe

https://commons.wikimedia.org/wiki/File:Globe_centered_in_the_Atlantic_Ocean_(green_and_grey_globe_scheme).svg

Page 5: Apache Beam

Événements de jeux mobiles

• User Id• Team ID• Score• Event time

Page 6: Apache Beam

… Données Infini...

9:008:00 14:00

13:00

12:00

11:00

10:00

Page 7: Apache Beam

… Avec des retards.

9:008:00 14:00

13:00

12:00

11:00

10:00

8:00

8:008:00

Page 8: Apache Beam

1 + 1 = 2Completene

ssLatency Cost

$$$

Streaming ou Batch ?

Pourquoi pas les deux ?

Page 9: Apache Beam

Apache Beam (incubation)2

Page 10: Apache Beam

Apache Beam estun modèle de programmation

unifiéoffre des pipelines Portables

Page 11: Apache Beam

1. Le Modèle de Beam:What / Where / When / How

2. SDKs pour l’ecriture des pipelines:• Java• Python

3. Exécuteurs (Runners)pour des traitements distribués :• Apache Flink

(local/clusters)• Apache Spark

(local/clusters)• Apache Apex

(local/clusters)• Google Cloud Dataflow

(clusters)

C’est Quoi Apache Beam?

Beam Model: Fn Runners

Apache Flink

Apache Spark

Beam Model: Pipeline Construction

OtherLanguagesBeam Java Beam

Python

Execution Execution

Google Cloud

Dataflow

Execution

Page 12: Apache Beam

C’est quoi un Pipeline ?

PCollection

PTransforms

• Graphe de transformations

• Peut inclure plusieurs entrés et produire plusieurs sorties.

Page 13: Apache Beam

Reality

Event Time vs Processing TimeP

roce

ssin

g Ti

me

Event Time

Ideal

Skew (écart)

Page 14: Apache Beam

What, Where, When, and How3

Page 15: Apache Beam

What are you computing?[Transformations]

Where in event time?[Fenêtrage]

When in processing time?[Trigger,Watermark]

How do refinements relate?[Accumulation et retrait]

Page 16: Apache Beam

What are you computing?

What Where When

How

Element-WiseParDo (Parallel Do)

MapElements …

AggregatingGroupByKey

Combine

Composite

Map Reduce

Page 17: Apache Beam

What: Calcule des sommes entières// Collection des données brutes (user,team,score)PCollection<String> brut = IO.read(...);

// Element-wise transformation vers paires team/score PCollection<KV<String, Integer>> input =

brut.apply(ParDo.of(new ParseFn());

// Composite transformation contient une agrégationPCollection<KV<String, Integer>> scores =

input.apply(Sum.integersPerKey());What Where When

How

Page 18: Apache Beam

What: Calcule des sommes entières

What Where When

How

Page 19: Apache Beam

What: Calcule des sommes entières (Batch)

What Where When

How

Page 20: Apache Beam

Fenêtrage diviser les données en des morceau finis basé sur l’event time.

Souvent requis pour effectuer des agrégations sur des données illimitées

Where in event time?

What Where When

How

(Fixé) Fixed (Glissant) Sliding

1 2 3

54

Sessions

2

431

Key 2

Key 1

Key 3

Temps

1 2 3 4

Page 21: Apache Beam

Where: Fenêtre fixé 2-Minutes

What Where When

How

PCollection<KV<String, Integer>> scores = input .apply(Window.into(FixedWindows.of(Minutes(2))) .apply(Sum.integersPerKey());

Page 22: Apache Beam

Where: Fenêtre fixé 2-Minutes

What Where When

How

Page 23: Apache Beam

When in processing time?

What Where When

How

• Triggers controles quand produit les résultats.

• Triggers sont relativement liée à watermark.

• Watermark = retard accepter

Pro

cess

ing

Tim

e

Event Time

~Watermark

Ideal

Skew

Reality

Page 24: Apache Beam

When: Trigger basé sur le watermark

What Where When

How

PCollection<KV<String, Integer>> scores = input .apply(Window.into(FixedWindows.of(Minutes(2)) .triggering(AtWatermark())) .apply(Sum.integersPerKey());

Page 25: Apache Beam

When: Trigger basé sur le watermark (Streaming)

What Where When

How

Page 26: Apache Beam

When: Early and Late Firings

What Where When

How

PCollection<KV<String, Integer>> scores = input .apply(Window.into(FixedWindows.of(Minutes(2)) .triggering(AtWatermark() .withEarlyFirings(AtPeriod(Minutes(1))) .withLateFirings(AtCount(1)))) .apply(Sum.integersPerKey());

Page 27: Apache Beam

When: Early and Late Firings

What Where When

How

Page 28: Apache Beam

How do refinements relate?

What Where When

How

• Comment accumuler plusieurs sorties par fenêtre?

Firing Elements

Avant Watermark [3]

Watermark [5, 1]

Aprés Watermark [2]

Dernier observé

Totale observé

Acc. & Retraction

3

9, -3

11, -9

11

11

Page 29: Apache Beam

How: Add Newest, Remove Previous

What Where When

How

PCollection<KV<String, Integer>> scores = input .apply(Window.into(FixedWindows.of(Minutes(2)) .triggering(AtWatermark() .withEarlyFirings(AtPeriod(Minutes(1))) .withLateFirings(AtCount(1))) .accumulatingAndRetractingFiredPanes()) .apply(Sum.integersPerKey());

Page 30: Apache Beam

How: Accumulation et Retraction

What Where When

How

Page 31: Apache Beam

Conclusion4

Page 32: Apache Beam

FlexibilitéModularité

What / Where / When / How

Page 33: Apache Beam

1. Batch Classique 2. Batch avec Fenêtre fixé

3. Streaming

5. Streaming avec Retractions

4. Streaming avec tôt résultats + Données

en retardWhat Where When

How

Page 34: Apache Beam

FlexibilitéModularité

What / Where / When / How

Page 35: Apache Beam

PCollection<KV<String, Integer>> scores = input .apply(Sum.integersPerKey());

PCollection<KV<String, Integer>> scores = input .apply(Window.into(FixedWindows.of(Minutes(2)) .triggering(AtWatermark() .withEarlyFirings(AtPeriod(Minutes(1))) .withLateFirings(AtCount(1))) .accumulatingAndRetractingFiredPanes()) .apply(Sum.integersPerKey());

PCollection<KV<String, Integer>> scores = input .apply(Window.into(FixedWindows.of(Minutes(2)) .triggering(AtWatermark() .withEarlyFirings(AtPeriod(Minutes(1))) .withLateFirings(AtCount(1))) .apply(Sum.integersPerKey());

PCollection<KV<String, Integer>> scores = input .apply(Window.into(FixedWindows.of(Minutes(2)) .triggering(AtWatermark())) .apply(Sum.integersPerKey());

PCollection<KV<String, Integer>> scores = input .apply(Window.into(FixedWindows.of(Minutes(2))) .apply(Sum.integersPerKey());

1. Batch Classique 2. Batch avec Fenêtre fixé

3. Streaming

5. Streaming avec Retractions

4. Streaming avec tôt résultats + Données

en retard

Page 36: Apache Beam

1. Utilisateurs finaux: qui veulent écrire des pipelines ou des bibliothèques de transformations dans un langage familier.

2. Développeurs d’SDK : qui veulent mettre le concept de beam dans un nouveau langage.

3. Développeurs du Runner : qui ont une envirenement de traitements distribués et veulent supporter les pipelines de Beam

Plusieurs categories des utilisateurs

Beam Model: Fn Runners

Apache Flink

Apache Spark

Beam Model: Pipeline Construction

OtherLanguagesBeam Java Beam

Python

Execution Execution

Google Cloud

Dataflow

Execution

Page 37: Apache Beam

Démo (WordCount)4

Page 38: Apache Beam

Pipeline de Word Count

TextIO.Read Transform

TextIO.WriteTransform

Page 39: Apache Beam

Etapes d’exécution •Télécharger et installer Java Develepment Kit •Télécharger et Installer Apache Maven: site http://maven.apache.org/download.cgi•Mettre les variables d'envirenment : export M2HOME=/Repertoire vers Maven/apache-maven-3.3.9 export PATH=/Repertoire vers Maven/apache-maven-3.3.9/bin:${PATH} •Appliquer le changement : source ~/.bashrc •Télécharger le code de WordCount de site

https://repository.apache.org/content/groups/snapshots par la commande :mvn archetype:generate -DarchetypeRepository=https://repository.apache.org/content/groups/snapshots -DarchetypeGroupId=org.apache.beam -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples -DarchetypeVersion=LATEST -DgroupId=org.example -DartifactId=word-count-beam -Dversion="0.1" -Dpackage=org.apache.beam.examples -DinteractiveMode=false

Page 40: Apache Beam

Exécuter Pipeline de WordCount sur les différents runner1) Sur DirectRunner mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount -Dexec.args="--inputFile=/home/hadmin/words.txt --output=DirectWords" -Pdirect-runner2) Sur FlinkRunnermvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount -Dexec.args="--runner=FlinkRunner --inputFile=/home/hadmin/words.txt --output=Flinkwords" -Pflink-runner 3) Sur SparkRunnermvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount -Dexec.args="--runner=SparkRunner --inputFile=/home/hadmin/words.txt --output=SparkCounts" -Pspark-runner4) Sur ApexRunnermvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount -Dexec.args="--inputFile=/home/hadmin/words.txt --output=ApexWords --runner=ApexRunner" -Papex-runner

Page 41: Apache Beam

Merci!

Page 42: Apache Beam