Vous êtes sur la page 1sur 12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

Amliorer la performance des jobs Hadoop sur


HDInsight
Post le 26/06/2014 - par Benjamin Joyen-Conseil
Cela fait quelque temps que jexprimente des Tips & Tricks sur mes algos pour traiter de
la data de faon performante et comme a a t plutt concluant dans mon cas, jai mis
tout a au propre pour les partager ici avec vous.

14

Tweeter

Les quatre optimisations que je prsente ici vont faire passer le temps dexcution de 45 minutes moins de
3 minutes. La plus importante tant le passage dun script Pig un code MapReduce.
Je tiens prciser que cet article nest pas une comparaison de performance, il se base sur les connaissances
que je possde un instant T. Il est volontairement subjectif, il explique mon cheminement et les solutions
que jai trouves pour rsoudre mes problmes. Cependant, le blog Octo est un endroit de partage et je
vous invite vivement commenter et partager votre exprience.
Mon use case est simple, je POC avec un cluster Hadoop instanci sur Azure, je reviendrai plus tard sur
quelques avantages etinconvnients l-dessus, mais pour les personnes qui voudraient en savoir plus:
Hadoop in da cloud
Big data selon Microsoft
Mon cluster est compos de 4 nuds, totalisant 24 curs et 24 Go de
RAM. Ma donne se trouve tre les logs de Wikipdia rcuprs au
pralable sur Page view statistics for Wikimedia projects. Je passe la rcupration et la
prparation des logs qui nest pas lordre du jour.
Pour vous donner un ordre dide, le cluster contient 1,3 To de donnes qui correspondent lanne 2014
incomplte lheure o jcris ces lignes. Jai plac toute cette donne sur un stockage persistant dans le
Cloud Azure appel Azure Storage Vault(ASV). Ce stockage est branch au cluster Hadoop. Un cluster
HDInsight utilise par dfaut ce systme de fichier la place dHDFS et stream la donne dentre, puis utilise
HDFS pour les tapes intermdiaires des jobs.
La version HDInsight utilise pour ces tests est la 3.0qui embarque Hadoop 2.2. Voici la documentation sur les
versions embarques par HDInsight.
Deux points:
Lutilisation dASV comme systme distribu en lieu et place dHDFS me permet dalimenter en donnes
ce systme de fichier distribu sans quun cluster Hadoop soit instanci. Je fais donc de grosses
conomies dargent.
Jai la possibilit de consulter les rsultats de mes jobs Hadoop dune autre manire que par lutilisation
des commandes hadoop fs ou via linterface WebHDFS. Il existe pour cela une API daccs ASV
dans plusieurs langages et plateformes (Java, .Net, Javascript, PHP, Python, etc) ainsi que des
explorateurs de fichiers. En voici un que je vous conseille: CloudXplorer dans sa version gratuite 1.0

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

1/12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

Parler de performance quand les donnes


transitent par le rseau?
En effet, le principe de base dHadoop et du paradigme Map Reduce est bien la co-localisation des binaires
avec la donne. En passant par des plateformes cloud comme HDInsight la donne nest pas prsente sur les
nuds physiquement (si on utilise ASV la place dHDFS, ce qui est par dfaut), mais dans un systme de
fichiers externe. On perd donc lavantage de dpart qui consiste dplacer le code vers la donne et non
linverse (Moving data to compute or compute to data? That is the Big Data question).
Mais lquipe dAzure a r-architectur ASV il y a 2 ans pour anticiper larrive du service HDInsight.
Dans le schma ci-contre, HDInsight se situe sur les Compute Nodes alors que les donnes sont situes
sur des Blobs ASV comme lexplique Denny Lee dans son billet Why use Blob Storage with HDInsight on
Azure, anciennement dans la Team SQL Server.

