SlideShare une entreprise Scribd logo
1  sur  29
1
Tél : +41 21 312 94 15
www.octo.com
© OCTO 2015
Avenue du théâtre 7
CH-1005 Lausanne - SUISSE
Test Driven MapReduce
Development
2
Directeur Technique
OSSGTP Member
JUGLausanne co-leader
Committer MOJO
Philippe Kernévez
3
CONCEPTS
Agenda
2
EXEMPLE SUR USE CASE3
CONTEXTE1
4
Contexte
5
Hadoop / MapReduce ?
PIG ?
Hive ?
Crunch ?
Qui connaît…
6
Testabilité ?
Exemple de script
INSERT OVERWRITE TABLE stats_campaign!
SELECT stat.*, stat.total_media_cost/stat.nb_imp as AVG_MEDIA_COST, (stat.nb_click/stat.nb_imp) as
ratio_click, (stat.nb_conv/stat.nb_imp) as ratio_conv!
FROM (!
SELECT ce.campaign_id, !
ce.campaign_name, !
ce.CAMPAIGN_GOAL_TYPE, !
ce.vertical_name, !
min(ce.START_END) as start_end, !
max(ce.LAST_DATE) as last_date, !
ce.STATUS,!
s.nb_strategies as nb_stategies, !
sum(ce.NB_IMP) as nb_imp,!
sum(ce.nb_click) as nb_click, !
sum(ce.nb_conv) as nb_conv, !
sum(ce.NB_ADEX) as NB_ADEX,!
sum(ce.total_media_cost) as total_media_cost, !
min(ce.min_media_cost) as min_media_cost, !
max(ce.max_media_cost) as max_media_cost!
FROM stats_campaign_exchange ce!
LEFT JOIN (!
select md.campaign_id, count(md.id) as nb_strategies!
from md_strategies md!
group by md.campaign_id!
) s ON s.campaign_id = ce.campaign_id!
group by ce.campaign_id, ce.campaign_name, ce.CAMPAIGN_GOAL_TYPE, ce.vertical_name,
s.nb_strategies, ce.STATUS!
) stat!
0%
7
Testabilité ?
Exemple de script
define X `python reducer.py` ship ('./reducer.py'); !
!
set output.compression.enabled true;!
set output.compression.codec org.apache.hadoop.io.compress.GzipCodec;!
!
mv_a = LOAD 'Mouvement.txt' using PigStorage(',') AS (MARQUE:chararray, DATE:chararray, MAGASIN:int,
ARTICLE:int, TYPE_STOCK:int, DELTA:int, SAISON:chararray); !
mv_b = RANK mv_a;!
mv_c = FILTER mv_b BY (rank_mv_a > 1); !
!
mv_d = foreach mv_c generate MARQUE, ARTICLE, MAGASIN, TYPE_STOCK, ToDate(DATE, 'dd/MM/yyyy') AS DATE,
DELTA ,SAISON, DATE AS DATE_STR;!
!
st_a = LOAD 'Stock.txt' using PigStorage(',') AS DELTA:int, MAGASIN:int, TYPE_STOCK:int, SAISON:chararray,
DATE:chararray, ARTICLE:int, MARQUE:chararray); !
st_b = RANK st_a;!
st_c = FILTER st_b BY (rank_st_a > 1); !
st_d = foreach st_c generate MARQUE, ARTICLE, MAGASIN, TYPE_STOCK, ToDate(DATE, 'dd/MM/yyyy') AS DATE,
DELTA ,SAISON, DATE AS DATE_STR;!
!
a = UNION mv_d, st_d;!
!
b = ORDER a BY MARQUE, ARTICLE, MAGASIN, TYPE_STOCK, DATE DESC;!
!
c = STREAM b THROUGH X as ( MARQUE:chararray, ARTICLE:chararray, MAGASIN:chararray, TYPE_STOCK:chararray,
DATESTOCK:chararray, QUANTITE:chararray, SAISON:chararray, INFO_1:chararray, INFO_2:chararray);!
!
STORE c INTO 'results' USING PigStorage(',');!
20% ?
8
Pig et Hive sont des outils efficaces et simples d’utilisation en phase
d’analyse
  Ils ne nécessitent pas de compétences de développement
