Hadoop calcul moyenne mobile

publicité
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
Téléchargement