SlideShare une entreprise Scribd logo
1  sur  30
Unifiez vos
traitements
Batch & Streaming
avec Apache BEAM
17 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
17 septembre 2019

Contenu connexe

Similaire à [orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam

FinistJUG - Camel Presentation
FinistJUG - Camel PresentationFinistJUG - Camel Presentation
FinistJUG - Camel PresentationXavier MARIN
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders BattleArnaud Héritier
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapideBilal Baltagi
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET CoreMicrosoft
 
Atelier hadoop-single-sign-on
Atelier hadoop-single-sign-onAtelier hadoop-single-sign-on
Atelier hadoop-single-sign-onsahar dridi
 
[Smile] atelier spark - salon big data 13032018
[Smile]   atelier spark - salon big data 13032018[Smile]   atelier spark - salon big data 13032018
[Smile] atelier spark - salon big data 13032018Smile I.T is open
 
Infrastructure - Monitoring - Cacti
Infrastructure - Monitoring - CactiInfrastructure - Monitoring - Cacti
Infrastructure - Monitoring - CactiFrédéric FAURE
 
ÉVolution d'un système de publication de données techniques automobiles, modé...
ÉVolution d'un système de publication de données techniques automobiles, modé...ÉVolution d'un système de publication de données techniques automobiles, modé...
ÉVolution d'un système de publication de données techniques automobiles, modé...SemWebPro
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Alexandre Touret
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSyrine Ben aziza
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsNicolas Herbaut
 
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamielParis Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamielModern Data Stack France
 

Similaire à [orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam (20)

FinistJUG - Camel Presentation
FinistJUG - Camel PresentationFinistJUG - Camel Presentation
FinistJUG - Camel Presentation
 
20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle20091020 - Normandy Jug - Builders Battle
20091020 - Normandy Jug - Builders Battle
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapide
 
Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Spring.NET
Spring.NETSpring.NET
Spring.NET
 
Presentation Spring
Presentation SpringPresentation Spring
Presentation Spring
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET Core
 
Atelier hadoop-single-sign-on
Atelier hadoop-single-sign-onAtelier hadoop-single-sign-on
Atelier hadoop-single-sign-on
 
[Smile] atelier spark - salon big data 13032018
[Smile]   atelier spark - salon big data 13032018[Smile]   atelier spark - salon big data 13032018
[Smile] atelier spark - salon big data 13032018
 
Design API - SnowCampIO
Design API - SnowCampIODesign API - SnowCampIO
Design API - SnowCampIO
 
Spring Boot RestApi.pptx
Spring Boot RestApi.pptxSpring Boot RestApi.pptx
Spring Boot RestApi.pptx
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
Infrastructure - Monitoring - Cacti
Infrastructure - Monitoring - CactiInfrastructure - Monitoring - Cacti
Infrastructure - Monitoring - Cacti
 
ÉVolution d'un système de publication de données techniques automobiles, modé...
ÉVolution d'un système de publication de données techniques automobiles, modé...ÉVolution d'un système de publication de données techniques automobiles, modé...
ÉVolution d'un système de publication de données techniques automobiles, modé...
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
Spring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrineSpring boot anane maryem ben aziza syrine
Spring boot anane maryem ben aziza syrine
 
Déploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIsDéploiement, orchestration & sécurisation d’APIs
Déploiement, orchestration & sécurisation d’APIs
 
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamielParis Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
Paris Spark meetup : Extension de Spark (Tachyon / Spark JobServer) par jlamiel
 
Xhprof
XhprofXhprof
Xhprof
 

Plus de Alexandre Touret

Améliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architectureAméliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architectureAlexandre Touret
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Alexandre Touret
 
Kubernetes & Co, beyond the hype
Kubernetes & Co, beyond the hypeKubernetes & Co, beyond the hype
Kubernetes & Co, beyond the hypeAlexandre Touret
 
Améliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architectureAméliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architectureAlexandre Touret
 
[TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte![TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte!Alexandre Touret
 
Jenkins2 : le retour ( d'expérience) : TouraineTech 2018
Jenkins2 : le retour ( d'expérience) : TouraineTech 2018Jenkins2 : le retour ( d'expérience) : TouraineTech 2018
Jenkins2 : le retour ( d'expérience) : TouraineTech 2018Alexandre Touret
 

Plus de Alexandre Touret (6)

Améliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architectureAméliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architecture
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
Kubernetes & Co, beyond the hype
Kubernetes & Co, beyond the hypeKubernetes & Co, beyond the hype
Kubernetes & Co, beyond the hype
 
Améliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architectureAméliorer les compétences et intrastructures avec les katas d'architecture
Améliorer les compétences et intrastructures avec les katas d'architecture
 
[TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte![TNT19] Hands on: Objectif Top Architecte!
[TNT19] Hands on: Objectif Top Architecte!
 
Jenkins2 : le retour ( d'expérience) : TouraineTech 2018
Jenkins2 : le retour ( d'expérience) : TouraineTech 2018Jenkins2 : le retour ( d'expérience) : TouraineTech 2018
Jenkins2 : le retour ( d'expérience) : TouraineTech 2018
 

[orleans-tech-19] Unifiez vos traitements Batch et Streaming avec Apache beam

Notes de l'éditeur

  1. Dire que c’est très orienté JAVA . Il y a des équivalent en Python par ex. Airflow
  2. Lacunes Portabilité Une API et un runtime pour chaque besoin
  3. 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
  4. 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
  5. 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,...
  6. 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.
  7. 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