Apache Beam

Preview:

Citation preview

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

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!

Recommended