TP Spark
Transcription
TP Spark
M2 DOC 2014-2015 TP Spark Dans ce TP, nous allons faire quelques essais avec Apache Spark, afin de voir ce que permet ce framework et d’apprendre à l’utiliser. Le code de ce TP va être effectué en Scala, qui pour ce que nous allons faire est beaucoup moins lourd que Java. Pas de panique si vous ne connaissez pas ce langage : nous n’allons utiliser que des fonctionnalités très simples de Scala, et des connaissances de base sur les langages fonctionnels vous suffiront. Un petit mémo Scala est fourni à la fin de ce TP, ainsi que des ressources Internet pour aller plus loin. Si ça ne suffit pas, Google is your friendTM. 1. Pour ce TP, nous allons utiliser Spark en local sur votre PC. Pour l’installer c’est très simple : a. Allez sur le site : https://spark.apache.org/downloads.html b. Téléchargez la dernière version (1.1.0 (Sep 11 2014) actuellement), avec pour type de package : Pre-built for Hadoop 2.4, dans un répertoire de votre choix. Vous y aurez donc le fichier : spark-1.1.0-bin-hadoop2.4.tgz c. Décompressez le fichier dans votre répertoire : $ tar xvzf spark-1.1.0-bin-hadoop2.4.tgz d. Un répertoire spark-1.1.0-bin-hadoop2.4 a été créé : placez-vous dans ce répertoire. $ cd spark-1.1.0-bin-hadoop2.4 e. A ce stade, normalement vous avez Spark et il est utilisable. Vérifiez qu’il marche : $ ./bin/spark-shell ……..blablabla…… Spark context available as sc. scala> f. Dans votre navigateur, ouvrez l’UI Spark en allant sur le lien : http://localhost:4040/ Vous devriez voir la page suivante : 2. Nous allons commencer par suivre le « Quick Start » fourni sur le site de Spark, histoire de se mettre en jambe : a. Allez sur la page https://spark.apache.org/docs/latest/quick-start.html b. Faites les sections « Basics » et « More on RDD Operations » (la version Scala !), qui effectuent des analyses basiques sur le fichier README.md de Spark. Les chiffres de la page web correspondent-ils à votre version de README.md ? M2 DOC 2014-2015 c. A la fin de la section « More on RDD Operations », vous avez un RDD appelé wordCounts qui contient des paires (mot, nombre d’occurrences du mot). Mais comme vous l’avez remarqué à l’affichage, ce RDD n’est pas trié… Utilisez ce que nous avons vu en cours pour trier le RDD par ordre décroissant des nombres d’occurrences des mots. Affichez le top-50 des mots les plus fréquents. d. En utilisant judicieusement la fonction Scala zip ou une de ses variantes, essayez, pour les 50 mots les plus fréquents, de leur rajouter leur rang puis d’afficher ça proprement. L’output désiré est du type : 0: (158) 1: the (28) 2: to (19) 3: Spark (18) e. Horreur ! Nous nous apercevons alors que la fonction split nous a trahi et a compté la chaîne vide "" comme un mot, qui est le plus fréquent ! Comment pourriez-vous corriger votre pipeline Spark avec un minimum de travail, et obtenir le top-50 correct ? Félicitations, vous avez atteint le checkpoint Alpha ! Appelez votre chargé de TP pour lui montrer votre top 50. 3. Maintenant, nous allons traiter du (un peu) Big Data car après tout, Spark est fait pour ça ! Sur le share, vous trouverez un fichier AOL-01.txt, copiez le sur votre compte. Ce fichier est un log réel du (défunt) moteur de recherche AOL, avec de nombreuses requêtes utilisateurs et les liens qu’ils ont cliqué dans les résultats (plus de détail dans AOL_README.txt, également sur le share). Nous allons effectuer quelques analyses sur les requêtes effectuées. a. Chargez le fichier dans un RDD comme vous avez appris à le faire précédemment. b. Faites quelques tests : comptez le nombre de lignes dans le RDD, cherchez toutes les lignes contenant un mot de votre choix. c. Faites un RDD contenant uniquement la partie « Query » des lignes du log AOL. d. Faites un nouveau RDD dérivé du précédent, mais contenant uniquement les requêtes avec des répétions de mot (ex : « the war of the worlds »). Quel pourcentage du nombre total de requêtes cela représente-t-il ? e. Faites, comme dans la partie précédente, un RDD indiquant pour chaque mot sa fréquence dans les requêtes, trié par ordre décroissant de fréquence. Produisez le top 50 des mots les plus recherchés. Attention, quand on parle de fréquence, on veut juste le nombre d’apparition du mot dans les requêtes, sans considérer les apparitions multiples du mot dans une requête. f. On veut maintenant savoir si les gens écrivent des requêtes plutôt longues ou courtes. Produisez une liste des tailles de requêtes (en nombre de mots), ordonnées de façon décroissante. On se contentera du top 20. Félicitations, vous avez atteint le checkpoint Bravo ! Appelez votre chargé de TP pour lui montrer vos résultats M2 DOC 2014-2015 4. Pour terminer ce TP, nous voudrions fournir les éléments nécessaires à une suggestion de requête « à la Google ». Votre objectif est de calculer un RDD qui associe à chaque mot, les 5 mots apparaissant le plus fréquemment avec lui dans une requête. Voilà une ligne du résultat attendu, correspondant au mot « france » : (france,List((in,131), (paris,107), (of,95), (air,66), (from,42))) Pour cette question plus délicate nous ne vous guidons pas. C‘est à vous d’imaginer les étapes nécessaires à réaliser cette tâche, et à construire l’enchaînement de RDD l’implémentant. Regardez bien la doc des RDD pour voir ce qu’ils vous offrent. En Scala, vous pouvez regarder sur Google le concept de « list comprehension », qui pourra vous faciliter la vie au début. Félicitations, vous avez atteint le checkpoint Charlie ! Appelez votre chargé de TP pour lui montrer vos résultats Scala in a tiny nutshell Déclarer des variables : val nomVariable = expression Modifier les éléments d’une liste L : L.map(closure) où closure est une fonction anonyme. Exemple de closure : x => x+1 (si x est numérique) Paires : si p est une paire (x, y), p._1 accède à x et p._2 accède à y. Comparer des chaînes : utilisez == (et pas equals, ici c’est différent de Java !) Vous avez de nombreuses conversions entre les différentes collections Scala : fonctions toList, toArray, toSet… Ressources internet - https://twitter.github.io/scala_school/ (fait par les développeurs de twitter) http://www.scala-tour.com/#/welcome http://scalatutorials.com/tour/interactive_tour_of_scala_overview.html http://docs.scala-lang.org/cheatsheets/ pratique : tout sur une page