2013-09-27 3 views
1

Я пытаюсь запустить программу 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 терпеть неудачу.

Я был бы очень признателен за любую помощь! Спасибо

+0

У вас нет ntlk corpus в вашем каталоге hadoop. Попробуйте http://stackoverflow.com/questions/10716302/how-to-import-nltk-corpus-in-hdfs-when-i-use-hadoop-streaming – user1525721

+0

Попробуйте также --- Http: //stackoverflow.com/questions/6811549/how-can-i-include-a-python-package-with-hadoop-streaming-job – user1525721

+0

@ user1525721 Спасибо за ответы. Попробует и отправлю обратно. Если у меня есть NLTK на всех узлах, будет ли это все еще необходимо? – Objc55

ответ

0

Is 'русский' файл в print stopwords.words('english')? Если да, вам нужно использовать -file для этого, чтобы отправить его через узлы.

0

Используйте эти команды для распаковки:

importer = zipimport.zipimporter('nltk.zip') 
    importer2=zipimport.zipimporter('yaml.zip') 
    yaml = importer2.load_module('yaml') 
    nltk = importer.load_module('nltk') 

проверить ссылки, которые я вставленные выше. Они упомянули все этапы.

+0

Нужно ли отправлять эти файлы в консольную команду или сохранять их на локальном компьютере на каждой машине? Кроме того, мне нужно nltk.zip или nltk_data.zip? Как я могу найти первое? Какую роль в этом играет ямль? Благодаря! – Objc55

+0

Я пробовал то, что вы предлагали, и без проблем импортировал nltk и yaml. Тем не менее, я до сих пор не могу заставить работать с паролями. 'from nltk.corpus import stopwords' не приводит к сбою программы, но как только я набираю' print stopwords.words ('english') ', он терпит неудачу. Любая идея, как исправить? Я включил это в консольную команду: '-archives./Stopwords.zip' Спасибо! – Objc55

Смежные вопросы