Mais cela ne passe pas à l’échelle pour des développements
‘industriels’
  Les tuples tapent une limite au dessus de 15 champs
  Pas de tests
  L’abstraction empêche de tuner la requête et multiplie les Jobs (multi
mapjoin, union, etc.)
Roundtrip entre une évolution et sa validation
Hive et Pig
9
Concepts
10
Motivations :
  Focus sur le développement
  Abstraction minimale des frameworks sous-jacents
  Data model (typage versus tuple)
  (Bibliothèque de UDFs)
Possibilité de faire tourner la même chaine :
  In Memory
MapReduce
Spark
Ce qui change avec Crunch
11
Concept
Apache
Hadoop
MapReduce
Apache
Crunch
Apache
Pig
Apache
Spark
Cascading Apache Hive Apache Tez
Input Data InputFormat Source LoadFunc InputFormat
Tap
(Source)
SerDe Tez Input
Output Data OutputFormat Target StoreFunc OutputFormat Tap (Sink) SerDe Tez Output
Data
Container
Abstraction
N/A
PCollection,
PTable,
PGroupedTable
Relation RDD Pipe Table Vertex
Data Format
and
Serialization
Writables
POJOs and
PTypes
Pig Tuples
and
Schemas
POJOs and
Java/Kryo
Serialization
Cascading
Tuples and
Schemes
List<Object>
and
ObjectInspect
ors
Events
Data
Transformati
on
Mapper,
Reducer, and
Combiner
DoFn
PigLatin
and UDFs
Functions
(Java API)
Operations
HiveQL and
UDFs
Processor
Concepts clés
PIPELINE
SOURCE
TARGET
DoFn
DoFn
PCollection<T> PTable<K,V> Collection<T>
12
Pour lire sur HDFS, Hive, etc.
Source<T> et TableSource<K, V> pour lire des PCollection ou des
PTables
Source
13
Target
Target
14
3 implémentations
Pipeline
15
Pcollection<T>
parallelDo
  cache
  union
