11. Apache Beam a été initié par Google
dans son offre Dataflow.
Il a été donné à la fondation Apache
en 2016.
https://beam.apache.org
Il est apparu en 2018 dans les
principaux radars tech.
11
Source: https://www.thoughtworks.com/radar
17. 17
public class FormatStringAsDocument extends
SimpleFunction<String, Document> {
@Override
public Document apply(String input) {
ObjectMapper objectMapper = new ObjectMapper();
Timestamp timestamp =
objectMapper.readValue(input, Timestamp.class);
Map<String, Object> value =
objectMapper.convertValue(timestamp, new
TypeReference<Map<String, Object>>() {
});
Document document = new Document(value);
return document;
}
}
18. 18
Les IO
Beam fournit une bibliothèque de
transformations permettant
l’interaction avec des sources de
données
On peut trouver :
Kafka
Text
Hadoop
Cassandra
...
22. Batch sur présence
de fichiers
PCollection<String> lines = pipeline.apply(TextIO.read()
.from(“data/**.csv”)
.watchForNewFiles(
standardSeconds(15),
afterTimeSinceNewOutput(Duration.standardHours(1))))
22
23. 23
Les runners
Beam fournit plusieurs runners.
La sélection d’un runner se fait
par ajout d’une dépendance dans
le classpath
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-runners-direct-java
</artifactId>
<version>2.14.0</version>
<scope>test</scope>
</dependency>
24. Write once run
everywhere ?
24Source: https://beam.apache.org/documentation/runners/capability-matrix
27. Quelques points
négatifs
● Pas compatible avec JAVA 11
et les dernières versions de
certains frameworks (ex.
JUNIT5)
● La gestion des erreurs est
encore problématique dans
certains cas
27
28. Les points positifs
● Le projet est très
actif
● Permet
d'exécuter des
pipelines sur
plusieurs
runtimes avec
une seule API.
28
● Si vous devez
gérer plusieurs
environnements
et faire du
“débordement
dans le cloud”,
BEAM peut être
utile.
29. Pour aller plus loin
https://beam.apache.org
https://github.com/littlewing/beam-orleans-tech
https://blog.jetbrains.com/blog/2019/06/14/new-in-
educational-products-apache-beam-katas-and-more/
29
Dire que c’est très orienté JAVA . Il y a des équivalent en Python par ex. Airflow
Lacunes
Portabilité
Une API et un runtime pour chaque besoin
Beam fournit un modèle unifié pour le streaming et le batch
Dans ce modèle, l’API et le runtime sont égalemetn découplés.
Dire qu’on est sur du code!
Pour les runtime dire qu’on en a plus
Ici Beam : Local Runner qui peut etre utilisé sur le poste de travail
Explication de deux concepts principaux : PCollection & PTransformLa collection est une image de vos données. Il pourrait être transformé plusieurs fois par ptransform
Dans ce schéma j’ai indiqué un pipeline simple. On peut le complexifier, créer deux entrées, des sorties conditionnelles, etc.
C'est sans fin
Les collections sont des représentations des données. Elles sont immutables.
Ici on extrait des données d’un fichier. J’aborderai dans un prochain slide les notions d’ IO
A chaque fois qu’on applique une transformation , on crée une donnée qui est stockée dans une collection.
On peut les manipuler ( groupByKey,...) les transformer,...
ParDo is a Beam transform for generic parallel processing. The ParDo processing paradigm is similar to the “Map” phase of a Map/Shuffle/Reduce-style algorithm: a ParDo transform considers each element in the input PCollection, performs some processing function (your user code) on that element, and emits zero, one, or multiple elements to an output PCollection.
ParDo is a Beam transform for generic parallel processing. The ParDo processing paradigm is similar to the “Map” phase of a Map/Shuffle/Reduce-style algorithm: a ParDo transform considers each element in the input PCollection, performs some processing function (your user code) on that element, and emits zero, one, or multiple elements to an output PCollection.
Indiquer qu’ on manipule qu’avec cette API on ne différencie pas