Я пытаюсь запустить задание Map-Reduce в Hadoop Streaming с помощью сценариев Python и получаю те же ошибки, что и Ошибка выполнения задания Hadoop Streaming в Python , но эти решения не работали для меня.
Мои сценарии работают нормально, когда я запускаю "cat sample.txt | ./p1mapper.py | sort | ./p1reducer.py"
Но когда я запускаю следующее:
./bin/hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar \
-input "p1input/*" \
-output p1output \
-mapper "python p1mapper.py" \
-reducer "python p1reducer.py" \
-file /Users/Tish/Desktop/HW1/p1mapper.py \
-file /Users/Tish/Desktop/HW1/p1reducer.py
(NB: даже если я удалю "python" или наберу полный путь для -mapper и -reducer, результат будет таким же)
Вот результат, который я получаю: p1mapper.py
#!/usr/bin/env python
import sys
import re
SEQ_LEN = 4
eos = re.compile('(?<=[a-zA-Z])\.') # period preceded by an alphabet
ignore = re.compile('[\W\d]')
for line in sys.stdin:
array = re.split(eos, line)
for sent in array:
sent = ignore.sub('', sent)
sent = sent.lower()
if len(sent) >= SEQ_LEN:
for i in range(len(sent)-SEQ_LEN + 1):
print '%s 1' % sent[i:i+SEQ_LEN]
p1reducer.py
#!/usr/bin/env python
from operator import itemgetter
import sys
word2count = {}
for line in sys.stdin:
word, count = line.split(' ', 1)
try:
count = int(count)
word2count[word] = word2count.get(word, 0) + count
except ValueError: # count was not a number
pass
# sort
sorted_word2count = sorted(word2count.items(), key=itemgetter(1), reverse=True)
# write the top 3 sequences
for word, count in sorted_word2count[0:3]:
print '%s\t%s'% (word, count)
Был бы очень признателен за любую помощь, спасибо!
ОБНОВЛЕНИЕ:
hdfs-site.xml:
dfs.replication
1
mapred-site.xml:
mapred.job.tracker
localhost:54311