Azure a dploy un systme appel Azure Flat Network Storage (ou Q10) en 2012 pour apporter aux clients
une trs haute disponibilit de la donne. Le rsultat donne une performance similaire HDFS en lecture
(cest--dire: 800Mo/s) et est plus rapide en criture. Lorsquun nouveau fichier est persist sur HDFS il
crit sur le premier nud, puis une fois la tche termine il rplique sur le deuxime et aprs passe la
rplication sur le troisime nud. ASV lui duplique aussi 3 fois la donne dans le Datacenter local, il
commence par la persister une premire fois puis fonctionne en asynchrone pour les deux rplications. Ce
qui explique la ractivit dcriture sur ASV (en ralit lcriture physique est aussi rapide). Dans son tat
de lart de 2013 sur les stockages cloud, lentreprise Nasuni explique que le systme Q10 opt par Microsoft
est 56% plus rapide que le second en criture et de 39% en lecture sur ses benchmarks.

Que fait le Job?


Avec les logs de 2014 rcuprs, nous avons un fichier texte de 400Mo environ, par heure de la journe. Ce
fichier contient le nom des pages Wikipdia, la langue de ces pages et le nombre de visites sur ces pages.
Une ligne dexemple:
frCoupe_du_monde_de_foot_du_Bresil1898299
Le nom des fichiers contient la date et lheure auxquels il se rfre.
Exemple: pagecount2014006171800000.txt => de 18H 19 H, le 17 juin 2014

Lalgorithme
Mon programme possde trois filtres:
Filtrer par langue dintrt (je ne sais pas lire le chinois)
Filtrer par date et ainsi restreindre lanalyse un jour, un mois ou toute une anne.
Filtrer certains noms de page de Wikipdia inintressants dans notre cas. Par exemple: index, Accueil,
undefined.
Deux GroupBy:
Grouper les lments par nom de page pour totaliser les nombres de visites par page.
Grouper les lments par langues pour le top 10 de chacune des langues.
Un OrderBy Desc:

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

2/12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

Ordonner les lments par ordre dcroissant du nombre total de visites pour chaque langue.
Un Top:
Limiter le rsultat me semble indispensable sachant que pour une journe le nombre de records est gal
180 millions.

Le script PIG qui en dcoule:


01
02
03
04
05

18
19

REGISTERwikipedia.jar;
DEFINECustomInputwikipedia.pig.FileNameTextLoadFunc('20140605');
DEFINESIMwikipedia.pig.SimilarityFunc();

records=LOAD$inUSINGCustomInputAS(filename:chararray,lang:
chararray,page:chararray,visit:long);

filterbylang=FILTERrecordsBYlang=='fr'ORlang=='en'ORlang==
'de';

restrictions=LOAD$restrictionFileUSINGTextLoader()AS(page:
chararray);

joinbypage=JOINfilterbylangBYpageLEFTOUTER,restrictionsBYpage
USING'replicated';

deleteRestrictedWords=FILTERjoinbypageBYSIM(filterbylang::page,
restrictions::page)==false;

groupbypage=COGROUPdeleteRestrictedWordsBY(filterbylang::page,
filterbylang::lang);

sumrecords=FOREACHgroupbypageGENERATEgroup.lang,group.page,
SUM(deleteRestrictedWords.filterbylang::visit)ASvisit_sum;

groupbylang=GROUPsumrecordsBYlang;

20
21
22
23
24
25
26
27

top20=FOREACHgroupbylang{
sorted=ORDERsumrecordsBYvisit_sumDESC;
top=LIMITsorted20;
GENERATEgroup,flatten(top1);
};

storetop20into$out;

06
07
08
09
10
11
12
13
14
15
16
17

CustomInput est une UDF (User Defined Function) de type Load que jai implment pour parser le nom du
fichier log et rcuprer la date afin de la fournir dans chaque record. De plus, dans ce CustomInput jai plac
un InputPathFilter de mon cru afin de filtrer ds le dpart la fentre temporelle sur laquelle je fais mon
analyse (une journe, une semaine, un mois, etc). a vite notamment de rcuprer toute la donne de
2014 (= beaucoup moins de transit rseau), pour ensuite avoir la filtrer dans le Map.

SIM est une UDF de type Eval (on lutilise afin de filtrer les records quon ne veut pas dans le rsultat final =>

les restrictions). Elle teste la similarit dune expression par rapport une autre. Il y a un peu de calcul.

Lancement du script sur le cluster


Je lance le script Pig sur une journe, ce qui correspond environ 8,5 Go de texte. Et l, jattends Jattends
mme super longtemps pour avoir un rsultat puisque le job Pig va tourner pendant prs de 45 minutes !!

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

