SlideShare une entreprise Scribd logo
1  sur  42
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:0013:0012:0011:0010:00
… Avec des retards.
9:008:00 14:0013:0012:0011:0010:00
8:00
8:008:00
1 + 1 = 2
Completeness Latency Cost
$$$
Streaming ou Batch ?
Pourquoi pas les deux ?
Apache Beam (incubation)2
Apache Beam est
un 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
Other
LanguagesBeam 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 Time
ProcessingTime
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-Wise
ParDo (Parallel Do)
MapElements …
Aggregating
GroupByKey
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égation
PCollection<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
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
ProcessingTime
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
retard
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
Other
LanguagesBeam Java
Beam
Python
Execution Execution
Google
Cloud
Dataflow
Execution
Démo (WordCount)4
Pipeline de Word Count
TextIO.Read
Transform
TextIO.Write
Transform
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 M2_HOME=/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 runner
1) Sur DirectRunner
mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount -Dexec.args="--
inputFile=/home/hadmin/words.txt --output=DirectWords" -Pdirect-runner
2) Sur FlinkRunner
mvn 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 SparkRunner
mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount -Dexec.args="--
runner=SparkRunner --inputFile=/home/hadmin/words.txt --output=SparkCounts" -Pspark-runner
4) Sur ApexRunner
mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount -Dexec.args="--
inputFile=/home/hadmin/words.txt --output=ApexWords --runner=ApexRunner" -Papex-runner
Merci!
Apache Beam

Contenu connexe

Tendances

Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Modern Data Stack France
 
Algorithme distribués pour big data saison 2 @DevoxxFR 2016
Algorithme distribués pour big data saison 2 @DevoxxFR 2016Algorithme distribués pour big data saison 2 @DevoxxFR 2016
Algorithme distribués pour big data saison 2 @DevoxxFR 2016Duyhai Doan
 
Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Saïd Bouras
 
Prometheus et kubernetes | AIOS SH
Prometheus et kubernetes | AIOS SHPrometheus et kubernetes | AIOS SH
Prometheus et kubernetes | AIOS SHLaurent AMPLIS
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...MSDEVMTL
 
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Ippon
 
Cassandra Ippevent 20 Juin 2013
Cassandra Ippevent 20 Juin 2013Cassandra Ippevent 20 Juin 2013
Cassandra Ippevent 20 Juin 2013vberetti
 

Tendances (9)

Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
 
Riak introduction
Riak introductionRiak introduction
Riak introduction
 
Algorithme distribués pour big data saison 2 @DevoxxFR 2016
Algorithme distribués pour big data saison 2 @DevoxxFR 2016Algorithme distribués pour big data saison 2 @DevoxxFR 2016
Algorithme distribués pour big data saison 2 @DevoxxFR 2016
 
Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017Meetup kafka 21 Novembre 2017
Meetup kafka 21 Novembre 2017
 
Prometheus et kubernetes | AIOS SH
Prometheus et kubernetes | AIOS SHPrometheus et kubernetes | AIOS SH
Prometheus et kubernetes | AIOS SH
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
Realtime Web avec Akka, Kafka, Spark et Mesos - Devoxx Paris 2014
 
Cassandra Ippevent 20 Juin 2013
Cassandra Ippevent 20 Juin 2013Cassandra Ippevent 20 Juin 2013
Cassandra Ippevent 20 Juin 2013
 

En vedette

Kudu Forrester Webinar
Kudu Forrester WebinarKudu Forrester Webinar
Kudu Forrester WebinarCloudera, Inc.
 
Building Streaming And Fast Data Applications With Spark, Mesos, Akka, Cassan...
Building Streaming And Fast Data Applications With Spark, Mesos, Akka, Cassan...Building Streaming And Fast Data Applications With Spark, Mesos, Akka, Cassan...
Building Streaming And Fast Data Applications With Spark, Mesos, Akka, Cassan...Lightbend
 
