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