Bonjour,
Dans le cadre d'un projet scolaire, je découvre Hadoop et doit implémenter plusieurs jobs map-reduce.
Pour se faire, j'ai utilisé Hadoop Streaming afin de développer les fonctions en Python.
Les premiers jobs que j'ai implémenté fonctionnent correctement mais je me heurte à un problème.
Dans le job actuel, mes données d'entrée sont au format n-triple, à savoir :
<sujet> <propriété> <objet>
ou
<sujet> <propriété> "objet"
Mon but est de retourner les 10 sujets comportant le plus de propriétés distinctes.
Pour
se faire, je réalise un premier map-reduce qui regroupe les sujets avec
leurs propriétés et retourne chaque sujet avec le nombre de propriétés
distinctes.
Voici le code :
mapper1.pyreducer1.pyEn sortie, j'obtiens ce genre de données d'entrée, que je stock dans un fichier temporaire, pour le second map :
http://data.europeana.eu/aggregation/europeana/08703/0001F913139F19C2EDC8AA1E0246BA442A15C6F3 10
http://data.europeana.eu/aggregation/europeana/08703/0007CF33563EE7E10836D83E2248B73F89892177 10
Mon
second mapper inverse la clé et la valeur afin de pouvoir classer les
entrées par nombre de propriété décroissant, cela afin que le reducer ne
sélectionne que les 10 premières valeurs.
Voici le code :
mapper2.pyreducer2.pyJ'exécute
le second job Hadoop à l'aide de la commande suivante, la variable
STREAM est un raccourci pour récupérer l'archive de hadoop-streaming :
hadoop jar $STREAM -D mapreduce.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator\
-D mapreduce.text.key.comparator.options=-nr\
-mapper mapper2.py\
-reducer reducer2.py\
-input $OUTPUT_HADOOP/$OUTPUT1/part-00000\
-output $OUTPUT_HADOOP/$OUTPUT2
Les 2 premières options permettent de trier les données par ordre décroissant de nombre de propriétés.
Malheureusement, voici ce que m'affiche Hadoop en sorti :
http://pastebin.com/M3U3Uu8WCe qui est étrange est que je peux lancer le code à l'aide de la commande suivante fonctionne :
hdfs dfs -cat output_15-39/result1/part-00000 | ./mapper2.py | sort -nr| ./reducer2.py
J'ai eu beau parcourir la sortie, je n'arrive pas à comprendre le problème.
J'exécute le code sur un Debian 7.8 64bits fraîchement installé, avec Hadoop 2.6.0 et java 1.6.0_34.
Merci
d'avance pour votre aide, c'est frustrant de ne pas avoir d'erreur
claire et donc de ne savoir où chercher pour régler le problème.
Cordialement,
Erwan