3/12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

Jai rcupr dans la console les logs de Pig pour les analyser. Jen ai fait des beaux graphiques!

Pig a cr trois jobs Map Reduce:


1erjob : filtre par langue, fait la jointure entre les records et les restrictions, filtre les pages valides;
2me job: opre le regroupement des pages avec le mme nom et totalise les visites;
3me job: regroupe par langue les pages, puis limite pour chaque langue 20 pages;

Daprs le graphique ci-dessus je maperois que Pig cre un nombre considrable de tches de reduce
dans le premier Job (999!). En fait, Pig procde par une jointure de type Reduce side entre les deux
data-set (celui avec les logs Wikipdia et celui avec les restrictions, beaucoup plus petit). Notre cluster
possde 4 nuds, jai alors 22 containers. Pig est assez intelligent pour setter le maximum de reducers
possible. Donc les 999 tches sont traites par 22. Si je prends la moyenne des tches de reduce pour le
job_1 (dans le graphique Job_Stats) qui est de 20 secondes :

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

4/12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

Jai trouv mon bottle neck. Je marrte ici pour le script Pig, jai fait le choix de ne pas loptimiser (ce qui
serait possible) pour mintresser aux optimisations sur le paradigme MapReduce et supprimer ces 999
reducers.

On casse tout, et on recommence


Jcris donc mon propre code Java from scratch, produisant strictement le mme rsultat afin de
comparer. Et cest l o a devient intressant. Pour les curieux, le code est sur Github cette adresse:
https://github.com/BenJoyenConseil/octo-hadoop-perf
Vous avez la possibilit de rcuprer dans le repository le script Pig ainsi que les deux UDF qui sont utilises
dans ce script. En cadeau bonux, il y a des tests, donnant un aperu de comment tester du code MapReduce
(PigUnit existe aussi pour les scripts).

Premire optimisation: passer un code MapReduce


En accord avec larticle de Ilya Katsov, MapReduce Patterns, Algorithms, and Use Cases que je vous
conseille de lire, je choisis un mlange dalgorithmes de types Filtering et GroupBy and Aggregation.
Voici en quelques points les choix opts:
Mettre les restrictions dans le cache local avec la mthode job.addCacheFile() pour filtrer dans les tches
de map directement (Join Map Side). Je pars du principe que le data-set de restrictions nest pas
volumineux (quelques Ko seulement).
Filtrer les langues avec le mme procd que pour les restrictions.
La cl de sortie du mapper est la langue. Les records seront rpartis lappel du HashPartitioner par
langue sur les reducers (lors du shuffle). Un reducer sera en charge de traiter en entier une langue.
Lidal tant davoir autant de reducers que de langues filtres.
La valeur de sortie du mapper est un Objet contenant le nom de la page et le nombre de visites en
attributs.
Le reducer fait un top 10 par langue des records qui lui arrivent.
Mon main Java lance successivement 5 fois le mme Job tout en mesurant chaque fois le temps
dexcution, puis crit la fin la dure moyenne dexcution.
Je vous donne les rsultats directement. Le moins que je puisse dire est que le gain de temps est
consquent.
Job (sur 1 journe)

temps dexcution (s)

Job 1

402

Job 2

385

Job 3

406

Job 4

393

Job 5

383

Moyenne (min)

6,5

BOUM! Ce job met en moyenne 6 minutes 30 traiter ce que faisait Pig en 45 minutes. Lacclration est
flagrante, mais je ne suis pas encore satisfait. Je vais donc sur HDInsight pour ouvrir le dashboard Web de
monitoring appel Hadoop Yarn Status.

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

5/12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

Deuxime optimisation: utiliser un Combiner


Je slectionne une des 5 applications (le job est lanc 5 fois de suite) dans la section Applications, puis je
clique sur Tracking Url.

Dans le rsum du Job, je clique ensuite sur Counters et voici ce que je vois:

Le cluster possde 4 machines et 24 curs, ce qui fait 23 task containers (24-1). Mon job analyse 4
langues, jai donc modifi le nombre de reducers 4. Donc il ne reste plus que 19 containers pour les
mappers. Les mappers peuvent absorber beaucoup de donnes car ils sont nombreux, alors que les reducers
reoivent 2, 5 fois moins de donnes alors quils sont 5 fois moins nombreux. La phase de map rcupre 174
millions de records et filtre 73 millions de records valables pour le reduce. Il ny a donc quun facteur de 2.4
ce qui ne diminue pas assez le volume de records pour ltape finale (cest--dire: en avoir que 10 par
langue).
On constate, de plus, que les 73 millions de records sont spills deux fois, une fois dans le map et une
autre dans le reduce. Ce qui revient un total de 146 millions de records crits sur disque (le spill est le
moment o le ContextBuffer est trop rempli et est vid sur disque pour continuer).
Daprs le Hadoop Definitive Guide: Third Edition, lutilisation dun Combiner serait une solution. Minimiser le
nombre de records qui transitent pendant la phase de Shuffle & Sort vers les reducers. La deuxime solution
serait de faire un top 10 intermdiaire dans les mappers, et dcrire dans le contexte seulement les 25 top10
= 250 records (car il y a 25 splits pour une journe, donc 25 mappers).
Jopte pour la solution 1, avec pour Combiner la classe Reducer que jai dj crite. Cela me fait gagner du
temps par rapport implmenter une logique supplmentaire dans le Mapper, et puis en plus ce nest pas
son rle!
Les rsultats samliorent encore et jarrive passer sous la barre des 4 minutes pour analyser 1 journe.
Job (sur 1 journe)

temps dexcution (s)

Job 1

205

Job 2

201

Job 3

198

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

6/12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

Job 4

195

Job 5

197

Moyenne (min)

3,32

Je constate maintenant que le nombre de records pass aux Reducers a franchement diminu, ainsi que le
nombre de records spills.

Troisime optimisation: plus de containers pour les tches map


Avec lutilisation du Combiner, ma stratgie ne requiert que peu de ressources pour le reduce. La plupart des
traitements se font cot map, lalgorithme est plus efficace car il est devenu mieux paralllisable. Cependant,
quand jobserve le dashboard lors de lexcution du job, toutes les ressources ne sont pas utilises. En effet,
au lieu davoir 22 mappers pour remplir la capacit maximale du cluster, je nen ai que 18.

En ralit, Hadoop rserve des containers pour les tches de reduce ds la fin du premier mapper afin que
les reducers puissent commencer tlcharger les records et les fusionner pendant que les autres
mappers finissent leur travail. Cest plutt intressant, niveau performance, quand il y a beaucoup de records
en sortie des mappers transfrer par le rseau vers les reducers et quil existe trop de splits pour terminer
les calculs en un seul passage.
Attention: il faut distinguer deux choses lorsque lon parle de reduce. Comme lexplique Ed Mazure dans sa
rponse, la phase de reduce est compose de trois parties.
1. Rcupration des records en sortie de map (de 0 33%)
2. Fusion des records ayant les mmes cls (de 33 67 %)
3. Application de la mthode reduce surcharge par lutilisateur (de 67 100%)

De mon ct, trs peu de records sortent des mappers grce au Combiner, donc jai plutt intrt utiliser le
maximum de containers pour la phase de map plutt que dutiliser des containers pour les reducers qui se
tournent les pouces.
Deux proprits dans la configuration du cluster vont mtre utiles:
mapreduce.jobtracker.maxtasks.perjob => cette proprit peut tre mise -1 pour prciser que le cluster

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

7/12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

prendra autant de containers disponibles pour la phase de map.


mapreduce.job.reduce.slowstart.completedmaps => cette proprit sert spcifier le pourcentage (compris
entre 0 et 1) de compltion des mappers partir duquel les reducers sont instancis et commencent
rcuprer les records.
Je modifie la valeur de mapreduce.job.reduce.slowstart.completedmaps 1.0 (la valeur par dfaut est 0,05),
pour que les reducers ne commencent quune fois toutes les tches map termines.
Je teste nouveau:

On peut voir dans la colonne Complete que 24 tches map sont dj traites (plus de 5%), pour autant le
cluster continue de rserver les containers aux tches map qui sont au nombre de 22 dans la colonne
Running.

job