The Power of the Log
The Power of the LogThe Power of the Log
The Power of the LogBen Stopford
 
Kafka & Couchbase Integration Patterns
Kafka & Couchbase Integration PatternsKafka & Couchbase Integration Patterns
Kafka & Couchbase Integration PatternsManuel Hurtado
 
Apache Beam: A unified model for batch and stream processing data
Apache Beam: A unified model for batch and stream processing dataApache Beam: A unified model for batch and stream processing data
Apache Beam: A unified model for batch and stream processing dataDataWorks Summit/Hadoop Summit
 
Stream all the things
Stream all the thingsStream all the things
Stream all the thingsDean Wampler
 
Apache Flink's Table & SQL API - unified APIs for batch and stream processing
Apache Flink's Table & SQL API - unified APIs for batch and stream processingApache Flink's Table & SQL API - unified APIs for batch and stream processing
Apache Flink's Table & SQL API - unified APIs for batch and stream processingTimo Walther
 
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry confluent
 
Real-time Data Processing using AWS Lambda
Real-time Data Processing using AWS LambdaReal-time Data Processing using AWS Lambda
Real-time Data Processing using AWS LambdaAmazon Web Services
 
How to write a letter
How to write a letterHow to write a letter
How to write a letterAbdul Rehman
 
DCSUG - Happiness: A Key Component of Agile
DCSUG - Happiness: A Key Component of AgileDCSUG - Happiness: A Key Component of Agile
DCSUG - Happiness: A Key Component of AgileExcella
 
What to Upload to SlideShare
What to Upload to SlideShareWhat to Upload to SlideShare
What to Upload to SlideShareSlideShare
 
Dive into Spark Streaming
Dive into Spark StreamingDive into Spark Streaming
Dive into Spark StreamingGerard Maas
 
Akka-chan's Survival Guide for the Streaming World
Akka-chan's Survival Guide for the Streaming WorldAkka-chan's Survival Guide for the Streaming World
Akka-chan's Survival Guide for the Streaming WorldKonrad Malawski
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShareSlideShare
 

En vedette (20)

Kudu Forrester Webinar
Kudu Forrester WebinarKudu Forrester Webinar
Kudu Forrester Webinar
 
Building Streaming And Fast Data Applications With Spark, Mesos, Akka, Cassan...
Building Streaming And Fast Data Applications With Spark, Mesos, Akka, Cassan...Building Streaming And Fast Data Applications With Spark, Mesos, Akka, Cassan...
Building Streaming And Fast Data Applications With Spark, Mesos, Akka, Cassan...
 
The Power of the Log
The Power of the LogThe Power of the Log
The Power of the Log
 
Kafka & Couchbase Integration Patterns
Kafka & Couchbase Integration PatternsKafka & Couchbase Integration Patterns
Kafka & Couchbase Integration Patterns
 
Apache Beam: A unified model for batch and stream processing data
Apache Beam: A unified model for batch and stream processing dataApache Beam: A unified model for batch and stream processing data
Apache Beam: A unified model for batch and stream processing data
 
Stream all the things
Stream all the thingsStream all the things
Stream all the things
 
Apache Flink's Table & SQL API - unified APIs for batch and stream processing
Apache Flink's Table & SQL API - unified APIs for batch and stream processingApache Flink's Table & SQL API - unified APIs for batch and stream processing
Apache Flink's Table & SQL API - unified APIs for batch and stream processing
 
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
 
Real-time Data Processing using AWS Lambda
Real-time Data Processing using AWS LambdaReal-time Data Processing using AWS Lambda
Real-time Data Processing using AWS Lambda
 
Ciber bullying
Ciber bullyingCiber bullying
Ciber bullying
 
lonavla
lonavlalonavla
lonavla
 
How to write a letter
How to write a letterHow to write a letter
How to write a letter
 
DCSUG - Happiness: A Key Component of Agile
DCSUG - Happiness: A Key Component of AgileDCSUG - Happiness: A Key Component of Agile
DCSUG - Happiness: A Key Component of Agile
 
