2016-09-30 4 views
0

Я новичок в hadoop и mapreduce, я пытаюсь написать mapreduce, который учитывает 10 самых популярных слов слова txt-файла.Hadoop Streaming простая работа с ошибкой python

Мой TXT-файл 'q2_result.txt' выглядит следующим образом:

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) 

Разбавление:

#!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) 

Я знаю, что вы можете передать флаг -D в команде Hadoop jar, поэтому он сортирует по желаемому ключу (в моем случае счетчик k2,2), здесь я просто использую простую команду firs т:

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 

Так я думал, что такой простой картографа и редуктор не должен дать мне ошибки, но он сделал, и я не могу понять, почему, ошибки здесь: http://pastebin.com/PvY4d89c

(Я использую Horton работает HDP Sandbox на virtualBox на Ubuntu16.04)

+0

Пожалуйста, проверьте это http://stackoverflow.com/questions/4339788/hadoop-streaming- не удалось найти файл-ошибку – Rahmath

ответ

0

Я знаю, что «ошибка файла не найдена» означает нечто совершенно отличное от «файл не может быть выполнен», в этом случае проблема в том, что файл не может быть выполнен.

В Reducer.py:

Неправильно:

#!usr/bin/env/ python 

Правильно:

#!/usr/bin/env python 
+0

Не могу поверить, что я пропустил это ..., и не могли бы вы объяснить, почему эта разница может вызвать ошибку в потоке хаопов? И я вроде понимаю, в том числе #! сообщает hadoop, что вы выполняете файлы python. – Sam

+1

'env - это программа, локализованная в/usr/bin.' Написание 'usr/bin/env /' на самом деле вы запускаете каталог. Эта программа позволяет использовать питон без использования абсолютного пути. С помощью #! вы говорите, какая программа выполняет скрипт, и она должна существовать и быть запущена. – ozw1z5rd