temps dexcution (s)

Job 1

183

Job 2

168

Job 3

172

Job 4

170

Job 5

164

Moyenne (min)

2,856666667

Quatrime optimisation: la taille dun split


Travailler sur Azure amne streamer la donne dASV vers nos nuds de calcul. Ceci peut tre un
inconvnient la performance mme si Q10 donne de bons rsultats. Mais cet inconvnient peut se tourner
en avantage. En effet, le concept de block sur HDFS est la base de la distribution du calcul sur les nuds.
La donne est dcoupe en splits prenant en compte les blocks sur lesquels la donne est distribue. On a
plutt intrt ce moment-l denregistrer la donne avec une taille de block spcifique afin danticiper le
traitement qui sen suit. Un nud traite le block local, partir du moment o il doit le rcuprer dun autre
nud, on perd.
Avec ASV, je pars du principe que de toute faon mes nuds auront tlcharger les donnes o quelles
soient: la co-localisation du code et de la donne nest plus utile. De ce fait, je constate en utilisant un
TextInputFormat que 25 splits sont gnrs, pour une journe de 25 fichiers.
Autant jouer sur la taille des splits, de manire dynamique pour optimiser le nombre de mappers qui
excuteront le traitement et en faire une seule vague. Pour cela, je prends le nombre total de bytes
lentre du job, puis je le divise par 22 containers (ou un multiple du nombre de containers possibles).

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

8/12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

Lavantage que jen ai: tous les splits vont tre traits en une seule fois, jvite le comportement par default:
les 22 premiers splits sont traits dans la premire vague, puis 3 splits sont traits dans la deuxime vague
avec 19 containers inutiliss. Ce quindique la capture suivante >

Le temps total dexcution des tches map quivaut la tche la plus longue de la premire vague ajout la
tche la plus longue de la deuxime vague (en orange):

Cest dommage, autant navoir quune seule vague qui dure un tout petit peu plus (2 minutes). Pour rgler
ce dtail, jutilise alors un InputFormat particulier: CombineTextInputFormat. Il permet de fusionner plusieurs
fichiers dentre, on lutilise notamment pour des jobs sexcutant sur beaucoup de petits fichiers afin
dviter loverhead dune nouvelle instance de mapper procdant un calcul trs court.
De mon ct, je ne lutilise que pour une seule chose: spcifier la taille du split, et cest lui qui va se charger
dagrger les fichiers entre eux et de dcouper la donne en split. Ensuite, les mappers streameront
directement le nombre de bytes prcis quivalent 1/22 de la taille globale.

Et les rsultats:
Job (sur 1 journe)

temps dexcution (s)

Job 1

162

Job 2

161

Job 3

171

Job 4

159

Job 5

157

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

9/12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

Moyenne (min)

2,7

Jai fait une petite courbe dvolution histoire de me rendre compte de la progression:

Lvolution de la courbe varie peu aprs le passage de Pig un code MapReduce. Mais si je me focalise sur
lvolution entre le premier code MapReduce sans optimisation et le dernier avec toutes les optimisations, le
temps dexcution a diminu de plus de la moiti.

Gagner 10% sur un job qui dure 3 minutes nest pas trs reprsentatif mais lchelle dune journe, a
reprsente 2 heures et de demi. a peut tre intressant de grappiller quelques pourcents quand vous avez
beaucoup de jobs lancer, avec une utilisation forte de votre cluster. On peut se demander le gain des
optimisations aprs lapplication dun Combiner par rapport au temps pass. Cest pourquoi jai lanc la
comparaison sur une semaine entire:
avec lutilisation dun Combinerseulement : 16 minutes 45 s en moyenne
avec lajustement de la taille des splits: 12 minutes 28 s en moyenne

Cest la fin
Jestime que mon algorithme est suffisamment optimis pour la suite qui serait de le faire tourner sur toute
une anne. Lanalyse est lance avec 220 mappers pour dcouper les 1,3 To, ce qui (thoriquement) lancera
successivement 10 vagues de mappers. Le job mettra 3 heures sexcuter.
Pour aller plus loin, je pourrais regarder du ct de lquilibrage de mes mappers, afin quils avancent tous
la mme vitesse (il y en a certains qui mettent 10 minutes de moins que dautres). Il serait peut-tre plus
pertinent de dcouper les splits par nombre de records plutt que par nombre de bytes, cette technique
prendrait donc en compte la fin des fichiers. Mais ce sera pour un autre article.

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