Clase 1 comportamiento
Clase 1 comportamientoClase 1 comportamiento
Clase 1 comportamiento
 
Catálogo residencial
Catálogo residencialCatálogo residencial
Catálogo residencial
 
Sesinconozcomishabilidad
SesinconozcomishabilidadSesinconozcomishabilidad
Sesinconozcomishabilidad
 
What to Upload to SlideShare
What to Upload to SlideShareWhat to Upload to SlideShare
What to Upload to SlideShare
 
Dive into Spark Streaming
Dive into Spark StreamingDive into Spark Streaming
Dive into Spark Streaming
 
Akka-chan's Survival Guide for the Streaming World
Akka-chan's Survival Guide for the Streaming WorldAkka-chan's Survival Guide for the Streaming World
Akka-chan's Survival Guide for the Streaming World
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Similaire à Apache Beam

Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzlesMicrosoft
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Ruau Mickael
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec GoMickaël Rémond
 
Ateliers protypage d objets connectes via arduino
Ateliers protypage d objets connectes via arduinoAteliers protypage d objets connectes via arduino
Ateliers protypage d objets connectes via arduinoFatima Zahra Fagroud
 
Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormParis_Storm_UG
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocutionParis_Storm_UG
 
Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)Frank Nielsen
 
À la découverte des observables
À la découverte des observablesÀ la découverte des observables
À la découverte des observablesNicolas Carlo
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Normandy JUG
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?Ruau Mickael
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesECAM Brussels Engineering School
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystMathieu Goeminne
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!Ruau Mickael
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8José Paumard
 

Similaire à Apache Beam (20)

Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec Go
 
Ateliers protypage d objets connectes via arduino
Ateliers protypage d objets connectes via arduinoAteliers protypage d objets connectes via arduino
Ateliers protypage d objets connectes via arduino
 
Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec Storm
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
 
Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)Traitement des données massives (INF442, A2)
Traitement des données massives (INF442, A2)
 
À la découverte des observables
À la découverte des observablesÀ la découverte des observables
À la découverte des observables
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et Catalyst
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
 
BBL chez Mappy autour de Tsung
BBL chez Mappy autour de TsungBBL chez Mappy autour de Tsung
BBL chez Mappy autour de Tsung
 
PostgreSQL Meetup Nantes #2
PostgreSQL Meetup Nantes #2PostgreSQL Meetup Nantes #2
PostgreSQL Meetup Nantes #2
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8
 

Dernier

Bidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from TransformersBidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from Transformersbahija babzine
 
Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023France Travail
 
Recurrent neural network_PresentationRNN.pptx
Recurrent neural network_PresentationRNN.pptxRecurrent neural network_PresentationRNN.pptx
Recurrent neural network_PresentationRNN.pptxbahija babzine
 
To_understand_transformers_together presentation
To_understand_transformers_together presentationTo_understand_transformers_together presentation
To_understand_transformers_together presentationbahija babzine
 
Libérer le Potentiel à l'Ère de la Transformation Numérique pour des Organisa...
Libérer le Potentiel à l'Ère de la Transformation Numérique pour des Organisa...Libérer le Potentiel à l'Ère de la Transformation Numérique pour des Organisa...
Libérer le Potentiel à l'Ère de la Transformation Numérique pour des Organisa...Mohamed Bouanane
 
Les Français, l'Europe et Emmanuel Macron
Les Français, l'Europe et Emmanuel MacronLes Français, l'Europe et Emmanuel Macron
Les Français, l'Europe et Emmanuel Macroncontact Elabe
 

Dernier (6)

Bidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from TransformersBidirectional Encoder Representations from Transformers
Bidirectional Encoder Representations from Transformers
 
Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023Le contrôle de la recherche d'emploi en 2023
Le contrôle de la recherche d'emploi en 2023
 