Ptable<K, V>
parallelDo, cache, union, etc.
groupByKey
mapKeys / mapValues
PGroupedTable<K, V>
combineValues( Aggregator )
Les données
+/- PTable(K, Iterable<V>>
distributed, sorted map of keys of type
K to an Iterable that may be iterated
over exactly once
+/- PCollection<Pair<K, V>>
distributed, unordered multimap of its
key type K to its value type V
Distributed, immutable collection of
elements of type T
16
Fonction qui pour chaque donnée en entrée renvoie 0 à n données
Une DoFn peut-être exécutée dans un mapper ou un reducer, c’est
Crunch qui optimise
Elles peuvent s’enchainer sans sérialisation
Cycle de vie : initialize, process et cleanup
DoFn
17
Principales sous-classes
FilterFn
BloomFilterFn
MapFn
JoinFn
CombineFn
DoFn
18
Exemple sur un use case
19
Un ficher de stock à date d’hier
Un fichier de mouvements
  Pas de lignes si pas de mouvement pour une journée
  Plusieurs lignes si plusieurs mouvements le même jour
On veut pour chaque ‘magasin’ et jour la position du stock d’un article
  Magasin = (MARQUE, MAGASIN, TYPE_STOCK)
  Jour = DATE
  Article = ARTICLE
  Position = QUANTITE ou DELTA
Le use case
20
Produire les snapshots des stocks
Stock1, J
Stock
....
Stock2, J
Stock3, J
Stock4, J
J-3
Mouvement
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
J
J-365
J-2
J-3
J-2
....
J-1
J-3,
J-4
J
J-1
J-5
Stock
....
Stock1Stock4
21
Produire les snapshots des stocks
Stock1, J
Stock
....
Stock2, J
Stock3, J
Stock4, J
J-3
Mouvement
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
J
J-365
J-2
J-3
J-2
....
J-1
J-3,
J-4
J
J-1
J-5
Stock
....
Stock1Stock4
J
....
J
J
J
J-3
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
Delta
Delta
Extract
Extract
1
2
22
Produire les snapshots des stocks
Stock1, J
Stock
....
Stock2, J
Stock3, J
Stock4, J
J-3
Mouvement
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
J
J-365
J-2
J-3
J-2
....
J-1
J-3,
J-4
J
J-1
J-5
Stock
....
Stock1Stock4
J
....
J
J
J
J-3
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
Delta
Delta
Extract
Extract
J
J
J
J
J-3
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
Delta
UNION
1
2
3
23
Produire les snapshots des stocks
Stock1, J
Stock
....
Stock2, J
Stock3, J
Stock4, J
J-3
Mouvement
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
J
J-365
J-2
J-3
J-2
....
J-1
J-3,
J-4
J
J-1
J-5
Stock
....
Stock1Stock4
J
....
J
J
J
J-3
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
Delta
Delta
Extract
Extract
J
J
J
J
J-3
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
Delta
UNION
J
J
J
J
J-3
....
J-10
J-7
J-1
J-7
J-5
J-2
J-8
Delta
Stock1Stock2Stock3Stock4
datedescdatedatedate
Sort
1
2
3
4
24
Produire les snapshots des stocks
Stock1, J
Stock
....
Stock2, J
Stock3, J
Stock4, J
J-3
Mouvement
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
J
J-365
J-2
J-3
J-2
....
J-1
J-3,
J-4
J
J-1
J-5
Stock
....
Stock1Stock4
J
....
J
J
J
J-3
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
Delta
Delta
Extract
Extract
J
J
J
J
J-3
....
J-10
J-8
J-1
J-7
J-5
J-2
J-7
Delta
UNION
J
J
J
J
J-3
....
J-10
J-7
J-1
J-7
J-5
J-2
J-8
Delta
Stock1Stock2Stock3Stock4
datedescdatedatedate
Sort Fill
1
2
3
4
2
25
Le code est disponible ici :
  https://github.com/pkernevez/CrunchTDD
Démo
26
Take away
27
Checkpoint (SourceTarget)
 Crunch vérifie si les fichiers de sortie sont antérieurs aux fichiers d’entrée
  lines.write(At.textFile("/user/crunch/out"), WriteMode.CHECKPOINT);
Mécanisme de configuration des Jobs par sérialisation
Visualiser les plans d’exécution
pipeline.runAsync().getPlanDotFile();
Démarrer :
 Documentation Crunch
https://github.com/BenJoyenConseil/crunch-bof.git
Les erreurs lors du déploiement
 Sérialisation
 Référence conservée sur les paramètres
Les petits plus…
28
+Philippe Kernevez
@pkernevez
pkernevez@octo.com
29
recrutement@octo.com
Vous croyez que les technologies changent le
monde ?
Nous aussi ! Rejoignez-nous !

Contenu connexe

Similaire à Softshake 2015 - test driven map reduce development with crunch

Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQLBruno Bonnin
 
Reunion nationale karuta nov 2020
Reunion nationale karuta nov 2020Reunion nationale karuta nov 2020
Reunion nationale karuta nov 2020Eric Giraudin
 
Synchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplementSynchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplementgplanchat
 
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Benoît de CHATEAUVIEUX
 
Titanium studio et les modules
Titanium studio et les modulesTitanium studio et les modules
Titanium studio et les modulesGautier Pialat
 
2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanneDidier Durand
 
Vision et poc EDFsur les enjeux big data
Vision et poc EDFsur les enjeux big dataVision et poc EDFsur les enjeux big data
Vision et poc EDFsur les enjeux big dataBruno Patin
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQLBruno Bonnin
 
Bato Base Arrêt Transport Ouverte
Bato Base Arrêt Transport OuverteBato Base Arrêt Transport Ouverte
Bato Base Arrêt Transport OuverteFabMob
 
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...Christian Cousquer
 
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
 
TP Fouille de données (Data Mining) et Apprentissage Machine
TP Fouille de données (Data Mining) et Apprentissage MachineTP Fouille de données (Data Mining) et Apprentissage Machine
TP Fouille de données (Data Mining) et Apprentissage MachineBoubaker KHMILI
 
20100608 01 - Points de fonctions (Renault)
20100608 01 - Points de fonctions (Renault)20100608 01 - Points de fonctions (Renault)
20100608 01 - Points de fonctions (Renault)LeClubQualiteLogicielle
 
Croisière sur le data lake
Croisière sur le data lakeCroisière sur le data lake
Croisière sur le data lakeDavid Morel
 
180927 opeo @ carrefours excellence (2)
180927   opeo @ carrefours excellence (2)180927   opeo @ carrefours excellence (2)
180927 opeo @ carrefours excellence (2)Renan Devillieres
 
Monitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaMonitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaPatrick Allaert
 
Développement avec Java Micro Edition
Développement avec Java Micro EditionDéveloppement avec Java Micro Edition
Développement avec Java Micro EditionSylvain Wallez
 

Similaire à Softshake 2015 - test driven map reduce development with crunch (20)

Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQL
 
Chapitre 2
Chapitre 2Chapitre 2
Chapitre 2
 
Reunion nationale karuta nov 2020
Reunion nationale karuta nov 2020Reunion nationale karuta nov 2020
Reunion nationale karuta nov 2020
 
Synchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplementSynchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplement
 
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
 
Titanium studio et les modules
Titanium studio et les modulesTitanium studio et les modules
Titanium studio et les modules
 
2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne2012 02-09-eranea-presentation-jug-lausanne
2012 02-09-eranea-presentation-jug-lausanne
 
Vision et poc EDFsur les enjeux big data
Vision et poc EDFsur les enjeux big dataVision et poc EDFsur les enjeux big data
Vision et poc EDFsur les enjeux big data
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQL
 
Bato Base Arrêt Transport Ouverte
Bato Base Arrêt Transport OuverteBato Base Arrêt Transport Ouverte
Bato Base Arrêt Transport Ouverte
 
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...
Retour d’expérience sur le déploiement d’uPortal 4.2 responsive à l’UPMC – So...
 
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)
 
