Unifiez vos
traitements
Batch & Streaming
avec Apache BEAM
18 septembre 2019
Alexandre Touret
Architecte @Worldline
#Java #API #CI
#Software_Craftsmanship
@touret_alex
2
Sommaire
▪ Etat des lieux
▪ Présentation d’Apache Beam
▪ Concepts
▪ Démonstration
▪ (Ma) Conclusion
3
Etat des lieux
Quel Framework utiliser pour mes
traitements de données ?
1.
ETL ?
Extract Transform Load
5
Spring Integration
Traitements
“simples”
Apache Camel
6
Traitements
“distribués”
Spark Flink Google Dataflow
7
8
Portabilité ?
Quid de la
formation ?
Un outil et une API
pour chaque besoin
?
Et la
production ?
Write Once
Run
Everywhere ?
9
Apache Beam
Une courte présentation
2.
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
12https://beam.apache.org/documentation/runners/capability-matrix/
batch
streaming
Implémentation
Exécution
Concepts
3.
14
Un pipeline
Input Collection
Transformatio
n
Collection
Transformatio
n
Output
Transformatio
n
15
Les collections
PCollection<String> lines =
p.apply(TextIO.read().from("file:///some/inputData.txt"));
16
Les
transformations
Beam fournit plusieurs
transformations par défaut:
● ParDo
● GroupByKey
● Combine
● ...
On peut les étendre et créer nos
transformations.
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
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
...
19
Les
transformations
appliquées aux IO
read()
Exemples:
JdbcIO.read()
MongoDbIO.read()
write()
Exemples:
JdbcIO.write()
MongoDbIO.write()
20
Streaming
p.apply(KafkaIO.<Long, String>read()
.withBootstrapServers(kafkaUrl)
.withTopic(kafkaTopicName)
.withKeyDeserializer(LongDeserializer.class)
.withValueDeserializer(StringDeserializer.class)
[...]
p.run().waitUntilFinish();
Batch exécuté une
fois
PCollection<String> lines = pipeline.apply(TextIO.read()
.from(“data/**.csv”));
21
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
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>
Write once run
everywhere ?
24Source: https://beam.apache.org/documentation/runners/capability-matrix
Démonstration
4.
(Ma) Conclusion
5.
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
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.
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
Merci!
Des questions?
@touret_alex
30
18 septembre 2019

Contenu connexe

PPTX
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
PDF
Apache flink - retour d'expérience sur la conférence flink forward 2015
PPTX
Webinaire du 09/04/20 - S'appuyer sur du Bare Metal pour gérer ses pics de ch...
PPTX
DevFestBdm2019
PDF
Améliorer les compétences et intrastructures avec les katas d'architecture
PDF
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
PDF
Kubernetes & Co, beyond the hype
PDF
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam
Apache flink - retour d'expérience sur la conférence flink forward 2015
Webinaire du 09/04/20 - S'appuyer sur du Bare Metal pour gérer ses pics de ch...
DevFestBdm2019
Améliorer les compétences et intrastructures avec les katas d'architecture
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Kubernetes & Co, beyond the hype
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Publicité

[tours-jug19] Unifiez vos traitements Batch et Streaming avec Apache beam

Notes de l'éditeur

  • #7: Dire que c’est très orienté JAVA . Il y a des équivalent en Python par ex. Airflow
  • #9: Lacunes Portabilité Une API et un runtime pour chaque besoin
  • #13: 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
  • #15: 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
  • #16: 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,...
  • #17: 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.
  • #19: 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