Recurrent neural network_PresentationRNN.pptx
Recurrent neural network_PresentationRNN.pptxRecurrent neural network_PresentationRNN.pptx
Recurrent neural network_PresentationRNN.pptx
 
To_understand_transformers_together presentation
To_understand_transformers_together presentationTo_understand_transformers_together presentation
To_understand_transformers_together presentation
 
Libérer le Potentiel à l'Ère de la Transformation Numérique pour des Organisa...
Libérer le Potentiel à l'Ère de la Transformation Numérique pour des Organisa...Libérer le Potentiel à l'Ère de la Transformation Numérique pour des Organisa...
Libérer le Potentiel à l'Ère de la Transformation Numérique pour des Organisa...
 
Les Français, l'Europe et Emmanuel Macron
Les Français, l'Europe et Emmanuel MacronLes Français, l'Europe et Emmanuel Macron
Les Français, l'Europe et Emmanuel Macron
 

Apache Beam

  • 1. Adil Oulghard Apache Beam Master de Recherche en Informatique et Télécommunications (MIT) Semestre 3 Encadrant : Pr. AIT LAHCEN Ayoub
  • 2. Données infinis et non-ordonnés Apache Beam (incubation) What, Where, When, How Plan Conclusion 2 4 1 3 5 Démo (WordCount)
  • 3. Données infinis et non-ordonnés1
  • 4. Objectifs: le score total par équipe https://commons.wikimedia.org/wiki/File:Globe_centered_in_the_Atlantic_Ocean_(green_and_grey_globe_scheme).svg
  • 5. Événements de jeux mobiles • User Id • Team ID • Score • Event time
  • 6. … Données Infini... 9:008:00 14:0013:0012:0011:0010:00
  • 7. … Avec des retards. 9:008:00 14:0013:0012:0011:0010:00 8:00 8:008:00
  • 8. 1 + 1 = 2 Completeness Latency Cost $$$ Streaming ou Batch ? Pourquoi pas les deux ?
  • 10. Apache Beam est un modèle de programmation unifié offre des pipelines Portables
  • 11. 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 Other LanguagesBeam Java Beam Python Execution Execution Google Cloud Dataflow Execution
  • 12. C’est quoi un Pipeline ? PCollection PTransforms • Graphe de transformations • Peut inclure plusieurs entrés et produire plusieurs sorties.
  • 13. Reality Event Time vs Processing Time ProcessingTime Event Time Ideal Skew (écart)
  • 14. What, Where, When, and How3
  • 15. What are you computing? [Transformations] Where in event time? [Fenêtrage] When in processing time? [Trigger,Watermark] How do refinements relate? [Accumulation et retrait]
  • 16. What are you computing? What Where When How Element-Wise ParDo (Parallel Do) MapElements … Aggregating GroupByKey Combine Composite Map Reduce
  • 17. 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égation PCollection<KV<String, Integer>> scores = input.apply(Sum.integersPerKey()); What Where When How
  • 18. What: Calcule des sommes entières What Where When How
  • 19. What: Calcule des sommes entières (Batch) What Where When How
  • 20. 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 2 3 4
  • 21. 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());
  • 22. Where: Fenêtre fixé 2-Minutes What Where When How
  • 23. When in processing time? What Where When How • Triggers controles quand produit les résultats. • Triggers sont relativement liée à watermark. • Watermark = retard accepter ProcessingTime Event Time ~Watermark Ideal Skew Reality
  • 24. 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());
  • 25. When: Trigger basé sur le watermark (Streaming) What Where When How
  • 26. 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());
  • 27. When: Early and Late Firings What Where When How
  • 28. 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
  • 29. 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());
  • 30. How: Accumulation et Retraction What Where When How
  • 33. 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
  • 35. 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
  • 36. 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 Other LanguagesBeam Java Beam Python Execution Execution Google Cloud Dataflow Execution
  • 38. Pipeline de Word Count TextIO.Read Transform TextIO.Write Transform
  • 39. 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 M2_HOME=/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
  • 40. Exécuter Pipeline de WordCount sur les différents runner 1) Sur DirectRunner mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount -Dexec.args="-- inputFile=/home/hadmin/words.txt --output=DirectWords" -Pdirect-runner 2) Sur FlinkRunner mvn 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 SparkRunner mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount -Dexec.args="-- runner=SparkRunner --inputFile=/home/hadmin/words.txt --output=SparkCounts" -Pspark-runner 4) Sur ApexRunner mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount -Dexec.args="-- inputFile=/home/hadmin/words.txt --output=ApexWords --runner=ApexRunner" -Papex-runner

