Hadoop et Spark de la fondation Apache: Du Big Data Distribué au Machine Learning

Je vous avais déjà par­lé d’Hadoop dans cet arti­cle sur “Lim­ites des SGBDR pour le Big Data, NoSQL et NewSQL”. Hadoop est un frame­work libre et open source écrit en Java des­tiné à faciliter la créa­tion d’ap­pli­ca­tions dis­tribuées pour le stock­age de don­nées, per­me­t­tant aux appli­ca­tions de tra­vailler avec des mil­liers de nœuds et des pétaoctets de don­nées ! Rien que ça… Et Spark ? C’est un peu la même chose… en mieux ? Oui et Non… je ne peux pas répon­dre sans vous présen­ter le tout. C’est pas si com­pliqué vous allez voir. Et cerise sur le gâteau, on va par­ler de Machine Learn­ing également !

Apache Hadoop: le linux du Big Data ?

Pour la petite his­toire, Tout a com­mencé en 2004, lorsque Google pub­lie un arti­cle présen­tant son algo­rithme basé sur des opéra­tions ana­ly­tiques à grande échelle sur un grand clus­ter de serveurs, le MapRe­duce, ain­si que son sys­tème de fichi­er en clus­ter, le GoogleFS. Doug Cut­ting, qui tra­vaille à cette époque sur le développe­ment de Apache Lucene et ren­con­tre des prob­lèmes sim­i­laires à ceux de Google, décide alors de dévelop­per sa pro­pre ver­sion des out­ils en ver­sion Open Source, qui devien­dra le pro­jet Hadoop.

Hadoop, c’est aus­si un écosys­tème logi­ciel car il est la base de nom­breux out­ils, parmis lesquels:

  • Hbase: SGBD non-rela­tion­nel, dis­tribué, écrit en Java, et dis­posant d’un stock­age struc­turé pour les grandes tables. Comme BigTable, HBase est une base de don­nées ori­en­tée colonnes. Hive, c’est la ver­sion rela­tion­nelle ! On en repar­le plus loin.

  • Mahout: implé­men­ta­tions d’al­go­rithmes d’ap­pren­tis­sage automa­tique dis­tribués. Nous en repar­lerons dans la sec­tion Machine Learn­ing.

  • Spark:Non, pas la mes­sagerie 😉 C’est un peu la suite d’Hadoop… plus rapi­de que MapRe­duce. En 2014, Spark a gag­né le Day­tona GraySort Con­test dont l’ob­jec­tif est de tri­er 100 To de don­nées le plus rapi­de­ment pos­si­ble. Ce record était préal­able­ment détenu par Hadoop. Pour ce faire, Spark a util­isé 206 machines obtenant un temps d’exé­cu­tion final de 23 min­utes alors que Hadoop avait lui util­isé 2100 machines pour un temps d’exé­cu­tion final de 72 min­utes. La puis­sance de Spark fut démon­trée en étant 3 fois plus rapi­de et en util­isant approx­i­ma­tive­ment 10 fois moins de machines.

Et c’est sans par­ler de Ambari, Avro, Cas­san­dra, Chuk­wa, Pig, Tez et ZooKeep­er.

Hadoop peut-être util­isé dans un cloud tra­di­tion­nel. Par exem­ple, il est pos­si­ble d’exé­cuter Hadoop sur Ama­zon Elas­tic Com­pute Cloud (EC2) et sur Ama­zon Sim­ple Stor­age Ser­vice (S3). Ain­si que sur Microsoft Azure.

Apache Spark

Présen­té comme je l’ai fait, on se dit que Spark est dif­férent d’Hadoop et on se demande même pourquoi je ne par­le pas unique­ment de Spark vu les lam­en­ta­bles résul­tats d’Hadoop…

Hadoop, c’est un sys­tème de fichiers dis­tribué HDFS (Hadoop Dis­trib­uted File Sys­tem), l’im­plé­men­ta­tion de Mapre­duce, c’est un SGBD dis­tribué (Hive, Hbase), et d’autres out­ils comme vu ci-dessus. Spark était un pro­jet dif­férent à l’o­rig­ine, mais il est venu se gref­fer au pro­jet pro­gres­sive­ment. À l’o­rig­ine, en 2009, son développe­ment est une solu­tion pour accélér­er le traite­ment des sys­tèmes Hadoop. Ce n’est qu’en 2013 qu’il rejoin­dra offi­cielle­ment la fon­da­tion Apache.

Si les deux out­ils sont par­fois con­sid­érés comme des con­cur­rents, il est sou­vent admis qu’ils fonc­tion­nent encore mieux quand ils sont ensem­ble. C’est là toute la com­plé­men­tar­ité ! Tous deux sont des frame­works big data, mais Hadoop est essen­tielle­ment une infra­struc­ture de don­nées dis­tribuées. Spark sait tra­vailler avec des don­nées dis­tribuées. Mais il ne sait pas faire du stock­age dis­tribué. Il a donc besoin de s’appuyer sur un sys­tème de stock­age dis­tribué. Toute­fois, il est pos­si­ble d’utiliser Hadoop indépen­dam­ment de Spark et récipro­que­ment. Dans ce cas, Spark devra quand même s’ap­puy­er sur un autre sys­tème de fichiers, comme celui pro­posé par un cloud par exemple.

