Upload
adil-oulghard
View
148
Download
1
Embed Size (px)
Citation preview
Adil Oulghard
Apache Beam
Master de Recherche en Informatique et Télécommunications (MIT) Semestre 3
Encadrant :Pr. AIT LAHCEN Ayoub
Données infinis et non-ordonnés
Apache Beam (incubation)
What, Where, When, How
Plan
Conclusion
2
4
1
3
5 Démo (WordCount)
Données infinis et non-ordonnés1
Objectifs:
le score total par équipe
https://commons.wikimedia.org/wiki/File:Globe_centered_in_the_Atlantic_Ocean_(green_and_grey_globe_scheme).svg
Événements de jeux mobiles
• User Id• Team ID• Score• Event time
… Données Infini...
9:008:00 14:00
13:00
12:00
11:00
10:00
… Avec des retards.
9:008:00 14:00
13:00
12:00
11:00
10:00
8:00
8:008:00
1 + 1 = 2Completene
ssLatency Cost
$$$
Streaming ou Batch ?
Pourquoi pas les deux ?
Apache Beam (incubation)2
Apache Beam estun modèle de programmation
unifiéoffre des pipelines Portables
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
C’est quoi un Pipeline ?
PCollection
PTransforms
• Graphe de transformations
• Peut inclure plusieurs entrés et produire plusieurs sorties.
Reality
Event Time vs Processing TimeP
roce
ssin
g Ti
me
Event Time
Ideal
Skew (écart)
What, Where, When, and How3
What are you computing?[Transformations]
Where in event time?[Fenêtrage]
When in processing time?[Trigger,Watermark]
How do refinements relate?[Accumulation et retrait]
What are you computing?
What Where When
How
Element-WiseParDo (Parallel Do)
MapElements …
AggregatingGroupByKey
Combine
Composite
Map Reduce
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
What: Calcule des sommes entières
What Where When
How
What: Calcule des sommes entières (Batch)
What Where When
How
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
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());
Where: Fenêtre fixé 2-Minutes
What Where When
How
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
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());
When: Trigger basé sur le watermark (Streaming)
What Where When
How
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());
When: Early and Late Firings
What Where When
How
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
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());
How: Accumulation et Retraction
What Where When
How
Conclusion4
FlexibilitéModularité
What / Where / When / How
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
FlexibilitéModularité
What / Where / When / How
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
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
Démo (WordCount)4
Pipeline de Word Count
TextIO.Read Transform
TextIO.WriteTransform
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
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
Merci!