我正在尝试在Hadoop上运行一个Python程序。 该计划涉及NLTK库。 该程序还利用Hadoop Streaming API,如此处所述。
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 停用词.words("英语"(
未注释,然后程序失败并说
作业不成功。错误:超出允许的失败地图任务数 # 限制。失败计数:1。
我已经检查过并在一个独立的 python 程序中,
打印停用词.单词("英语"(
工作得很好,所以我绝对不知道为什么它会导致我的Hadoop程序失败。
我将非常感谢任何帮助! 谢谢
">English"是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')
删除我上面粘贴的链接。他们提到了所有步骤。