Big Data Analytics Calcul de moyenne mobile avec Hadoop Cécile Bothorel, Romain Picot-Clemente Printemps 2015 1 Objectif L’objectif de cette activité est de réaliser une moyenne mobile simple en MapReduce sur une série temporelle (marché financier), en utilisant Python. 2 Moyenne mobile simple La moyenne mobile simple est une moyenne arithmétique calculée à partir d’une série de données couvrant un intervalle de temps. Elle est obtenue en additionnant chaque valeur de l’intervalle puis en divisant la somme obtenue par le nombre d’intervalles couvert par la période. Par exemple, en sommant les cours de clôture d’une action sur les 25 derniers jours et en divisant la somme obtenue par 25, vous obtiendrez la moyenne mobile simple sur 25 jours. Les données à utiliser se trouvent ici : https://s3.amazonaws.com/hw-sandbox/tutorial1/NYSE-2000-2001.tsv.gz. Il s’agit de deux ans de cours de bourse, fichier environ 11Mo. Stock ticker data from the New York Stock Exchange from the years 2000-2001. Each stock contains the following fields: exchange stock_symbol date stock_price_open stock_price_high stock_price_low stock_price_close stock_volume stock_price_adj_close For example: NYSE ASP 2001-12-31 12.55 12.8 12.42 12.8 11300 6.91 Activité 1 • Réaliser la moyenne mobile simple sur Excel/LibreOffice avec une fenêtre de 30 jours sur le jeu de données 1 Activité 2 • Déplacer le jeu de données dans HDFS • Réaliser la moyenne mobile simple en MapReduce sous Python • Conseil : tester en local sur les 100 premières lignes du fichier avant de déployer votre code et lancer le job Hadoop 3 Utilisation de la machine virtuelle de l’école Cloudera1 fournit une machine virtuelle2 où Hadoop, ainsi qu’un grand nombre d’outils de son écosystème, sont préinstallés. Nous utilisons cette machine virtuelle que nous avons fait installée sur les postes des salles de TP. Démarrage : • Démarrez votre machine virtuelle • La machine virtuelle est en anglais par défaut, gênant pour le clavier... Pour le changer, allez dans la barre de menu de la distribution Linux : System –> Preferences –> Keyboard –> Layouts (A ne faire que la première fois). • Lancez un terminal Manipulation de HDFS Toutes les commandes interagissant avec le système de fichiers Hadoop commencent par hadoop fs. Ensuite, les options rajoutées sont très largement inspirées des commandes Unix standard. Dans la Table 1 nous résumons les commandes les plus utilisées dans Hadoop HDFS. hadoop fs -ls hadoop fs -put file.txt hadoop fs -get file.txt hadoop hadoop hadoop hadoop hadoop hadoop fs fs fs fs fs fs -tail file.txt -cat file.txt -cat file.txt | less -mv file.txt newfile.txt -rm newfile.txt -mkfir myinput Afficher le contenu du répertoire racine Upload un fichier dans hadoop (à partir du répertoire courant linux) Download un fichier à partir de hadoop sur votre disque local Lire les dernières lignes du fichier Affiche tout le contenu du fichier Lire le fichier page par page Renommer le fichier Supprimer le fichier Créer un répertoire TABLE 1 – Principales commandes de manipulation de fichiers HDFS 1 Cloudera : Plateforme de BigData, https://www.cloudera.com/ 2 http://content.udacity-data.com/courses/ud617/Cloudera-Udacity-Training-VM-4.1.1.c. zi 2 Lancer un Job sur Hadoop Lancer un job sur Hadoop implique qu’on fera appel au mapper puis au reducer sur une entrée volumineuse, et qu’on obtiendra à la fin un résultat, directement sur HDFS. Pour faire cela, l’instruction à exécuter sur notre machine virtuelle est du type : hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoopstreaming-2.0.0-mr1-cdh4.1.1.jar -mapper mapper.py -reducer reducer.py -file mapper.py -file reducer.py -input myinput -output joboutput Cette instruction donne en paramètres les fichiers correspondant aux Mappers et Reducers, et les répertoires contenant le fichier d’entrée (myinput) et la sortie à générer (joboutput). Le répertoire de sortie, après exécution, contiendra un fichier appelé part-00000, représentant la sortie désirée. Remarque 1 : Nous utilisons Hadoop Streaming qui permet de créer et lancer des jobs MapReduce avec tout type d’exécutable ou script en tant que mapper et reducer. Ici nos scripts sont en Python, mais les mappers et reducers pourraient être des classes Java, des utilitaires unix,des scripts R, etc. La manière standard est d’écrire des programmes MapReduce en Java via l’API Java MapReduce. Remarque 2 : Le répertoire d’entrée doit contenir un seul fichier. Le répertoire de sortie ne doit pas exister avant l’exécution de l’instruction. Pour faciliter le travail dans notre machine virtuelle, un raccourci a été créé pour cette instruction (vous le trouverez défini dans le fichier /̃.bashrc). Désormais, pour exécuter cette instruction, il suffit de taper : hs mapper.py reducer.py myinput joboutput 3