TP Fouille de données (Data Mining) et Apprentissage Machine
TP Fouille de données (Data Mining) et Apprentissage MachineTP Fouille de données (Data Mining) et Apprentissage Machine
TP Fouille de données (Data Mining) et Apprentissage Machine
 
20100608 01 - Points de fonctions (Renault)
20100608 01 - Points de fonctions (Renault)20100608 01 - Points de fonctions (Renault)
20100608 01 - Points de fonctions (Renault)
 
Croisière sur le data lake
Croisière sur le data lakeCroisière sur le data lake
Croisière sur le data lake
 
180927 opeo @ carrefours excellence (2)
180927   opeo @ carrefours excellence (2)180927   opeo @ carrefours excellence (2)
180927 opeo @ carrefours excellence (2)
 
Monitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaMonitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et Pinba
 
mix-it 2011
mix-it 2011mix-it 2011
mix-it 2011
 
Développement avec Java Micro Edition
Développement avec Java Micro EditionDéveloppement avec Java Micro Edition
Développement avec Java Micro Edition
 
Tsung GIS
Tsung GISTsung GIS
Tsung GIS
 

Softshake 2015 - test driven map reduce development with crunch

  • 1. 1 Tél : +41 21 312 94 15 www.octo.com © OCTO 2015 Avenue du théâtre 7 CH-1005 Lausanne - SUISSE Test Driven MapReduce Development
  • 2. 2 Directeur Technique OSSGTP Member JUGLausanne co-leader Committer MOJO Philippe Kernévez
  • 5. 5 Hadoop / MapReduce ? PIG ? Hive ? Crunch ? Qui connaît…
  • 6. 6 Testabilité ? Exemple de script INSERT OVERWRITE TABLE stats_campaign! SELECT stat.*, stat.total_media_cost/stat.nb_imp as AVG_MEDIA_COST, (stat.nb_click/stat.nb_imp) as ratio_click, (stat.nb_conv/stat.nb_imp) as ratio_conv! FROM (! SELECT ce.campaign_id, ! ce.campaign_name, ! ce.CAMPAIGN_GOAL_TYPE, ! ce.vertical_name, ! min(ce.START_END) as start_end, ! max(ce.LAST_DATE) as last_date, ! ce.STATUS,! s.nb_strategies as nb_stategies, ! sum(ce.NB_IMP) as nb_imp,! sum(ce.nb_click) as nb_click, ! sum(ce.nb_conv) as nb_conv, ! sum(ce.NB_ADEX) as NB_ADEX,! sum(ce.total_media_cost) as total_media_cost, ! min(ce.min_media_cost) as min_media_cost, ! max(ce.max_media_cost) as max_media_cost! FROM stats_campaign_exchange ce! LEFT JOIN (! select md.campaign_id, count(md.id) as nb_strategies! from md_strategies md! group by md.campaign_id! ) s ON s.campaign_id = ce.campaign_id! group by ce.campaign_id, ce.campaign_name, ce.CAMPAIGN_GOAL_TYPE, ce.vertical_name, s.nb_strategies, ce.STATUS! ) stat! 0%
  • 7. 7 Testabilité ? Exemple de script define X `python reducer.py` ship ('./reducer.py'); ! ! set output.compression.enabled true;! set output.compression.codec org.apache.hadoop.io.compress.GzipCodec;! ! mv_a = LOAD 'Mouvement.txt' using PigStorage(',') AS (MARQUE:chararray, DATE:chararray, MAGASIN:int, ARTICLE:int, TYPE_STOCK:int, DELTA:int, SAISON:chararray); ! mv_b = RANK mv_a;! mv_c = FILTER mv_b BY (rank_mv_a > 1); ! ! mv_d = foreach mv_c generate MARQUE, ARTICLE, MAGASIN, TYPE_STOCK, ToDate(DATE, 'dd/MM/yyyy') AS DATE, DELTA ,SAISON, DATE AS DATE_STR;! ! st_a = LOAD 'Stock.txt' using PigStorage(',') AS DELTA:int, MAGASIN:int, TYPE_STOCK:int, SAISON:chararray, DATE:chararray, ARTICLE:int, MARQUE:chararray); ! st_b = RANK st_a;! st_c = FILTER st_b BY (rank_st_a > 1); ! st_d = foreach st_c generate MARQUE, ARTICLE, MAGASIN, TYPE_STOCK, ToDate(DATE, 'dd/MM/yyyy') AS DATE, DELTA ,SAISON, DATE AS DATE_STR;! ! a = UNION mv_d, st_d;! ! b = ORDER a BY MARQUE, ARTICLE, MAGASIN, TYPE_STOCK, DATE DESC;! ! c = STREAM b THROUGH X as ( MARQUE:chararray, ARTICLE:chararray, MAGASIN:chararray, TYPE_STOCK:chararray, DATESTOCK:chararray, QUANTITE:chararray, SAISON:chararray, INFO_1:chararray, INFO_2:chararray);! ! STORE c INTO 'results' USING PigStorage(',');! 20% ?
  • 8. 8 Pig et Hive sont des outils efficaces et simples d’utilisation en phase d’analyse   Ils ne nécessitent pas de compétences de développement Mais cela ne passe pas à l’échelle pour des développements ‘industriels’   Les tuples tapent une limite au dessus de 15 champs   Pas de tests   L’abstraction empêche de tuner la requête et multiplie les Jobs (multi mapjoin, union, etc.) Roundtrip entre une évolution et sa validation Hive et Pig
  • 10. 10 Motivations :   Focus sur le développement   Abstraction minimale des frameworks sous-jacents   Data model (typage versus tuple)   (Bibliothèque de UDFs) Possibilité de faire tourner la même chaine :   In Memory MapReduce Spark Ce qui change avec Crunch
  • 11. 11 Concept Apache Hadoop MapReduce Apache Crunch Apache Pig Apache Spark Cascading Apache Hive Apache Tez Input Data InputFormat Source LoadFunc InputFormat Tap (Source) SerDe Tez Input Output Data OutputFormat Target StoreFunc OutputFormat Tap (Sink) SerDe Tez Output Data Container Abstraction N/A PCollection, PTable, PGroupedTable Relation RDD Pipe Table Vertex Data Format and Serialization Writables POJOs and PTypes Pig Tuples and Schemas POJOs and Java/Kryo Serialization Cascading Tuples and Schemes List<Object> and ObjectInspect ors Events Data Transformati on Mapper, Reducer, and Combiner DoFn PigLatin and UDFs Functions (Java API) Operations HiveQL and UDFs Processor Concepts clés PIPELINE SOURCE TARGET DoFn DoFn PCollection<T> PTable<K,V> Collection<T>
  • 12. 12 Pour lire sur HDFS, Hive, etc. Source<T> et TableSource<K, V> pour lire des PCollection ou des PTables Source
  • 15. 15 Pcollection<T> parallelDo   cache   union Ptable<K, V> parallelDo, cache, union, etc. groupByKey mapKeys / mapValues PGroupedTable<K, V> combineValues( Aggregator ) Les données +/- PTable(K, Iterable<V>> distributed, sorted map of keys of type K to an Iterable that may be iterated over exactly once +/- PCollection<Pair<K, V>> distributed, unordered multimap of its key type K to its value type V Distributed, immutable collection of elements of type T
  • 16. 16 Fonction qui pour chaque donnée en entrée renvoie 0 à n données Une DoFn peut-être exécutée dans un mapper ou un reducer, c’est Crunch qui optimise Elles peuvent s’enchainer sans sérialisation Cycle de vie : initialize, process et cleanup DoFn
  • 18. 18 Exemple sur un use case
  • 19. 19 Un ficher de stock à date d’hier Un fichier de mouvements   Pas de lignes si pas de mouvement pour une journée   Plusieurs lignes si plusieurs mouvements le même jour On veut pour chaque ‘magasin’ et jour la position du stock d’un article   Magasin = (MARQUE, MAGASIN, TYPE_STOCK)   Jour = DATE   Article = ARTICLE   Position = QUANTITE ou DELTA Le use case
  • 20. 20 Produire les snapshots des stocks Stock1, J Stock .... Stock2, J Stock3, J Stock4, J J-3 Mouvement .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 J J-365 J-2 J-3 J-2 .... J-1 J-3, J-4 J J-1 J-5 Stock .... Stock1Stock4
  • 21. 21 Produire les snapshots des stocks Stock1, J Stock .... Stock2, J Stock3, J Stock4, J J-3 Mouvement .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 J J-365 J-2 J-3 J-2 .... J-1 J-3, J-4 J J-1 J-5 Stock .... Stock1Stock4 J .... J J J J-3 .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 Delta Delta Extract Extract 1 2
  • 22. 22 Produire les snapshots des stocks Stock1, J Stock .... Stock2, J Stock3, J Stock4, J J-3 Mouvement .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 J J-365 J-2 J-3 J-2 .... J-1 J-3, J-4 J J-1 J-5 Stock .... Stock1Stock4 J .... J J J J-3 .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 Delta Delta Extract Extract J J J J J-3 .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 Delta UNION 1 2 3
  • 23. 23 Produire les snapshots des stocks Stock1, J Stock .... Stock2, J Stock3, J Stock4, J J-3 Mouvement .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 J J-365 J-2 J-3 J-2 .... J-1 J-3, J-4 J J-1 J-5 Stock .... Stock1Stock4 J .... J J J J-3 .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 Delta Delta Extract Extract J J J J J-3 .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 Delta UNION J J J J J-3 .... J-10 J-7 J-1 J-7 J-5 J-2 J-8 Delta Stock1Stock2Stock3Stock4 datedescdatedatedate Sort 1 2 3 4
  • 24. 24 Produire les snapshots des stocks Stock1, J Stock .... Stock2, J Stock3, J Stock4, J J-3 Mouvement .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 J J-365 J-2 J-3 J-2 .... J-1 J-3, J-4 J J-1 J-5 Stock .... Stock1Stock4 J .... J J J J-3 .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 Delta Delta Extract Extract J J J J J-3 .... J-10 J-8 J-1 J-7 J-5 J-2 J-7 Delta UNION J J J J J-3 .... J-10 J-7 J-1 J-7 J-5 J-2 J-8 Delta Stock1Stock2Stock3Stock4 datedescdatedatedate Sort Fill 1 2 3 4 2
  • 25. 25 Le code est disponible ici :   https://github.com/pkernevez/CrunchTDD Démo
  • 27. 27 Checkpoint (SourceTarget)  Crunch vérifie si les fichiers de sortie sont antérieurs aux fichiers d’entrée   lines.write(At.textFile("/user/crunch/out"), WriteMode.CHECKPOINT); Mécanisme de configuration des Jobs par sérialisation Visualiser les plans d’exécution pipeline.runAsync().getPlanDotFile(); Démarrer :  Documentation Crunch https://github.com/BenJoyenConseil/crunch-bof.git Les erreurs lors du déploiement  Sérialisation  Référence conservée sur les paramètres Les petits plus…
  • 29. 29 recrutement@octo.com Vous croyez que les technologies changent le monde ? Nous aussi ! Rejoignez-nous !