10/12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

Je vous invite lire aussi les rfrences ci-dessous qui pourront vous aider votre tour sur lamlioration de
la performance de vos jobs MapReduce.
Les leons apprises:
La performance sur des stratgies de paralllisation dpend fortement de linfrastructure sur laquelle elles
ARCHI & TECHNO
MTHODE
DIGITALISATION
BIG DATA
sexcutent. A nous de faire les rglages pour adapter le code linfrastructure.
Lefficacit dun algorithme MapReduce se trouve dans la capacit mettre le maximum de calculs et
traitements dans les mappers.
Mme si le job sexcute rapidement, explorer les mtriques du tableau de bord Hadoop pour dceler
des problmes ventuellement masqus avant de passer lchelle.
Les optimisations sans mesure ne servent rien. Je ne lai pas retrac ici, mais cest la premire erreur
que jai faite: chercher optimiser le code alors que le problme tait ailleurs.

STRATGIE SI

VNEMENT

Avec tous ces Tips, plus la doc en dessous vous allez tre invincibles!

Rfrences:
Le fichier de configuration MapReduce mapreduce-default.xml dHadoop avec la description de chaque
proprit;
MapReduce Patterns, Algorithms, and Use Cases sur le site Highly Scalable Blog pour comprendre quel
algo correspond quel cas dusage avec une pseudo implmentation MapReduce lappui ;
10 MapReduce Tips sur le blog Cloudera;
12 keys to keep your Hadoop Cluster running strong and performing optimum, dAvkash Chauhan;
Hadoop Performance Tuning le livre blanc de la socit Impetus ;
Why use Blob Storage with HDInsight on Azure de Brad Sarsfield et Denny Lee;
The State of Cloud Storage de lentreprise Nasuni;
Tuning Hadoop on Dell PowerEdge Servers par Donald Russell;
My recent experience with Hadoop;
http://www.youtube.com/watch?v=fXW02XmBGQw

Suggestion d'articles :
1.
2.
3.
4.
5.

GemFire et traitement distribu


Hadoop Summit 2013 Amsterdam CR de deux jours de confrences techniques
Ambari, la supervision de cluster Hadoop
HDInsight : Le Big Data selon Microsoft
Hadoop in da Cloud

Cet article a t post dans archi & techno, big data et taggu big data, Hadoop, HDInsight, Map Reduce,
Microsoft, performance, Pig. Bookmarkez le permalien.

<

Multitches ou ractif ?

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

Perspectives de lhabitat connect


>

11/12

8/7/2015

AmliorerlaperformancedesjobsHadoopsurHDInsight|OCTOtalks!

Laisser un commentaire
Votre adresse de messagerie ne sera pas publie. Les champs obligatoires sont indiqus avec *

Nom *
Adresse de
contact *
Site web
Commentaire

Vous pouvez utiliser ces balises et attributs HTML (HyperText Markup Language): <ahref=""title=""><abbrtitle="">
<acronymtitle=""><b><blockquotecite=""><cite><code><deldatetime=""><em><i><qcite=""><s>
<strike><strong>

Laisseruncommentaire

Notify me of followup comments via e-mail

NOUS CONNATRE

NOTRE MISSION

NOUS REJOINDRE

INTERNATIONAL

Pourquoi OCTO ?

Ce que nous faisons

OCTO attraction

Paris

O trouver OCTO ?

Comment nous le faisons

Nos offres d'emploi

Rabat

L'vnement USI

Publications

tre OCTO

Lausanne

Investisseurs

vnements

FAQ

So Paulo

Academy lite

Sydney

Nos partenaires

Paris | Rabat | Lausanne | So Paulo | Sydney


Sige : 50 avenue des Champs-lyses, 75008 Paris, France | +33 (0)1 58 56 10 00
Contact | Mentions lgales

http://blog.octo.com/ameliorerlaperformancedesjobshadoopsurhdinsight/

12/12

Vous aimerez peut-être aussi