Voilà, il y a d’autres dif­férences, mais vous con­nais­sez les prin­ci­pales et surtout vous aurez de quoi de dis­cuter durant les longues soirées mondaines entre développeurs… ah, ça n’ex­iste pas ? Bon, les dis­cus­sions coca/chips à l’heure de l’apéro, ou la pause café à coté de la machine ! Si, c’est bon de socialis­er et de faire des paus­es, je vous assure.

Vous allez com­pren­dre pourquoi Spark m’in­téresse le plus dans cette his­toire. Mais avant cela, par­lons des out­ils liés à Spark:

  • Spark SQL : per­met d’exé­cuter des requêtes SQL qui peut être util­isé pour traiter n’importe quelles don­nées, quel que soit leur for­mat d’origine

  • Spark Stream­ing: offre à son util­isa­teur un traite­ment des don­nées en flux.

  • Spark Graph X : per­met de traiter les infor­ma­tions issues de graphes.

Mais surtout:

  • Spark MLlib: C’est une bib­lio­thèque d’appren­tis­sage automa­tique, apparue dans la ver­sion 1.2 de Spark, qui con­tient tous les algo­rithmes et util­i­taires d’ap­pren­tis­sage clas­siques, comme la clas­si­fi­ca­tion, la régres­sion, le clus­ter­ing, le fil­trage col­lab­o­ratif et la réduc­tion de dimen­sions. Bien enten­du, nous revien­drons sur cette librairie plusieurs fois sur ce blog 😉

Pour aller plus loin

J’en prof­ite pour vous livr­er quelques infos de mon flux de veille sur le sujet.

Pour Hadoop:

  • La FAQ Hadoop sur devel­oppez est sym­pa aus­si. Un arti­cle “Hadoop : la nou­velle infra­struc­ture de ges­tion de don­nées” présente de façon syn­thé­tique le fonc­tionne d’Hadoop.

  • Pour installer Hadoop, choisir sa dis­tri­b­u­tion, etc. Xebia les spé­cial­istes du Big Data et du Machine Learn­ing vous ont con­coc­té un arti­cle sur la ques­tion.

  • Je vous pro­pose égale­ment un petit arti­cle qui par­le des dif­fi­cultés à déploy­er une telle solu­tion en entre­prise, car cela demande des com­pé­tences trans­ver­sales rares et que les dirigeants ont sou­vent des attentes irréalistes.

  • Un arti­cle de Juvé­nal Choko­goue sur devel­oppez par­lant de “Le SQL dans Hadoop : Hive­QL et Pig”. On y décou­vre l’in­fra­struc­ture de Hive et l’écri­t­ure des requêtes Hive­QL (Hive Query Lan­guage) qui est util­isé pour adress­er des requêtes aux don­nées stock­ées sur le HDFS sous une forme SQL. Et Pig, c’est la solu­tion de Yahoo pour faire la même chose, ces derniers ayant estimé qu’une solu­tion basée sur le SQL ne pou­vait pas suff­isam­ment cou­vrir la com­plex­ité de la pro­gram­ma­tion de cer­taines tâch­es MapReduce.

Pour Spark:

  • Un petit tuto pour appren­dre à utilis­er Spark dans le cadre d’une requête sur une grosse base. C’est très intéres­sant car on bal­ance un gros CSV, la con­fig est rapi­de et on voit com­ment manip­uler les don­nées, puis effectuer des requêtes. C’est une très bonne intro en français. Et on nous promet une sec­onde par­tie com­ment faire du machine learn­ing avec l’API Spark MLlib ! Miam !

  • Spark est plus puis­sant et plus sim­ple à utilis­er que MapRe­duce, mais com­ment tester du code Spark ? La réponse dans cet arti­cle par Xébia. Et on revient sur la La pro­gram­ma­tion fonc­tion­nelle ! (vous vous rap­pelez, on en a par­lé avec Haskell que je trou­vais inutile). Car oui, Spark fait usage de la pro­gram­ma­tion fonc­tion­nelle. One ne peut pas tester un frame­work mais seule­ment les com­porte­ments fonctionnels.

  • Une bonne intro­duc­tion à Spark Mllib par Xébia. On y apprend que les lim­ites de Mahout étant rapi­de­ment atteintes lorsque l’on a affaire à de gros jeux de don­nées à cause du coté itératif de la plu­part des algo­rithmes de Machine Learn­ing. 2 arti­cles au final, l’un théorique et l’autre pra­tique. J’en­vis­age de faire une vidéo prochaine­ment sur le sujet, dites moi si cela vous intéresse. J’ai vu qu’ils avaient pub­lié sur Devel­oppez égale­ment avec du code source sur Github… à voir, cela sem­ble redondant.

  • Une présen­ta­tion de SparkR, la nou­velle API de Spark pour pro­gram­mer en R (lan­gage adap­té aux stats)

Conclusion

Voilà, j’e­spère que cet arti­cle vous a don­né envie d’aller plus loin dans la démarche d’ap­pren­dre et com­pren­dre cet écosys­tème logi­ciel. En gros, pour résumer: Avec Spark/Hadoop, vous pou­vez traiter de gros vol­umes de don­nées de façon dis­tribuée, sur des cloud tra­di­tion­nels, tout en trai­tant ces dernières avec des out­ils de machine learn­ing. Comme mes cen­tres d’in­térêt tourne autour de la 3D, du machine Learn­ing et de la robo­t­ique, vous com­prenez qu’on va vite en reparler…

Laisser un commentaire

Fièrement propulsé par WordPress | Thème : Baskerville 2 par Anders Noren.

Retour en haut ↑

%d blogueurs aiment cette page :