Я пытаюсь запустить программу Python на Hadoop. Программа включает библиотеку NLTK. Программа также использует API Hadoop Streaming, как описано здесь.
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
Это выполняется отлично, при этом вывод просто содержит строки входного файла.
Однако, когда эта строка (из mapper.py):
#print stopwords.words('english')
без комментирования, программа не работает и говорит:
Работа не удалась. Ошибка: количество неудачных заданий карты превысило допустимый предел. FailedCount: 1.
Я проверил и в автономной программе python,
print stopwords.words('english')
работает отлично, и поэтому я абсолютно зациклен на том, почему он заставляет мою программу Hadoop терпеть неудачу.
Я был бы очень признателен за любую помощь! спасибо
Является ли "английский" в файле print stopwords.words('english')
? Если да, вам нужно использовать -file
для этого, чтобы отправить его через узлы.
Используйте эти команды для распаковки:
importer = zipimport.zipimporter('nltk.zip')
importer2=zipimport.zipimporter('yaml.zip')
yaml = importer2.load_module('yaml')
nltk = importer.load_module('nltk')
Чек ссылки, которые я вставил выше. Они упомянули все этапы.
from nltk.corpus import stopwords
не приводит к сбою программы, но как только я print stopwords.words('english')
, происходит сбой. Есть идеи как исправить? Я включил это в консольную команду: -archives ./stopwords.zip
Спасибо!