Notes de l'éditeur

  1. Je vais commencé par la problematique qui a motiver Beam Ensuite, je vais introduire se que apache beam Et dans la 3eme etape je vais discuter le model de beam, sur ses 4 question Puis une petit conclusion Et enfin la demonstration en utilisant word count Le premier probleme c’est , si on est entrain d’utiliser des jobs sur une plateforme big data comme hadoop et qu’on veut migrer vers d’autres plateform comme spark, flink ou d’autres, pour ameliorer les performances de fonctionement, ou bien utiliser les traitement en streaming,, donc on doit implementer d’autres API et reecrire tous le code a chaque fois qu’on change la technologie, Ceci vas etre resulu par le model beam
  2. Une 2eme problmatique concernant les données infini et non-ordonnées
  3. On va considérer a titre d ’exemple qu’on a une application de jeux mobile, ou les utilisateurs jouent pour gagné des points pour leurs équipe, et notre objectif est de calculer le score totale pour chaque équipe, ou bien juste des statiques sur l’utilisation de notre jeux.
  4. Chaque évènement produite par chaque utilisateur ou joueur , contient les 4 éléments suivante
  5. ON va supposer que notre jeux est devenu plus pobulaire et donc il y a toujours des données ou des événement qui viennet dans notre system, et donc puisqu’on travaille dans des systems distribués cela peut causé des ambiguité - Pourquoi …
  6. On va prendre a titre d’exemple le score produit a 8:00 h de nos 3 utilisateur <animate> le score rouge produit à 8h, on le reçoi immidiatement dans le system <animate> score jaune et de meme etait produit à 8h, mais recu dans notre system avec un retard de 30min Due par ex. à la congestion du réseau. <animate> le score vert nous arrive avec des heures et heures de retard. Cela peut etre due que l’utlisateur jeux en mode offline. Et donc on doit attendre l’arrivé de cette donnée. Donc on va avoir des données non ordonnés, pose problème selon cas d’utilisation c’est a dire <animer>
  7. Si notre objectif est (la dettection des fraude ) donc cas du batch on doit attendre que tous les données soit complete (on doit attendre tout la journé par exemple), pour faire des traitements et produire des resultats correcte et donc on perd le temp de latence(reponse) et le cout du stockage (terme de ressources), dans ce cas le mode batch qui est utilisé Mais si on veut produire des resultats ou des mis a jour trés vite avant meme d’atteindre la fin de la journé (au cas des scores pour chaque equipe)–non d’attendre que tous les données soient dans le systeme. Cas de streaming, dans ce cas la on va avoir l’incoherence des données mais on gagne le temps de latence et le cout de ressources <animer> Donc le vrais compromis depend du cas d’utilisation -- c’est ce que le model de Beam permet-- basé sur les 4 questions du pipeline
  8. Donc Q’est ce apache Beam
  9. Apache Beam, (concatenation du b pour batch et eam pour streaming) est un projet open source récemment entré dans l’incubateur Apache. A l’origine, ce projet était un projet Google qui se nommait « Google Dataflow ». Beam propose un modèle unifié pour la définition et l’exécution de pipelines de traitement de données ,unifié c’est-à-dire adresse a la fois des processus de type batch (donnée en lot) ou streaming (flux continue) grâce a des pipelines qui simplifient la mécanique du traitement des donnée, portables et efficaces puisqu’il vont s’exécuté par la suite sur différentes runner (moteur d’exécution) ,
  10. Le modele Beam propose une API Basée sur 4 questions , Des SDKs pour la construction des pipelines actuelement les SDK disponibles sont en java et python et des moteurs d’exécution (applé runners dans beam) pour l’exécution de ces pipelines . Pour resumer Une fois qu’on a créer notre pipeline basé sur ces 4 questions et le langage qu’on souhaite On ne procupe pas dans quel envirenement d’exécution ça va tourner est la responsabilité d’un autre partie dans beam apellé runners , qui va traduire notre pipeline sur un moteur d’execution cible ,
  11. L’API de Beam définit le concepts de Pipeline un pipeline est un code que l’on va écrit selon l’SDK disponible (c’a d spécifique au langage) qui va être traduit par un graphe de transformation de traitements de données Pcollection pour parallel collection, sont l’ensemble de données dans notre pipeline, on peut créer une Pcollection de 2 maniére, soit on lire les données à partir d’un support de stockage, ou bien en effectuant une Ptransform(parallel transformation) d’une autre Pcollection qui déjà existe. Les Pcollection sont immutable. (Ptransform dans les diapos prochains) On peut dire que cette pipeline est une serie de transformation MapReduce
  12. Avant d’entré dans ce que pipeline permet de définir On doit faire la differences entre deux concepts Le temps d’evenement c’est le moment ou l’evenemnet a était produite (c’est par ex lorsqu’un score est produit par un utilisateur) Le temps de traitement c’est le moment ou l’evenement a etait recu et traité par notre system Le cas ideal (representé par la pente pointillé) c’est quand ces deux sont egaux (l’evenement arrive dans le system le moment ou il a etait produite) <animate> dans la realité ce cas ideal n’existe pas (puisque il y a toujours des probleme lié au reseau,etc) , et donc toujours le processing time est postérieur à l’event time . <animate> et donc l’écart entre l’ideal et la realité représente le temps de latence. .
  13. Encore une fois, nous essayons de raisonner sur des ensembles de données infinis et non ordonnées. Et c'est vraiment difficile à faire ... Si on ne savent pas les questions a posé. Le point fort de Model beam est qu’il est basé sur 4 questions pour définir une pipeline
  14. What? (Qu’est ce qu’on veut calculer) somme, jointure, histograms? Where?(où dans le temps d’evenement les resultats sont produite) est ce que on agrège les evenement sur tous le temps, dans des fenetres fixe, ou sur session d’utilisateur? When? quand on doit soumettre la sortie ? Comment savoir quand produire une résultat? Qu’est ce qu’on fait si les evenements arrivent en retard? Et finalement, how? Quand on recoit plusieurs données pour la meme fenetre, comment on doit mettre a jours le resultats ? Chaque questio va nous aider a construire notre pipeline...
  15. Qu’est ce qu’on veut calculer la 1er transform chaque element du Pcollection en entrée independament et de facon parallel, c’est le meme pricipe de Map dans MapReduce, Facile à paralléliser en utilisant des fonctions fournis par l’SDK Beam comme ParDo et MapElements, et en parametre le traitement a effectuer spécifier par l’utilisateur. La 2eme trnasformation, comme combiner et grouper par clé qui prend en entrée Pcollection de cle/valeur et groupe tous les valeurs qui ont meme clé , meme fonctionnement de Reduce dans l’algorithme de MapReduce La derniere, est une transformation composé, transformations qui utilise d’autres transformation comme des opérations primitifs comme . maintenat pour voir les choses concrétement je vais inclure un extrait de code de notre jeux ...
  16. J’ai utilisé SDK Java On va lire la collection des données brutes, les evenements (user,team,score) par exemple On va ensuite appliquer la 1er transformation vue avant pour rendre la collection d’entrée plus structuré qui contient paire clé/valeur avec le nom d’equipe et le nombre de points gagné score . Ensuite on utilise une transformation composé pour calculer la somme par equipe (team). On va voir comment ce code va s’exécuter pour un équipe spécifique...
  17. L’axe bleu …, l’axe vert … <animate> ideal <animate> ce score de 3 est produit a 12:7 min et arrive dans notre system juste aprés 12:07 on peut dire qu’il arrive imediatement. <animate>mais l’evenement qui porte le score 9 arrive avec 7 minutes de retard . Sachant qu’il a etait produite un peut pré a 12:01 Ce retard est peut etre due a ….;
  18. Pendant que le pipeline traite les éléments, ils les accumules dans son etat Si on exécute notre pipeline sur une Pcollection limité c’est a dire (source de données limité)ou bien en mode batch, tous les données sont la dans notre systeme et peuvent etre traité ensemble, et donc le rectangle couvre tous les evenements, peu importe quand ils sont produites. Puis produit sa sortie unique qui est 51. Mais si notre pipeline utilise une Pcollection illimité c’est a dire en mode streaming-> cette traitement par lots de données ne sera pas suffisant en d’autre terme nous ne pouvons pas attendre les entrés qui arrivent en temps réel jusqu’ils soient fini pour enfin faire des traitement, => c’est pour ça qu’on a besoin de diviser les flux de données en des morceaux fini (fenêtrage) d’où la question suivante:
  19. Fenetrage permet de diviser (ou classifier) les elemets du Pcollection dans des morceau fini basé sur leurs temp d’evenement Cela permet de créer des resultats pour chaque morceau Il est vraiment necessaire pour agregé des données illimitées pour s’assurer qu’on est entrain de progresser Il y a 3 types de fenetre qu’on peut appliquer mais les plus utilisé sont sur temps fixé(par exemple par heure,jour, mois), Des fenetre glissantes (par exemple on prend chaque heure les données des derniers 24 heures, ce qui explique la superposition des fenêtres.) – et donc un element peut etre dans different fenetre. session basé sur l’activite de l’utilisateur– période d’activité
  20. Par exemple on prend une fenetre fixé de duré de 2 Minutes Et on l’applique sur notre pipeline de Sommation. On va voir une animation sur ça pour une exécution en mode batch (ça veut dire des données déjà existent dans notre system)
  21. Si vous avez remarquez, des resultats indepenadtes sont produites pendant chaque 2min du temps d’evenement mais on doit attendre que tous les calculs se terminent pour enfin produire les resultats et donc augmentation du temps de latence. Cela pourrait fonctionner tres bien avec des données limités , mais pas avec les données illimité dans la taille Si on veut commencer à produire des résultats dès qu'ils sont prêts(ou des qu’il sont traité), nous avons besoin d'un mécanisme pour contrôler quand chaque résultat est produit. Ce qu’on appel le trigger qui vient avec la question suivante
  22. Trigger défini quand dans le temps de traitement (processing time) les resultats sont produites Sont relativement lié a watermerk, qui est une estimation(sur des informations des données comme taux de croissance des fichier……) qui déclare le retard acceptable « (qu'aucun événement ne devrait apparaître à l'avenir après ce point ) » Si cette estimation est trop lente donc on attend plus longtemps que necessaire pour produire les resultats=> latence inutiles Si il est trop rapide, alors certaines données arrivent en retards aprés qu’on a pensé que tous les données sont traité pour une période donné,=> resultats incorrectes
  23. Pour simplier je vais prendre le cas par defaut triggering at watermark , c’est a dire produire le resultat lorsqu’on pense qu’on a vu tous les données (ou evenements) pour une fenetre donnée On applique ça sur notre pipeline en mode streaming
  24. Ici il y a 2 types de watermark , Celui a gauche represente le watermark parfait -- dans le cas où nous avons une connaissance parfaite de toutes les données d’entrées =>est donc on va pas avoir des donné perdus Celui a droite représente le watermark estimé -- qui nous rend des résultat un peu pré incorrect comme vous pouvez voir le score 9 vient en retard et donc n’est pas inclus dans la somme Dans les deux cas la fenetre est fermer une fois qu’il depasse le watermark. On peut voir facilement qu’il y a deux problemes generé par ces 2 cas :::: la 1er dans le watermark parfait, prenons par exemple la deuxième fenetre, meme si les données sont tous traité la fenetre n’est pas fermé tout de suite il ne le fermera jusqu’il passe le watermark=> temp de latence inutile Dans la 2eme cas le score 9 en retard est perdu => resultats incorrectes =Est donc pour remedier a ces problemes on doit fournir une sorte de mises à jour régulières pour une fenêtre donnée, soit avant ou aprés le watermark. d’où la necessité d’un trigger plus avancé
  25. Comme j’ai dit precedement on doit faire un sorte de mises à jour régulières donc on change le trigger pour qu’il Produit des resultats chaque minutes pour chaque fenetre avec EarlyFirigns Et reactualisé le resultats a chaque fois quand on vois un element en retard avec withLateFirings => On va voir ça comment va changer le fonctionnement de notre pipeline
  26. Vous remarquer que le probleme de latence est resolu grace a des mis a jour périodique une fois par minute grâce à early firing Et le probleme de retard aussi resolu grâce à late firing qui se declenche a chaque fois quand il voit un element apré le watermark Dans ce cas la on va avoir plusieurs résultats par fenetre, comment on doit mettre a jour la derniere resultat Par exemple Dans la derniere fenetre on a traité le score 3 mais ce 3 il reste inclus dans la prochaine mis a jour qui est 12. Résolu par la question suivante
  27. On va supposer qu’on mis a jour 3 fois l’etat de chaque fenetre – avant watermark avec une valeur de 3 , dans le watermark avec deux valeurs 5 et 1, et après watermark valeur 2 <animate>Dans le cas general en fait l’accumulation et retraction qui consiste a faire a chaque niveau ou a chaque fois qu’une mis a jour est produite il fait une accumulation et il rejete la valeur accumuler dans l’etat precedente est donc il ne va garder que la dernier valeurs observé. qui est correcte C’est comme si on le dit « je vous avais déjà dit que le résultat était X, mais je me trompais. Débarrassez-vous du X que je vous ai dit la dernière fois, et remplacez-le par Y
  28. Et on ajoute a notre pipeline cette fonctionnement avec accumulatingAndRetractiongFiredPanes => On exécute maintenant notre pipeline finale
  29. Comme j’ai dit avant, dans l’accumulation et retration on fait la somme a chaque niveau et on rejete la derniere valeur maintenant la derniere fenetre produit la valeur 3 soumit le resultat, apre que 8 et 1 entrent, il les accumule avec le 3 et supprime ce 3 c’est comme si on mis la valeur precedente a 0
  30. Le model Beam il est vraiment flexible puisque il permet d’atteindre tous les cas d’utilisation
  31. de mode batch classique ….jusqu’au streaming avec rétraction
  32. Et pas seulment ça, meme un code modulaire
  33. C’est a dire atteind tous les cas mais rien n’est changé dans notre algorithme qui est ici la sommation
  34. Beam support plusieurs categorie des utilisateurs Utilisateurs finaux: qui veulent écrire des pipelines ou des bibliothèques de transformations dans un langage familier. Développeurs d’SDK : qui veulent mettre le concept de beam dans un nouveau langage. Développeurs du Runner : qui ont une envirenement de traitements distribués et veulent supporter les pipelines de Beam
  35. Ici on va utiliser l'exemple de word count pour montrer comment un pipeline est créé et comment sera-t-il exécuter sur différents enivrements d’exécution pour vous montez la portabilité du pipeline, pour simplifier on va prendre comme source d’entré de données un fichier texte que l’on va faire passer par differente transformation pour produire le nombre d’occurrence des mots dans un fichier de sortie
  36. Exécution _
  37. En spécifiant le fichier text dans l’argument inputFile