Hadoop Streamin, "Job failed due to: NA""

24 views
Skip to first unread message

Erwan C.

unread,
Mar 16, 2015, 7:12:26 AM3/16/15
to hadoop-user-...@googlegroups.com
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.py
reducer1.py

En 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.py
reducer2.py

J'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/M3U3Uu8W

Ce 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

matt Lieber

unread,
Mar 16, 2015, 12:44:31 PM3/16/15
to hadoop-user-...@googlegroups.com
Erwan,

Ca a l'air d'etre un probleme Hadoop specifique vu que le script tout seul fonctionne. Je regarderais le Job tracker UI, trouve le mapper qui plante, et regarde l'erreur elle-meme sur le log stderr, il y  a une chance que l'erreur soit plus specifique. 'broken pipe' veut dire qu'il y a un probleme de communication entre les machines. J'essaierais aussi un test standard, avec un des examples fournis, et voir si que tout fonctionne bien.

matt

--
Hadoop User Group France
http://hugfrance.fr | https://twitter.com/hugfrance
---
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "Hadoop User Group France".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse hadoop-user-group-...@googlegroups.com.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.

Erwan C.

unread,
Mar 26, 2015, 1:38:06 AM3/26/15
to hadoop-user-...@googlegroups.com
Bonjour,

Merci pour votre réponse.

En réfléchissant à pourquoi je pourrais avoir un 'broken pipe', je me suis dit que le problème venait peut-être d'une lecture partielle des données en entrée.
J'ai donc ajouter 2 lignes afin de lire toutes les données. Cela ne produit pas un résultat élégant et efficace en terme de temps d'exécution mais ça a le mérite de fonctionner.

Voici le code qui fonctionne :

Il doit y avoir une manière plus élégante de le faire mais je n'ai pas cherché tellement plus loin pour le moment.

Si cela vous inspire une solution plus élégante, n'hésitez pas à partager, c'est toujours bon à prendre.

Merci pour votre aide.
Erwan

Le lundi 16 mars 2015 17:44:31 UTC+1, matt lieber a écrit :
Erwan,

Ca a l'air d'etre un probleme Hadoop specifique vu que le script tout seul fonctionne. Je regarderais le Job tracker UI, trouve le mapper qui plante, et regarde l'erreur elle-meme sur le log stderr, il y  a une chance que l'erreur soit plus specifique. 'broken pipe' veut dire qu'il y a un probleme de communication entre les machines. J'essaierais aussi un test standard, avec un des examples fournis, et voir si que tout fonctionne bien.

matt
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse hadoop-user-group-france+unsub...@googlegroups.com.

matt Lieber

unread,
Mar 26, 2015, 12:43:01 PM3/26/15
to hadoop-user-...@googlegroups.com
Oui on dirait que ca marche parce que ca fait en sorte que stdin a des donnes a fournir; 
Pourquoi ne pas essayer ce code:
while True:
    s = sys.stdin.readline()
    if not s:
        break
    sys.stdout.write(s)

Si ca ne marche pas, ce thread a aussi des informations complementaires : try catch code, + de logging, etc - 

Matt


Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse hadoop-user-group-...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages