Tutoriel R pour Hadoop et HDFS
Tutoriel R pour Hadoop et HDFS
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 1
Objectif du tutoriel
L’exemple « wordcount » fait référence. Il est décrit partout sur le web. Mais, à bien y
regarder, les tutoriels qui le reprennent sont (très) rarement reproductibles. Les fichiers
de travail ne sont pas disponibles. On ne voit pas vraiment comment on y accède avec R
lorsqu’ils sont stockés sur le système de fichier HDFS. Bref, on ne peut pas faire tourner
les programmes et se rendre compte réellement de leur mode de fonctionnement.
Nous allons reprendre tout cela étape par étape. Nous décrirons avec force détails chaque
stade de processus, en partant de l’installation d’ un cluster hadoop mono-nœud sur une
machine virtuelle jusqu’à la programmation sous R, en passant par l’installation de R et
de l’environnement de programmation client – serveur RStudio Server.
Les étapes et, par conséquent les sources d’erreurs, sont nombreuses. Nous utiliserons
moults copies d’écran pour appréhender concrètement chaque opération. D’où ce format
de présentation inhabituel pour un tutoriel.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 2
Etapes
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 3
Il est possible d’installer le framework Hadoop directement sur une machine
existante (ex. installation sous Ubuntu). Mais l’opération reste délicate, nécessitant
un certain savoir faire informatique (système).
Heureusement, des éditeurs proposent des solutions clés en main avec la création
d’une machine virtuelle – faisant office d’un cluster à un nœud – intégrant déjà
Hadoop correctement configuré et fonctionnel. Nous utiliserons la distribution
Cloudera basé sur le système d’exploitation CentOs dans ce tutoriel.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 4
Chargement et installation de VirtualBox
VirtualBox est un logiciel libre.
Dans cette copie d’écran, on constate que j’ai déjà installé deux machines invitées sous
VirtualBox : l’une tournant sous Ubuntu et l’autre sous Windows XP.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 5
Chargement de Cloudera (1/2)
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 6
Chargement de
Cloudera (2/2)
Le fichier archive
une fois téléchargé
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 7
Importation de la machine virtuelle sous VirtualBox (1/3)
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 8
Importation de la machine virtuelle sous VirtualBox (2/3)
On a l’impression de
pouvoir choisir, mais en
réalité c’est toujours
CentOS qui est installé.
Le processus d’importation
est démarré lorsque l’on
clique sur IMPORTER.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 9
Importation de la machine virtuelle sous VirtualBox (3/3)
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 10
Démarrage de la machine virtuelle (1/3)
Démarrage de la machine
virtuelle. Attention, cela
peut prendre un certain
temps.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 11
Démarrage de la machine virtuelle (2/3)
Au démarrage de la
machine, Hadoop
est fonctionnel. Il
n’y a pas de
manipulations
particulières à faire
de ce côté-là.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 12
Démarrage de la machine virtuelle (3/3)
Installation du clavier
français pour les
différentes
manipulations
ultérieures. Nous
aurons à saisir des
commandes dans un
terminal notamment.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 13
Le logiciel R sert à interpréter nos programmes.
RStudio Server nous permet d’accéder à l’éditeur de code RStudio via un navigateur.
On peut accéder au serveur en utilisant son numéro IP. Dans notre cas, la même
machine fait office de client et de serveur, nous utilisons 127.0.0.1 (machine locale).
Mais la démarche est très facilement généralisable à un accès distant en utilisant le
numéro IP d’un serveur correctement configuré.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 14
Installation de R et RStudio Server (1/2)
http://www.rstudio.com/products/rstudio/download-server/
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 15
Installation de R et RStudio Server (2/2)
Nous ouvrons un
terminal pour
pouvoir introduire
les commandes
d’installation.
Installation de R
$ sudo yum install R
Installation de Rstudio Server (64 bit)
$ sudo yum install openssl098e # Required only for RedHat/CentOS 6 and 7
$ wget http://download2.rstudio.org/rstudio-server-0.98.1103-x86_64.rpm
$ sudo yum install --nogpgcheck rstudio-server-0.98.1103-x86_64.rpm
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 16
Installation des packages référencés sous R
Pour pouvoir
programmer sous
Hadoop, nous avons
besoin d’une série de
packages référencés
sur le CRAN.
Vient ensuite la
commande
install.packages
indiquant les librairies
et le dépôt source
(repos).
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 17
Installation des
packages spécifiques
sous R (1/3)
Nous souhaitons
utiliser 2 packages de
la collection RHadoop
de la société
RevolutionAnalytics.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 18
Installation des packages spécifiques sous R (2/3)
De nouveau, nous
lançons le terminal,
nous changeons de
répertoire (absolument
nécessaire pour éviter
d’avoir à spécifier des
chemins) et nous
démarrons R en mode
administrateur.
install.packages()
permet aussi d’installer
des librairies à partir
des fichiers chargés
localement.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 19
Installation des packages spécifiques sous R (3/3)
Attention, pour le
package « rhdfs », il
faut d’abord spécifier
les valeurs des
variables
d’environnement -
indiquant la
localisation du système
hadoop sur notre
machine - avant de
pouvoir l’installer.
Nous utilisons la
commande
Sys.setenv() sous R.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 20
Première tentative. Des données sont générées en mémoire, elles sont
stockées dans un fichier temporaire puis la fonction mapreduce() de rmr2 est
appelée. Elle se charge d’appeler successivement en interne les fonction map()
et reduce() que nous avons préalablement codées.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 21
Création d’un dossier pour nos programmes
Les programmes
que nous allons
écrire seront
stockés dans ce
dossier
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 22
Accès à RStudio via un navigateur web (1/2)
Le port est
spécifique, nous
utilisons 8787
Le login est
standardisé,
username : cloudera
password : cloudera
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 23
Accès à RStudio via un navigateur web (2/2)
Nous retrouvons
l’environnement de
développement
habituel de RStudio.
Remarque : Si
l’éditeur de script
n’est pas disponible,
nous pouvons créer
un fichier vierge en
cliquant sur le menu
FILE / NEW FILE / R
SCRIPT
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 24
Programmation MapReduce sur des données créées en mémoire (1/4)
Le programme une
fois rédigé est
sauvegardé dans le
dossier
« MyPrograms » créé
préalablement.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 25
Programmation
#emplacement de la machine virtuelle java
Sys.setenv(JAVA_HOME="/usr/lib/jvm/java-openjdk") MapReduce (2/4) –
Spécification des options
#emplacement de hadoop
Sys.setenv(HADOOP_HOME="/usr/lib/hadoop")
Sys.setenv(HADOOP_CMD="/usr/lib/hadoop/bin/hadoop")
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 26
Programmation MapReduce (3/4) – Ecriture des A la sortie de MAP
fonctions map() et reduce(). Application sur un
key value
vecteur de mots.
one 1
#fonction map two 1
mymap <- function(k,v){
one 1
keyval(v,1)
} one 1
two 1
#fonction reduce
myreduce <- function(k,v){
n <- length(v) Partition basée sur la clé
keyval(k,n)
} Key = one 1 1 1
A la sortie de REDUCE
#récupération de la sortie temporaire sur HDFS
#affichage dans le terminal R
Key = one 3
print(from.dfs(sortie))
Key = two 2
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 27
Programmation MapReduce (4/4) – Lecture de la sortie console
A l’issue de l’exécution, la
sortie est copiée dans un
fichier temporaire sur HDFS
Il nous faut donc tout d’abord expliciter le format et le contenu de ces fichiers,
puis montrer comment nous pouvons les copier dans un dossier spécialement
créé à cet effet sur HDFS, enfin modifier notre programme pour qu’il traite ces
fichiers.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 29
Création de 3 fichiers de données dans un répertoire quelconque
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 30
Copies des fichiers dans un dossier « Data » sur HDFS
Création d’un dossier /data
sur HDFS. Qu’il y ait un nœud
ou plus sur le cluster n’est pas
un souci, pour nous c’est
transparent.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 31
Programmation à partir de fichiers sur HDFS
La partie spécifications des paramètres est identique à précédemment. Idem
en ce qui concerne les fonction map() et reduce()
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 32
Sorties du programme (1/2)
Les 3 fichiers du dossier /data
sont bien visibles.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 33
Sorties du programme (2/2)
reduce() a été appelé 5
fois parce qu’il y a 5
valeurs différentes de
clés.
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 34
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 35
Tutoriel Tanagra, « MapReduce avec R », février 2015.
Hugh Devlin, « Mapreduce in R », janvier 2014.
Cloudera, « Cloudera Product Downloads ».
RStudio, « Download RStudio Server – RedHat/CentOS ».
RevolutionAnalytics, « RHadoop ».
Ricco Rakotomalala
Tutoriels Tanagra - http://tutoriels-data-mining.blogspot.fr/ 36