Я пытаюсь запустить программу Python на Hadoop. Программа включает библиотеку NLTK. В программе также используется API Hadoop Streaming, как описано here.Hadoop и NLTK: сбой с ошибками
mapper.py:
#!/usr/bin/env python
import sys
import nltk
from nltk.corpus import stopwords
#print stopwords.words('english')
for line in sys.stdin:
print line,
reducer.py:
#!/usr/bin/env python
import sys
for line in sys.stdin:
print line,
консоли команду:
bin/hadoop jar contrib/streaming/hadoop-streaming.jar \ -file /hadoop/mapper.py -mapper /hadoop/mapper.py -file /hadoop/reducer.py -reducer /hadoop/reducer.py -input /hadoop/input.txt -output /hadoop/output
Это работает Perfe ctly, с выходом, просто содержащим строки входного файла.
Однако, когда эта линия (от mapper.py):
#print stopwords.words ('английский')
является раскомментирована, то программа не говорит и
Job not successful. Error: # of failed Map Tasks exceeded allowed limit. FailedCount: 1.
Я проверил и в программах на языке Python,
print stopwords.words('english')
работает отлично, и поэтому я абсолютно в тупике, почему он заставляет мою программу Hadoop терпеть неудачу.
Я был бы очень признателен за любую помощь! Спасибо
У вас нет ntlk corpus в вашем каталоге hadoop. Попробуйте http://stackoverflow.com/questions/10716302/how-to-import-nltk-corpus-in-hdfs-when-i-use-hadoop-streaming – user1525721
Попробуйте также --- Http: //stackoverflow.com/questions/6811549/how-can-i-include-a-python-package-with-hadoop-streaming-job – user1525721
@ user1525721 Спасибо за ответы. Попробует и отправлю обратно. Если у меня есть NLTK на всех узлах, будет ли это все еще необходимо? – Objc55