Note : 4 ; Une lecture ardue sur un sujet non moins difficile.
Le Big Data en temps réel ou au fil de l’eau est la grande tendance depuis 2016. Et si Storm a ouvert le bal, la grande vedette est aujourd’hui Spark. Ce nouveau volume de la série » in action » nous propose de faire le tour de Spark et de son écosystème en 14 chapitres totalisant 400 pages !
Spark est un framework Scala. Il fonctionne aussi avec d’autres langages tels quePython, mais avec de nombreuses limitations qui nous conduisent à nous rabattre sur Scala de toute manière ! C’est une petite difficulté, mais elle aurait été moindre si les auteurs n’avaient pas abusé des idiomes tels que le fameux » _ » ! Autre aspect aussi assez frustrant : les auteurs nous amènent les fonctionnalités via le REPL disponible avec le framework. Mais comment se structure donc un développement avec Spark ? C’est une question à laquelle nous n’avons que peu de réponse ! On apprends juste à se servir des fonctionnalités.
La première partie » first steps » couvre une centaine de pages et regroupe 4 chapitres. Le chapitre d’introduction passe assez rapidement sur le map reduce et sur le big data temps réel (comme j’ai déjà quelques idées là-dessus je ne m’en offusque pas), mais fait du très bon travail pour expliquer et illustrer les différents composants de l’écosystème Spark et la manière dont ils s’agencent. Le second chapitre couvre lui deux sujets. Tout d’abord il aborde le setup de Spark ou du moins la distribution proposée par les auteurs sous forme d’un VM Vagrant. Un montage un peu compliqué je dois dire, mais qui doit isoler les problèmes de version de Python par exemple. Il couvre aussi les basiques de la manipulation des RDD. C’est d’ailleurs là que l’on commence à se frotter au REPL Spark…
Le chapitre 3 est précieux : c’est le seul endroit du livre où l’on structure un développement Spark et que l’on crée une classe applicative. Oui, il y en a une seule à ce stade. On aurait aimé aller plus loin. Mais bon au moins on peut initier un développement avec Eclipse. Le dernier chapitre de cette première partie s’inscrit dans la suite du chapitre 2 : l’utilisation des APIs permettant de manipuler les paires RDD. Le partitionning et le data shuffling sont plus ardus à appréhender, mais les diagrammes aident bien là où le code n’offre que des lucarnes de compréhension.
La seconde partie » meet the Spark familly « , ce sont 5 chapitres sur 180 pages, donc la partie la plus volumineuse du livre. Le chapitre 5 qui ouvre cette partie est consacré à Spark SQL. Il faut ici aborder les Dataframes et les APIs associées, un concept autre que les RDS, avec des fonctions de conversion pour passer de l’un à l’autre ! La complexité augmente encore avec les DataSet, un concept qui deviendra central en Spark 2.x mais qui recoupe aussi le RDS… Seules les dernières pages abordent vraiment (et un peu succinctement) la connexion de Spark, par exemple au travers d’un serveur Thrift. Au chapitre 6, c’est au tour d’un composant majeur de Spark d’être abordé : Spark Streaming. Au contraire de Storm, il ne s’agit pas de » tuple par tuple » mais de ce qu’on appelle des mini-batches. Le connecteur Kafka est bien décrit, mais de manière générale, l’illustration avec du code dans le REPL rends la compréhension bien ardue…
Le chapitre 7 aborde les choses très sérieuses : le machine learning via MLLib ! L’introduction au sujet est vraiment excellente, mais au fur et à mesure, les choses se compliquent. Tout d’abord avec un code Scala un peu hard core (trop pour moi), puis en intégrant des aspects mathématiques trop haut perchés pour moi. J’ai abandonné avent la fin du chapitre. L’alternative à MLLib, Spark ML fait l’objet du chapitre 8. Là encore j’accroche bien au début et je décroche à la fin. A noté l’exemple du K-Mean assez parlant n’était-ce un code plutôt obscure quand à lui.
Le dernier chapitre de cette seconde partie est consacrée à GraphX, la librairie de graphe de Spark. Si elle cherche à embrasser les mêmes concepts que Neo4J, il ne faut pas oublier qu’elle emploie surtout la force brute en représentant le graphe sous forme de gigantesques matrices ! Le chapitre est progressif et bien illustré. Associé à des explications claires, j’arrive à suivre malgré le code un poil rugeux (mais il reste ici compréhensible). Cela permet de se frotter à quelques algorithmes très intéressants.
La troisième partie est colorée » ops « . Elle compte 3 chapitres sur 80 pages. Le chapitre 10 » running Spark » qui ouvre le bal est excellent : il évoque les différentes architectures d’exécutions, les clusters Sparks, sur Yarn ou Mesos (au départ Spark était une preuve de concept de Mesos). Les différents modes de configuration et l’outil de monitoring sont également couverts. Bref, les bases sont bien couvertes. Les deux chapitres suivants rentrent plus en profondeur sur les deux modes d’exécution principaux.
Avec le chapitre 11, on rentre dans le dur du mode standalone. Là encore la description est impeccable : configuration, architecture, mode opératoire, etc. On a même droit à la configuration pour EC2 ! Le chapitre est le pendant en mode cluster avec Mesos et Yarn. Curieusement, yarn est largement favorisé. Cette partie est d’un abord moins facile, car elle nécessite une culture Ops que je n’ai pas. Enfin une toute petite partie est consacrée au déploiement avec Docker. Elle est bien trop succincte, un chapitre entier aurait été nécessaire.
La quatrième partie » bringing all together » nous gratifie de 40 pages avec 2 chapitres. Au menu du chapitre 13 : un dashboard temps-réel. Le cas d’utilisation est bien pensé, mais cette fois encore les auteurs s’appuient sur des fragments de 3 lignes éparpillés au long du chapitre. Ce n’est pas ce que j’appelle » bringing all together « , ce serait plutôt illisible. Pour le dernier chapitre, il faut bien s’accrocher car les auteurs nous sortent une nouvelle librairie : H2O. Là c’est de Deep Learning dont il est question. On effleure le sujet en » mode utilisateur « . C’est ce qui nous sauve et rends le chapitre compréhensible.
Mon avis sur le livre est mitigé. D’un côté une grosse frustration lié aux illustrations très fragmentaires par le REPL, associé à un code Scala pas toujours miséricordieux. De l’autre le texte bénéficie de bonnes illustrations et est en fait bien écrit, avec même une dose d’humour inattendue. Je pense que les auteurs auraient dû faire deux livres, en écartant les sujets complexes comme MLLib, Spark ML, Graphx et H2O, et accorder plus de place et du vrai code pour les aspects cœur. Le texte est parfois légèrement teinté d’un aspect » guide de référence » qui n’en rends pas la lecture agréable. Au final une lecture réellement challengeante pour moi !
Référence complète : Spark in Action – Petar Zecevic & Marco Bonaci – Manning 2016 – ISBN : 978 1 61729 260 6