2016-09-30 4 views
0

Ich bin neu bei hadoop und mapreduce, ich versuche, eine mapreduce zu schreiben, die die Top 10 zählt Wörter einer Wortzahl txt-Datei zählt.Hadoop Streaming einfacher Job fehlschlägt Fehler Python

Meine txt-Datei 'q2_result.txt' wie folgt aussieht:

yourself  268 
yourselves  73 
yoursnot  1 
youst 1 
youth 270 
youthat 1 
youthful  31 
youths 9 
youtli 1 
youwell 1 
youwondrous  1 
youyou 1 
zanies 1 
zany 1 
zeal 32 
zealous 6 
zeals 1 

Mapper:

#!/usr/bin/env python 

import sys 

for line in sys.stdin: 
    line = line.strip() 
    word, count = line.split() 
    print "%s\t%s" % (word, count) 

Reducer:

#!usr/bin/env/ python 

import sys 

top_n = 0 
for line in sys.stdin: 
    line = line.strip() 
    word, count = line.split() 

    top_n += 1 
    if top_n == 11: 
     break 
    print '%s\t%s' % (word, count) 

Ich weiß, dass Sie eine Flagge passieren kann :-D Option in Hadoop jar Befehl, so dass es nach dem gewünschten Schlüssel sortiert (in meinem Fall die Anzahl, die k2,2 ist), hier verwende ich einfach einen einfachen Befehl Tannen t:

hadoop jar /usr/hdp/2.5.0.0-1245/hadoop-mapreduce/hadoop-streaming-2.7.3.2.5.0.0-1245.jar -file /root/LAB3/mapper.py -mapper mapper.py -file /root/LAB3/reducer.py -reducer reducer.py -input /user/root/lab3/q2_result.txt -output /user/root/lab3/test_out 

Also dachte ich solche einfachen Mapper und Minderer sollte mir Fehler nicht geben, aber es tat, und ich kann nicht herausfinden, warum Fehler hier: http://pastebin.com/PvY4d89c

(Ich bin mit der Horton arbeitet HDP Sandbox auf einer virtuellen Box auf Ubuntu16.04)

+0

Bitte check this out http://stackoverflow.com/questions/4339788/hadoop-streaming- unable-find-file-error – Rahmath

Antwort

0

Ich weiß, "Datei nicht gefunden Fehler" bedeutet etwas völlig anderes als "Datei kann nicht ausgeführt werden", in diesem Fall ist das Problem, dass die Datei nicht ausgeführt werden kann.

In Reducer.py:

Falsch:

#!usr/bin/env/ python 

Richtig:

#!/usr/bin/env python 
+0

Ich kann nicht glauben, dass ich es verpasst habe ..., und könnten Sie erklären, warum dieser Unterschied beim Hadoop-Streaming zu Fehlern führen würde? Und ich verstehe auch #! sagt Hadoop, dass Sie Python-Dateien ausführen. – Sam

+1

'env ist ein lokalisierbares Programm in/usr/bin. '' Usr/bin/env/'schreibst du eigentlich ein Verzeichnis. Mit diesem Programm können Sie Python verwenden, ohne einen absoluten Pfad zu verwenden. Mit #! Sie sagen, welches Programm das Skript ausführt und es muss existieren und ausführbar sein. – ozw1z5rd

Verwandte Themen